# fix(repo): abort clone cleanly when the cluster picker is cancelled

`ad59489`→[main](/content/gh/entireio/cli/commits/main/index.html)·

toothbrush·2w ago·1 file·+9 added/-2 removed

Ctrl+C in the multi-cluster picker returned a zero-value mirror with a nil error, so clone fell through to `git clone entire:///gh/...` (empty host). Treat a cancelled picker as a silent abort.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>

## Sessions

2896bbc87616View transcript

[?\
Add Entire Repo Clone CommandClaude Code·Opus 4.8[1m]·1 step](/content/gh/entireio/cli/session/e77355db-5c1c-4286-94f0-431cf4b77954#timeline-2896bbc87616/index.html)

## Changes

1

- cmd/entire/cli

- Mrepo_clone.go+9/-2

```
200 unmodified lines

201
202
203
204
204
205
206
207
208
209
210
211
212
213
214
208
215
216
217
218

200 unmodified lines

),
	)
	if err := form.RunWithContext(cmd.Context()); err != nil {
		return coreapi.Mirror{}, handleFormCancellation(cmd.ErrOrStderr(), "Clone", err)
		// handleFormCancellation prints "Clone cancelled." and returns nil for a
		// Ctrl+C / cancelled-context abort. Surface that as a SilentError so the
		// caller stops instead of falling through to clone a zero-value target
		// (the `entire:///gh/...` empty-host bug); a real form error propagates.
		if cerr := handleFormCancellation(cmd.ErrOrStderr(), "Clone", err); cerr != nil {
			return coreapi.Mirror{}, cerr
		}
		return coreapi.Mirror{}, NewSilentError(errors.New("clone cancelled"))
	}
	m, ok := byHost[selected];
	if !ok {
		return coreapi.Mirror{}, errors.New("no cluster selected")
		return coreapi.Mirror{}, NewSilentError(errors.New("clone cancelled"))
	}
	return m, nil
}
```

Mcmd/entire/cli/repo_clone.go+9/-2
