]> git.ipfire.org Git - thirdparty/git.git/blame - builtin/checkout.c
switch: stop accepting pathspec
[thirdparty/git.git] / builtin / checkout.c
CommitLineData
f8adbec9 1#define USE_THE_INDEX_COMPATIBILITY_MACROS
782c2d65 2#include "builtin.h"
0dabeffc
NTND
3#include "advice.h"
4#include "blob.h"
5#include "branch.h"
6#include "cache-tree.h"
7c85a87c 7#include "checkout.h"
0dabeffc
NTND
8#include "commit.h"
9#include "config.h"
10#include "diff.h"
11#include "dir.h"
12#include "ll-merge.h"
697cc8ef 13#include "lockfile.h"
0dabeffc
NTND
14#include "merge-recursive.h"
15#include "object-store.h"
782c2d65
DB
16#include "parse-options.h"
17#include "refs.h"
0dabeffc
NTND
18#include "remote.h"
19#include "resolve-undo.h"
20#include "revision.h"
21#include "run-command.h"
22#include "submodule.h"
23#include "submodule-config.h"
782c2d65
DB
24#include "tree.h"
25#include "tree-walk.h"
26#include "unpack-trees.h"
0cf8581e 27#include "xdiff-interface.h"
782c2d65 28
fa655d84
BP
29static int checkout_optimize_new_branch;
30
782c2d65 31static const char * const checkout_usage[] = {
9c9b4f2f
AH
32 N_("git checkout [<options>] <branch>"),
33 N_("git checkout [<options>] [<branch>] -- <file>..."),
782c2d65
DB
34 NULL,
35};
36
d787d311
NTND
37static const char * const switch_branch_usage[] = {
38 N_("git switch [<options>] [<branch>]"),
39 NULL,
40};
41
db941099 42struct checkout_opts {
e51e3057 43 int patch_mode;
db941099
JH
44 int quiet;
45 int merge;
46 int force;
32669671 47 int force_detach;
38901a48 48 int writeout_stage;
c1d7036b 49 int overwrite_ignore;
08d595dc 50 int ignore_skipworktree;
1d0fa898 51 int ignore_other_worktrees;
870ebdb9 52 int show_progress;
0f086e6d 53 int count_checkout_paths;
091e04bc 54 int overlay_mode;
55cf704a 55 int no_dwim_new_local_branch;
3ec37ad1 56 int discard_changes;
5c06e269 57 int accept_pathspec;
55cf704a 58
fa655d84
BP
59 /*
60 * If new checkout options are added, skip_merge_working_tree
61 * should be updated accordingly.
62 */
db941099
JH
63
64 const char *new_branch;
02ac9837 65 const char *new_branch_force;
9db5ebf4 66 const char *new_orphan_branch;
db941099
JH
67 int new_branch_log;
68 enum branch_track track;
175f6e59 69 struct diff_options diff_options;
55cf704a 70 char *conflict_style;
e51e3057
NTND
71
72 int branch_exists;
73 const char *prefix;
817b345a 74 struct pathspec pathspec;
e51e3057 75 struct tree *source_tree;
db941099
JH
76};
77
c8a3ea1f 78static int post_checkout_hook(struct commit *old_commit, struct commit *new_commit,
782c2d65
DB
79 int changed)
80{
15048f8a 81 return run_hook_le(NULL, "post-checkout",
c8a3ea1f
BW
82 oid_to_hex(old_commit ? &old_commit->object.oid : &null_oid),
83 oid_to_hex(new_commit ? &new_commit->object.oid : &null_oid),
15048f8a 84 changed ? "1" : "0", NULL);
c8a3ea1f 85 /* "new_commit" can be NULL when checking out from the index before
2292ce47 86 a commit exists. */
ae98a008 87
782c2d65
DB
88}
89
df46d77e 90static int update_some(const struct object_id *oid, struct strbuf *base,
671f0707 91 const char *pathname, unsigned mode, int stage, void *context)
782c2d65
DB
92{
93 int len;
94 struct cache_entry *ce;
c5326bd6 95 int pos;
782c2d65 96
782c2d65
DB
97 if (S_ISDIR(mode))
98 return READ_TREE_RECURSIVE;
99
6a0b0b6d 100 len = base->len + strlen(pathname);
a849735b 101 ce = make_empty_cache_entry(&the_index, len);
df46d77e 102 oidcpy(&ce->oid, oid);
6a0b0b6d
NTND
103 memcpy(ce->name, base->buf, base->len);
104 memcpy(ce->name + base->len, pathname, len - base->len);
b60e188c
TG
105 ce->ce_flags = create_ce_flags(0) | CE_UPDATE;
106 ce->ce_namelen = len;
782c2d65 107 ce->ce_mode = create_ce_mode(mode);
c5326bd6
JK
108
109 /*
110 * If the entry is the same as the current index, we can leave the old
111 * entry in place. Whether it is UPTODATE or not, checkout_entry will
112 * do the right thing.
113 */
114 pos = cache_name_pos(ce->name, ce->ce_namelen);
115 if (pos >= 0) {
116 struct cache_entry *old = active_cache[pos];
117 if (ce->ce_mode == old->ce_mode &&
4a7e27e9 118 oideq(&ce->oid, &old->oid)) {
c5326bd6 119 old->ce_flags |= CE_UPDATE;
a849735b 120 discard_cache_entry(ce);
c5326bd6
JK
121 return 0;
122 }
123 }
124
782c2d65
DB
125 add_cache_entry(ce, ADD_CACHE_OK_TO_ADD | ADD_CACHE_OK_TO_REPLACE);
126 return 0;
127}
128
18e4f405 129static int read_tree_some(struct tree *tree, const struct pathspec *pathspec)
782c2d65 130{
e092073d
NTND
131 read_tree_recursive(the_repository, tree, "", 0, 0,
132 pathspec, update_some, NULL);
782c2d65 133
782c2d65
DB
134 /* update the index with the given tree's info
135 * for all args, expanding wildcards, and exit
136 * with any non-zero return code.
137 */
138 return 0;
139}
140
9c5e6c80 141static int skip_same_name(const struct cache_entry *ce, int pos)
8fdcf312
JH
142{
143 while (++pos < active_nr &&
144 !strcmp(active_cache[pos]->name, ce->name))
145 ; /* skip */
146 return pos;
147}
148
091e04bc
TG
149static int check_stage(int stage, const struct cache_entry *ce, int pos,
150 int overlay_mode)
38901a48
JH
151{
152 while (pos < active_nr &&
153 !strcmp(active_cache[pos]->name, ce->name)) {
154 if (ce_stage(active_cache[pos]) == stage)
155 return 0;
156 pos++;
157 }
091e04bc
TG
158 if (!overlay_mode)
159 return 0;
9f97ab08
ÆAB
160 if (stage == 2)
161 return error(_("path '%s' does not have our version"), ce->name);
162 else
163 return error(_("path '%s' does not have their version"), ce->name);
38901a48
JH
164}
165
9c5e6c80 166static int check_stages(unsigned stages, const struct cache_entry *ce, int pos)
0cf8581e 167{
fbbccd0a
JH
168 unsigned seen = 0;
169 const char *name = ce->name;
170
171 while (pos < active_nr) {
172 ce = active_cache[pos];
173 if (strcmp(name, ce->name))
174 break;
175 seen |= (1 << ce_stage(ce));
176 pos++;
177 }
178 if ((stages & seen) != stages)
179 return error(_("path '%s' does not have all necessary versions"),
180 name);
0cf8581e
JH
181 return 0;
182}
183
ce25e4c7 184static int checkout_stage(int stage, const struct cache_entry *ce, int pos,
7d0c1f45
JH
185 const struct checkout *state, int *nr_checkouts,
186 int overlay_mode)
38901a48
JH
187{
188 while (pos < active_nr &&
189 !strcmp(active_cache[pos]->name, ce->name)) {
190 if (ce_stage(active_cache[pos]) == stage)
0f086e6d
NTND
191 return checkout_entry(active_cache[pos], state,
192 NULL, nr_checkouts);
38901a48
JH
193 pos++;
194 }
091e04bc
TG
195 if (!overlay_mode) {
196 unlink_entry(ce);
197 return 0;
198 }
9f97ab08
ÆAB
199 if (stage == 2)
200 return error(_("path '%s' does not have our version"), ce->name);
201 else
202 return error(_("path '%s' does not have their version"), ce->name);
38901a48 203}
8fdcf312 204
0f086e6d 205static int checkout_merged(int pos, const struct checkout *state, int *nr_checkouts)
0cf8581e
JH
206{
207 struct cache_entry *ce = active_cache[pos];
208 const char *path = ce->name;
209 mmfile_t ancestor, ours, theirs;
210 int status;
60af7691 211 struct object_id oid;
0cf8581e 212 mmbuffer_t result_buf;
60af7691 213 struct object_id threeway[3];
335c6e40 214 unsigned mode = 0;
0cf8581e 215
fbbccd0a
JH
216 memset(threeway, 0, sizeof(threeway));
217 while (pos < active_nr) {
218 int stage;
219 stage = ce_stage(ce);
220 if (!stage || strcmp(path, ce->name))
221 break;
60af7691 222 oidcpy(&threeway[stage - 1], &ce->oid);
fbbccd0a
JH
223 if (stage == 2)
224 mode = create_ce_mode(ce->ce_mode);
225 pos++;
226 ce = active_cache[pos];
227 }
60af7691 228 if (is_null_oid(&threeway[1]) || is_null_oid(&threeway[2]))
fbbccd0a 229 return error(_("path '%s' does not have necessary versions"), path);
0cf8581e 230
d449347d 231 read_mmblob(&ancestor, &threeway[0]);
232 read_mmblob(&ours, &threeway[1]);
233 read_mmblob(&theirs, &threeway[2]);
0cf8581e 234
18b037a5
JN
235 /*
236 * NEEDSWORK: re-create conflicts from merges with
237 * merge.renormalize set, too
238 */
f0531a29 239 status = ll_merge(&result_buf, path, &ancestor, "base",
32eaa468
NTND
240 &ours, "ours", &theirs, "theirs",
241 state->istate, NULL);
0cf8581e
JH
242 free(ancestor.ptr);
243 free(ours.ptr);
244 free(theirs.ptr);
245 if (status < 0 || !result_buf.ptr) {
246 free(result_buf.ptr);
e8a8a4d7 247 return error(_("path '%s': cannot merge"), path);
0cf8581e
JH
248 }
249
250 /*
251 * NEEDSWORK:
252 * There is absolutely no reason to write this as a blob object
514e8039
JS
253 * and create a phony cache entry. This hack is primarily to get
254 * to the write_entry() machinery that massages the contents to
255 * work-tree format and writes out which only allows it for a
256 * cache entry. The code in write_entry() needs to be refactored
257 * to allow us to feed a <buffer, size, mode> instead of a cache
258 * entry. Such a refactoring would help merge_recursive as well
259 * (it also writes the merge result to the object database even
260 * when it may contain conflicts).
0cf8581e 261 */
a09c985e 262 if (write_object_file(result_buf.ptr, result_buf.size, blob_type, &oid))
e8a8a4d7 263 die(_("Unable to add merge result for '%s'"), path);
443a12f3 264 free(result_buf.ptr);
a849735b 265 ce = make_transient_cache_entry(mode, &oid, path, 2);
048f2762 266 if (!ce)
e8a8a4d7 267 die(_("make_cache_entry failed for path '%s'"), path);
0f086e6d 268 status = checkout_entry(ce, state, NULL, nr_checkouts);
a849735b 269 discard_cache_entry(ce);
0cf8581e
JH
270 return status;
271}
8fdcf312 272
091e04bc
TG
273static void mark_ce_for_checkout_overlay(struct cache_entry *ce,
274 char *ps_matched,
275 const struct checkout_opts *opts)
b7033e73
TG
276{
277 ce->ce_flags &= ~CE_MATCHED;
278 if (!opts->ignore_skipworktree && ce_skip_worktree(ce))
279 return;
280 if (opts->source_tree && !(ce->ce_flags & CE_UPDATE))
281 /*
282 * "git checkout tree-ish -- path", but this entry
283 * is in the original index but is not in tree-ish
284 * or does not match the pathspec; it will not be
285 * checked out to the working tree. We will not do
286 * anything to this entry at all.
287 */
288 return;
289 /*
290 * Either this entry came from the tree-ish we are
291 * checking the paths out of, or we are checking out
292 * of the index.
293 *
294 * If it comes from the tree-ish, we already know it
295 * matches the pathspec and could just stamp
296 * CE_MATCHED to it from update_some(). But we still
297 * need ps_matched and read_tree_recursive (and
298 * eventually tree_entry_interesting) cannot fill
299 * ps_matched yet. Once it can, we can avoid calling
300 * match_pathspec() for _all_ entries when
301 * opts->source_tree != NULL.
302 */
303 if (ce_path_match(&the_index, ce, &opts->pathspec, ps_matched))
304 ce->ce_flags |= CE_MATCHED;
305}
306
091e04bc
TG
307static void mark_ce_for_checkout_no_overlay(struct cache_entry *ce,
308 char *ps_matched,
309 const struct checkout_opts *opts)
310{
311 ce->ce_flags &= ~CE_MATCHED;
312 if (!opts->ignore_skipworktree && ce_skip_worktree(ce))
313 return;
314 if (ce_path_match(&the_index, ce, &opts->pathspec, ps_matched)) {
315 ce->ce_flags |= CE_MATCHED;
316 if (opts->source_tree && !(ce->ce_flags & CE_UPDATE))
317 /*
318 * In overlay mode, but the path is not in
319 * tree-ish, which means we should remove it
320 * from the index and the working tree.
321 */
322 ce->ce_flags |= CE_REMOVE | CE_WT_REMOVE;
323 }
324}
325
b6312c27
NTND
326static int checkout_paths(const struct checkout_opts *opts,
327 const char *revision)
782c2d65
DB
328{
329 int pos;
68e3d629 330 struct checkout state = CHECKOUT_INIT;
782c2d65 331 static char *ps_matched;
60af7691 332 struct object_id rev;
782c2d65 333 struct commit *head;
d2b3691b 334 int errs = 0;
837e34eb 335 struct lock_file lock_file = LOCK_INIT;
1d1f689b 336 int nr_checkouts = 0, nr_unmerged = 0;
b6312c27 337
e27dd8ae
JH
338 trace2_cmd_mode(opts->patch_mode ? "patch" : "path");
339
b6312c27
NTND
340 if (opts->track != BRANCH_TRACK_UNSPECIFIED)
341 die(_("'%s' cannot be used with updating paths"), "--track");
342
343 if (opts->new_branch_log)
344 die(_("'%s' cannot be used with updating paths"), "-l");
345
346 if (opts->force && opts->patch_mode)
347 die(_("'%s' cannot be used with updating paths"), "-f");
348
349 if (opts->force_detach)
350 die(_("'%s' cannot be used with updating paths"), "--detach");
351
352 if (opts->merge && opts->patch_mode)
353 die(_("'%s' cannot be used with %s"), "--merge", "--patch");
354
355 if (opts->force && opts->merge)
356 die(_("'%s' cannot be used with %s"), "-f", "-m");
357
358 if (opts->new_branch)
359 die(_("Cannot update paths and switch to branch '%s' at the same time."),
360 opts->new_branch);
361
362 if (opts->patch_mode)
363 return run_add_interactive(revision, "--patch=checkout",
480ca644 364 &opts->pathspec);
b6312c27 365
fb4a8464 366 repo_hold_locked_index(the_repository, &lock_file, LOCK_DIE_ON_ERROR);
5ab2a2da 367 if (read_cache_preload(&opts->pathspec) < 0)
e923a8ab 368 return error(_("index file corrupt"));
75336878 369
e51e3057 370 if (opts->source_tree)
18e4f405 371 read_tree_some(opts->source_tree, &opts->pathspec);
75336878 372
8b54c234 373 ps_matched = xcalloc(opts->pathspec.nr, 1);
782c2d65 374
e721c154
NTND
375 /*
376 * Make sure all pathspecs participated in locating the paths
377 * to be checked out.
378 */
b7033e73 379 for (pos = 0; pos < active_nr; pos++)
091e04bc
TG
380 if (opts->overlay_mode)
381 mark_ce_for_checkout_overlay(active_cache[pos],
382 ps_matched,
383 opts);
384 else
385 mark_ce_for_checkout_no_overlay(active_cache[pos],
386 ps_matched,
387 opts);
782c2d65 388
17ddc66e 389 if (report_path_error(ps_matched, &opts->pathspec, opts->prefix)) {
e721c154 390 free(ps_matched);
782c2d65 391 return 1;
e721c154
NTND
392 }
393 free(ps_matched);
782c2d65 394
4421a823
JH
395 /* "checkout -m path" to recreate conflicted state */
396 if (opts->merge)
e721c154 397 unmerge_marked_index(&the_index);
4421a823 398
8fdcf312
JH
399 /* Any unmerged paths? */
400 for (pos = 0; pos < active_nr; pos++) {
9c5e6c80 401 const struct cache_entry *ce = active_cache[pos];
e721c154 402 if (ce->ce_flags & CE_MATCHED) {
8fdcf312
JH
403 if (!ce_stage(ce))
404 continue;
db941099 405 if (opts->force) {
e8a8a4d7 406 warning(_("path '%s' is unmerged"), ce->name);
f9022075 407 } else if (opts->writeout_stage) {
091e04bc 408 errs |= check_stage(opts->writeout_stage, ce, pos, opts->overlay_mode);
0cf8581e 409 } else if (opts->merge) {
fbbccd0a 410 errs |= check_stages((1<<2) | (1<<3), ce, pos);
db941099
JH
411 } else {
412 errs = 1;
e8a8a4d7 413 error(_("path '%s' is unmerged"), ce->name);
db941099 414 }
8fdcf312
JH
415 pos = skip_same_name(ce, pos) - 1;
416 }
417 }
418 if (errs)
419 return 1;
420
d2b3691b 421 /* Now we are committed to check them out */
782c2d65
DB
422 state.force = 1;
423 state.refresh_cache = 1;
d4a2024a 424 state.istate = &the_index;
2841e8f8
LS
425
426 enable_delayed_checkout(&state);
782c2d65
DB
427 for (pos = 0; pos < active_nr; pos++) {
428 struct cache_entry *ce = active_cache[pos];
e721c154 429 if (ce->ce_flags & CE_MATCHED) {
8fdcf312 430 if (!ce_stage(ce)) {
0f086e6d
NTND
431 errs |= checkout_entry(ce, &state,
432 NULL, &nr_checkouts);
8fdcf312
JH
433 continue;
434 }
f9022075 435 if (opts->writeout_stage)
0f086e6d
NTND
436 errs |= checkout_stage(opts->writeout_stage,
437 ce, pos,
7d0c1f45
JH
438 &state,
439 &nr_checkouts, opts->overlay_mode);
f9022075 440 else if (opts->merge)
0f086e6d 441 errs |= checkout_merged(pos, &state,
1d1f689b 442 &nr_unmerged);
8fdcf312 443 pos = skip_same_name(ce, pos) - 1;
782c2d65
DB
444 }
445 }
091e04bc
TG
446 remove_marked_cache_entries(&the_index, 1);
447 remove_scheduled_dirs();
0f086e6d
NTND
448 errs |= finish_delayed_checkout(&state, &nr_checkouts);
449
450 if (opts->count_checkout_paths) {
1d1f689b
NTND
451 if (nr_unmerged)
452 fprintf_ln(stderr, Q_("Recreated %d merge conflict",
453 "Recreated %d merge conflicts",
454 nr_unmerged),
455 nr_unmerged);
0f086e6d 456 if (opts->source_tree)
3c5883b3
NTND
457 fprintf_ln(stderr, Q_("Updated %d path from %s",
458 "Updated %d paths from %s",
0f086e6d
NTND
459 nr_checkouts),
460 nr_checkouts,
461 find_unique_abbrev(&opts->source_tree->object.oid,
462 DEFAULT_ABBREV));
1d1f689b 463 else if (!nr_unmerged || nr_checkouts)
3c5883b3
NTND
464 fprintf_ln(stderr, Q_("Updated %d path from the index",
465 "Updated %d paths from the index",
0f086e6d
NTND
466 nr_checkouts),
467 nr_checkouts);
468 }
782c2d65 469
837e34eb 470 if (write_locked_index(&the_index, &lock_file, COMMIT_LOCK))
e8a8a4d7 471 die(_("unable to write new index file"));
75336878 472
34c290a6 473 read_ref_full("HEAD", 0, &rev, NULL);
21e1ee8f 474 head = lookup_commit_reference_gently(the_repository, &rev, 1);
782c2d65 475
d2b3691b
JH
476 errs |= post_checkout_hook(head, head, 0);
477 return errs;
782c2d65
DB
478}
479
a2b4994c
NTND
480static void show_local_changes(struct object *head,
481 const struct diff_options *opts)
782c2d65
DB
482{
483 struct rev_info rev;
484 /* I think we want full paths, even if we're in a subdirectory. */
2abf3503 485 repo_init_revisions(the_repository, &rev, NULL);
175f6e59 486 rev.diffopt.flags = opts->flags;
782c2d65 487 rev.diffopt.output_format |= DIFF_FORMAT_NAME_STATUS;
28452655 488 diff_setup_done(&rev.diffopt);
782c2d65
DB
489 add_pending_object(&rev, head, NULL);
490 run_diff_index(&rev, 0);
491}
492
b3c0494a 493static void describe_detached_head(const char *msg, struct commit *commit)
782c2d65 494{
f285a2d7 495 struct strbuf sb = STRBUF_INIT;
ca69d4d5 496
3c621839
JK
497 if (!parse_commit(commit))
498 pp_commit_easy(CMIT_FMT_ONELINE, commit, &sb);
ca69d4d5
AR
499 if (print_sha1_ellipsis()) {
500 fprintf(stderr, "%s %s... %s\n", msg,
aab9583f 501 find_unique_abbrev(&commit->object.oid, DEFAULT_ABBREV), sb.buf);
ca69d4d5
AR
502 } else {
503 fprintf(stderr, "%s %s %s\n", msg,
aab9583f 504 find_unique_abbrev(&commit->object.oid, DEFAULT_ABBREV), sb.buf);
ca69d4d5 505 }
782c2d65
DB
506 strbuf_release(&sb);
507}
508
a2b4994c
NTND
509static int reset_tree(struct tree *tree, const struct checkout_opts *o,
510 int worktree, int *writeout_error)
782c2d65
DB
511{
512 struct unpack_trees_options opts;
513 struct tree_desc tree_desc;
bc052d7f 514
782c2d65
DB
515 memset(&opts, 0, sizeof(opts));
516 opts.head_idx = -1;
6286a08d
JH
517 opts.update = worktree;
518 opts.skip_unmerged = !worktree;
782c2d65
DB
519 opts.reset = 1;
520 opts.merge = 1;
521 opts.fn = oneway_merge;
870ebdb9 522 opts.verbose_update = o->show_progress;
34110cd4
LT
523 opts.src_index = &the_index;
524 opts.dst_index = &the_index;
782c2d65
DB
525 parse_tree(tree);
526 init_tree_desc(&tree_desc, tree->buffer, tree->size);
291d823e
JH
527 switch (unpack_trees(1, &tree_desc, &opts)) {
528 case -2:
a2b4994c 529 *writeout_error = 1;
291d823e
JH
530 /*
531 * We return 0 nevertheless, as the index is all right
532 * and more importantly we have made best efforts to
533 * update paths in the work tree, and we cannot revert
534 * them.
535 */
1cf01a34 536 /* fallthrough */
291d823e
JH
537 case 0:
538 return 0;
539 default:
84a5750b 540 return 128;
291d823e 541 }
782c2d65
DB
542}
543
782c2d65
DB
544struct branch_info {
545 const char *name; /* The short name used */
546 const char *path; /* The full name of a real branch */
547 struct commit *commit; /* The named commit */
5883034c
NTND
548 /*
549 * if not null the branch is detached because it's already
550 * checked out in this checkout
551 */
552 char *checkout;
782c2d65
DB
553};
554
555static void setup_branch_path(struct branch_info *branch)
556{
f285a2d7 557 struct strbuf buf = STRBUF_INIT;
ae5a6c36 558
fd4692ff 559 strbuf_branchname(&buf, branch->name, INTERPRET_BRANCH_LOCAL);
a552de75 560 if (strcmp(buf.buf, branch->name))
ae5a6c36 561 branch->name = xstrdup(buf.buf);
a552de75 562 strbuf_splice(&buf, 0, 0, "refs/heads/", 11);
782c2d65
DB
563 branch->path = strbuf_detach(&buf, NULL);
564}
565
fa655d84
BP
566/*
567 * Skip merging the trees, updating the index and working directory if and
568 * only if we are creating a new branch via "git checkout -b <new_branch>."
569 */
570static int skip_merge_working_tree(const struct checkout_opts *opts,
571 const struct branch_info *old_branch_info,
572 const struct branch_info *new_branch_info)
573{
574 /*
575 * Do the merge if sparse checkout is on and the user has not opted in
576 * to the optimized behavior
577 */
578 if (core_apply_sparse_checkout && !checkout_optimize_new_branch)
579 return 0;
580
581 /*
582 * We must do the merge if we are actually moving to a new commit.
583 */
584 if (!old_branch_info->commit || !new_branch_info->commit ||
e43d2dcc
JK
585 !oideq(&old_branch_info->commit->object.oid,
586 &new_branch_info->commit->object.oid))
fa655d84
BP
587 return 0;
588
589 /*
590 * opts->patch_mode cannot be used with switching branches so is
591 * not tested here
592 */
593
594 /*
595 * opts->quiet only impacts output so doesn't require a merge
596 */
597
598 /*
599 * Honor the explicit request for a three-way merge or to throw away
600 * local changes
601 */
602 if (opts->merge || opts->force)
603 return 0;
604
605 /*
606 * --detach is documented as "updating the index and the files in the
607 * working tree" but this optimization skips those steps so fall through
608 * to the regular code path.
609 */
610 if (opts->force_detach)
611 return 0;
612
613 /*
614 * opts->writeout_stage cannot be used with switching branches so is
615 * not tested here
616 */
617
618 /*
619 * Honor the explicit ignore requests
620 */
621 if (!opts->overwrite_ignore || opts->ignore_skipworktree ||
622 opts->ignore_other_worktrees)
623 return 0;
624
625 /*
626 * opts->show_progress only impacts output so doesn't require a merge
627 */
628
091e04bc
TG
629 /*
630 * opts->overlay_mode cannot be used with switching branches so is
631 * not tested here
632 */
633
fa655d84
BP
634 /*
635 * If we aren't creating a new branch any changes or updates will
636 * happen in the existing branch. Since that could only be updating
637 * the index and working directory, we don't want to skip those steps
638 * or we've defeated any purpose in running the command.
639 */
640 if (!opts->new_branch)
641 return 0;
642
643 /*
644 * new_branch_force is defined to "create/reset and checkout a branch"
645 * so needs to go through the merge to do the reset
646 */
647 if (opts->new_branch_force)
648 return 0;
649
650 /*
651 * A new orphaned branch requrires the index and the working tree to be
652 * adjusted to <start_point>
653 */
654 if (opts->new_orphan_branch)
655 return 0;
656
657 /*
658 * Remaining variables are not checkout options but used to track state
659 */
660
8424bfd4
BP
661 /*
662 * Do the merge if this is the initial checkout. We cannot use
663 * is_cache_unborn() here because the index hasn't been loaded yet
664 * so cache_nr and timestamp.sec are always zero.
665 */
666 if (!file_exists(get_index_file()))
667 return 0;
668
fa655d84
BP
669 return 1;
670}
671
a2b4994c 672static int merge_working_tree(const struct checkout_opts *opts,
c8a3ea1f
BW
673 struct branch_info *old_branch_info,
674 struct branch_info *new_branch_info,
a2b4994c 675 int *writeout_error)
782c2d65
DB
676{
677 int ret;
837e34eb 678 struct lock_file lock_file = LOCK_INIT;
b96524f8 679
837e34eb 680 hold_locked_index(&lock_file, LOCK_DIE_ON_ERROR);
53996fe5 681 if (read_cache_preload(NULL) < 0)
e923a8ab 682 return error(_("index file corrupt"));
782c2d65 683
cfc5789a 684 resolve_undo_clear();
3ec37ad1 685 if (opts->discard_changes) {
2e27bd77
DS
686 ret = reset_tree(get_commit_tree(new_branch_info->commit),
687 opts, 1, writeout_error);
782c2d65
DB
688 if (ret)
689 return ret;
690 } else {
691 struct tree_desc trees[2];
692 struct tree *tree;
693 struct unpack_trees_options topts;
bc052d7f 694
782c2d65
DB
695 memset(&topts, 0, sizeof(topts));
696 topts.head_idx = -1;
34110cd4
LT
697 topts.src_index = &the_index;
698 topts.dst_index = &the_index;
782c2d65 699
e294030f 700 setup_unpack_trees_porcelain(&topts, "checkout");
8ccba008 701
782c2d65
DB
702 refresh_cache(REFRESH_QUIET);
703
704 if (unmerged_cache()) {
e8a8a4d7 705 error(_("you need to resolve your current index first"));
04c9e11f 706 return 1;
782c2d65 707 }
04c9e11f
JH
708
709 /* 2-way merge to the new branch */
fa7b3c2f 710 topts.initial_checkout = is_cache_unborn();
04c9e11f
JH
711 topts.update = 1;
712 topts.merge = 1;
c8a3ea1f 713 topts.gently = opts->merge && old_branch_info->commit;
870ebdb9 714 topts.verbose_update = opts->show_progress;
04c9e11f 715 topts.fn = twoway_merge;
c1d7036b
NTND
716 if (opts->overwrite_ignore) {
717 topts.dir = xcalloc(1, sizeof(*topts.dir));
718 topts.dir->flags |= DIR_SHOW_IGNORED;
719 setup_standard_excludes(topts.dir);
720 }
c8a3ea1f
BW
721 tree = parse_tree_indirect(old_branch_info->commit ?
722 &old_branch_info->commit->object.oid :
eb0ccfd7 723 the_hash_algo->empty_tree);
04c9e11f 724 init_tree_desc(&trees[0], tree->buffer, tree->size);
c8a3ea1f 725 tree = parse_tree_indirect(&new_branch_info->commit->object.oid);
04c9e11f
JH
726 init_tree_desc(&trees[1], tree->buffer, tree->size);
727
291d823e 728 ret = unpack_trees(2, trees, &topts);
1c41d280 729 clear_unpack_trees_porcelain(&topts);
49d833dc 730 if (ret == -1) {
782c2d65
DB
731 /*
732 * Unpack couldn't do a trivial merge; either
733 * give up or do a real merge, depending on
734 * whether the merge flag was used.
735 */
736 struct tree *result;
737 struct tree *work;
8a2fce18 738 struct merge_options o;
782c2d65
DB
739 if (!opts->merge)
740 return 1;
64da3ae5
JH
741
742 /*
c8a3ea1f 743 * Without old_branch_info->commit, the below is the same as
64da3ae5
JH
744 * the two-tree unpack we already tried and failed.
745 */
c8a3ea1f 746 if (!old_branch_info->commit)
64da3ae5 747 return 1;
782c2d65
DB
748
749 /* Do more real merge */
750
751 /*
752 * We update the index fully, then write the
753 * tree from the index, then merge the new
754 * branch with the current tree, with the old
755 * branch as the base. Then we reset the index
756 * (but not the working tree) to the new
757 * branch, leaving the working tree as the
758 * merged version, but skipping unmerged
759 * entries in the index.
760 */
761
610d55af 762 add_files_to_cache(NULL, NULL, 0);
7610fa57
JN
763 /*
764 * NEEDSWORK: carrying over local changes
765 * when branches have different end-of-line
766 * normalization (or clean+smudge rules) is
767 * a pain; plumb in an option to set
768 * o.renormalize?
769 */
0d6caa2d 770 init_merge_options(&o, the_repository);
8a2fce18
MV
771 o.verbosity = 0;
772 work = write_tree_from_memory(&o);
782c2d65 773
2e27bd77
DS
774 ret = reset_tree(get_commit_tree(new_branch_info->commit),
775 opts, 1,
a2b4994c 776 writeout_error);
782c2d65
DB
777 if (ret)
778 return ret;
c8a3ea1f
BW
779 o.ancestor = old_branch_info->name;
780 o.branch1 = new_branch_info->name;
8a2fce18 781 o.branch2 = "local";
2e27bd77
DS
782 ret = merge_trees(&o,
783 get_commit_tree(new_branch_info->commit),
784 work,
785 get_commit_tree(old_branch_info->commit),
786 &result);
f241ff0d
JS
787 if (ret < 0)
788 exit(128);
2e27bd77
DS
789 ret = reset_tree(get_commit_tree(new_branch_info->commit),
790 opts, 0,
a2b4994c 791 writeout_error);
548009c0 792 strbuf_release(&o.obuf);
84a5750b
JH
793 if (ret)
794 return ret;
782c2d65
DB
795 }
796 }
797
aecf567c
DT
798 if (!active_cache_tree)
799 active_cache_tree = cache_tree();
800
801 if (!cache_tree_fully_valid(active_cache_tree))
3fd13cbc 802 cache_tree_update(&the_index, WRITE_TREE_SILENT | WRITE_TREE_REPAIR);
aecf567c 803
837e34eb 804 if (write_locked_index(&the_index, &lock_file, COMMIT_LOCK))
e8a8a4d7 805 die(_("unable to write new index file"));
782c2d65 806
3ec37ad1 807 if (!opts->discard_changes && !opts->quiet)
c8a3ea1f 808 show_local_changes(&new_branch_info->commit->object, &opts->diff_options);
782c2d65
DB
809
810 return 0;
811}
812
c8a3ea1f 813static void report_tracking(struct branch_info *new_branch_info)
79a1e6b4 814{
6d21bf96 815 struct strbuf sb = STRBUF_INIT;
c8a3ea1f 816 struct branch *branch = branch_get(new_branch_info->name);
79a1e6b4 817
f39a757d 818 if (!format_tracking_info(branch, &sb, AHEAD_BEHIND_FULL))
79a1e6b4 819 return;
6d21bf96
JH
820 fputs(sb.buf, stdout);
821 strbuf_release(&sb);
b0030db3 822}
79a1e6b4 823
a2b4994c 824static void update_refs_for_switch(const struct checkout_opts *opts,
c8a3ea1f
BW
825 struct branch_info *old_branch_info,
826 struct branch_info *new_branch_info)
782c2d65 827{
f285a2d7 828 struct strbuf msg = STRBUF_INIT;
3bed291a 829 const char *old_desc, *reflog_msg;
782c2d65 830 if (opts->new_branch) {
3631bf77 831 if (opts->new_orphan_branch) {
341fb286
CW
832 char *refname;
833
834 refname = mkpathdup("refs/heads/%s", opts->new_orphan_branch);
835 if (opts->new_branch_log &&
836 !should_autocreate_reflog(refname)) {
1a83c240 837 int ret;
a4c653df 838 struct strbuf err = STRBUF_INIT;
3631bf77 839
abd0cd3a 840 ret = safe_create_reflog(refname, 1, &err);
1a83c240 841 if (ret) {
a4c653df
DT
842 fprintf(stderr, _("Can not do reflog for '%s': %s\n"),
843 opts->new_orphan_branch, err.buf);
844 strbuf_release(&err);
341fb286 845 free(refname);
3631bf77
EM
846 return;
847 }
abd0cd3a 848 strbuf_release(&err);
3631bf77 849 }
341fb286 850 free(refname);
3631bf77
EM
851 }
852 else
4edce172
NTND
853 create_branch(the_repository,
854 opts->new_branch, new_branch_info->name,
02ac9837 855 opts->new_branch_force ? 1 : 0,
39bd6f72 856 opts->new_branch_force ? 1 : 0,
e2bbd0cc 857 opts->new_branch_log,
f9a482e6 858 opts->quiet,
39bd6f72 859 opts->track);
c8a3ea1f
BW
860 new_branch_info->name = opts->new_branch;
861 setup_branch_path(new_branch_info);
782c2d65
DB
862 }
863
c8a3ea1f
BW
864 old_desc = old_branch_info->name;
865 if (!old_desc && old_branch_info->commit)
866 old_desc = oid_to_hex(&old_branch_info->commit->object.oid);
3bed291a
RR
867
868 reflog_msg = getenv("GIT_REFLOG_ACTION");
869 if (!reflog_msg)
870 strbuf_addf(&msg, "checkout: moving from %s to %s",
c8a3ea1f 871 old_desc ? old_desc : "(invalid)", new_branch_info->name);
3bed291a
RR
872 else
873 strbuf_insert(&msg, 0, reflog_msg, strlen(reflog_msg));
782c2d65 874
c8a3ea1f 875 if (!strcmp(new_branch_info->name, "HEAD") && !new_branch_info->path && !opts->force_detach) {
f8bd36a4 876 /* Nothing to do. */
c8a3ea1f
BW
877 } else if (opts->force_detach || !new_branch_info->path) { /* No longer on any branch. */
878 update_ref(msg.buf, "HEAD", &new_branch_info->commit->object.oid, NULL,
91774afc 879 REF_NO_DEREF, UPDATE_REFS_DIE_ON_ERR);
f8bd36a4 880 if (!opts->quiet) {
c8a3ea1f 881 if (old_branch_info->path &&
779b88a9 882 advice_detached_head && !opts->force_detach)
c8a3ea1f
BW
883 detach_advice(new_branch_info->name);
884 describe_detached_head(_("HEAD is now at"), new_branch_info->commit);
f8bd36a4 885 }
c8a3ea1f
BW
886 } else if (new_branch_info->path) { /* Switch branches. */
887 if (create_symref("HEAD", new_branch_info->path, msg.buf) < 0)
4636f651 888 die(_("unable to update HEAD"));
782c2d65 889 if (!opts->quiet) {
c8a3ea1f 890 if (old_branch_info->path && !strcmp(new_branch_info->path, old_branch_info->path)) {
39bd6f72
JN
891 if (opts->new_branch_force)
892 fprintf(stderr, _("Reset branch '%s'\n"),
c8a3ea1f 893 new_branch_info->name);
39bd6f72
JN
894 else
895 fprintf(stderr, _("Already on '%s'\n"),
c8a3ea1f 896 new_branch_info->name);
08eaa4be
ÆAB
897 } else if (opts->new_branch) {
898 if (opts->branch_exists)
c8a3ea1f 899 fprintf(stderr, _("Switched to and reset branch '%s'\n"), new_branch_info->name);
08eaa4be 900 else
c8a3ea1f 901 fprintf(stderr, _("Switched to a new branch '%s'\n"), new_branch_info->name);
08eaa4be 902 } else {
e8a8a4d7 903 fprintf(stderr, _("Switched to branch '%s'\n"),
c8a3ea1f 904 new_branch_info->name);
08eaa4be 905 }
782c2d65 906 }
c8a3ea1f
BW
907 if (old_branch_info->path && old_branch_info->name) {
908 if (!ref_exists(old_branch_info->path) && reflog_exists(old_branch_info->path))
909 delete_reflog(old_branch_info->path);
3631bf77 910 }
782c2d65 911 }
f4a4b9ac 912 remove_branch_state(the_repository, !opts->quiet);
782c2d65 913 strbuf_release(&msg);
32669671 914 if (!opts->quiet &&
c8a3ea1f
BW
915 (new_branch_info->path || (!opts->force_detach && !strcmp(new_branch_info->name, "HEAD"))))
916 report_tracking(new_branch_info);
782c2d65
DB
917}
918
468224e5 919static int add_pending_uninteresting_ref(const char *refname,
fcb615f5 920 const struct object_id *oid,
468224e5 921 int flags, void *cb_data)
8e2dc6ac 922{
a58a1b01 923 add_pending_oid(cb_data, refname, oid, UNINTERESTING);
5c08dc48
JK
924 return 0;
925}
8e2dc6ac
JH
926
927static void describe_one_orphan(struct strbuf *sb, struct commit *commit)
928{
0be240cc 929 strbuf_addstr(sb, " ");
30e677e0 930 strbuf_add_unique_abbrev(sb, &commit->object.oid, DEFAULT_ABBREV);
0be240cc 931 strbuf_addch(sb, ' ');
3c621839
JK
932 if (!parse_commit(commit))
933 pp_commit_easy(CMIT_FMT_ONELINE, commit, sb);
8e2dc6ac
JH
934 strbuf_addch(sb, '\n');
935}
936
937#define ORPHAN_CUTOFF 4
938static void suggest_reattach(struct commit *commit, struct rev_info *revs)
939{
940 struct commit *c, *last = NULL;
941 struct strbuf sb = STRBUF_INIT;
942 int lost = 0;
943 while ((c = get_revision(revs)) != NULL) {
944 if (lost < ORPHAN_CUTOFF)
945 describe_one_orphan(&sb, c);
946 last = c;
947 lost++;
948 }
949 if (ORPHAN_CUTOFF < lost) {
950 int more = lost - ORPHAN_CUTOFF;
951 if (more == 1)
952 describe_one_orphan(&sb, last);
953 else
f06f08b7 954 strbuf_addf(&sb, _(" ... and %d more.\n"), more);
8e2dc6ac
JH
955 }
956
957 fprintf(stderr,
f06f08b7
ÆAB
958 Q_(
959 /* The singular version */
960 "Warning: you are leaving %d commit behind, "
961 "not connected to\n"
962 "any of your branches:\n\n"
0faf2474 963 "%s\n",
f06f08b7
ÆAB
964 /* The plural version */
965 "Warning: you are leaving %d commits behind, "
8e2dc6ac
JH
966 "not connected to\n"
967 "any of your branches:\n\n"
f807b3dc 968 "%s\n",
f06f08b7
ÆAB
969 /* Give ngettext() the count */
970 lost),
971 lost,
f807b3dc 972 sb.buf);
8e2dc6ac 973 strbuf_release(&sb);
f807b3dc
JH
974
975 if (advice_detached_head)
976 fprintf(stderr,
fc792ca8
TS
977 Q_(
978 /* The singular version */
979 "If you want to keep it by creating a new branch, "
980 "this may be a good time\nto do so with:\n\n"
981 " git branch <new-branch-name> %s\n\n",
982 /* The plural version */
f807b3dc
JH
983 "If you want to keep them by creating a new branch, "
984 "this may be a good time\nto do so with:\n\n"
fc792ca8
TS
985 " git branch <new-branch-name> %s\n\n",
986 /* Give ngettext() the count */
987 lost),
aab9583f 988 find_unique_abbrev(&commit->object.oid, DEFAULT_ABBREV));
8e2dc6ac
JH
989}
990
991/*
992 * We are about to leave commit that was at the tip of a detached
993 * HEAD. If it is not reachable from any ref, this is the last chance
994 * for the user to do so without resorting to reflog.
995 */
c8a3ea1f 996static void orphaned_commit_warning(struct commit *old_commit, struct commit *new_commit)
8e2dc6ac 997{
8e2dc6ac 998 struct rev_info revs;
c8a3ea1f 999 struct object *object = &old_commit->object;
8e2dc6ac 1000
2abf3503 1001 repo_init_revisions(the_repository, &revs, NULL);
468224e5
RS
1002 setup_revisions(0, NULL, &revs, NULL);
1003
1004 object->flags &= ~UNINTERESTING;
f2fd0760 1005 add_pending_object(&revs, object, oid_to_hex(&object->oid));
468224e5 1006
fcb615f5 1007 for_each_ref(add_pending_uninteresting_ref, &revs);
c8a3ea1f 1008 add_pending_oid(&revs, "HEAD", &new_commit->object.oid, UNINTERESTING);
468224e5 1009
8e2dc6ac 1010 if (prepare_revision_walk(&revs))
6c80cd29 1011 die(_("internal error in revision walk"));
c8a3ea1f
BW
1012 if (!(old_commit->object.flags & UNINTERESTING))
1013 suggest_reattach(old_commit, &revs);
8e2dc6ac 1014 else
c8a3ea1f 1015 describe_detached_head(_("Previous HEAD position was"), old_commit);
5c08dc48 1016
b2ccdf7f 1017 /* Clean up objects used, as they will be reused. */
a9a03fa0 1018 clear_commit_marks_all(ALL_REV_FLAGS);
8e2dc6ac
JH
1019}
1020
e51e3057 1021static int switch_branches(const struct checkout_opts *opts,
c8a3ea1f 1022 struct branch_info *new_branch_info)
782c2d65
DB
1023{
1024 int ret = 0;
c8a3ea1f 1025 struct branch_info old_branch_info;
96ec7b1e 1026 void *path_to_free;
60af7691 1027 struct object_id rev;
a2b4994c 1028 int flag, writeout_error = 0;
e27dd8ae
JH
1029
1030 trace2_cmd_mode("branch");
1031
c8a3ea1f
BW
1032 memset(&old_branch_info, 0, sizeof(old_branch_info));
1033 old_branch_info.path = path_to_free = resolve_refdup("HEAD", 0, &rev, &flag);
1034 if (old_branch_info.path)
21e1ee8f 1035 old_branch_info.commit = lookup_commit_reference_gently(the_repository, &rev, 1);
96ec7b1e 1036 if (!(flag & REF_ISSYMREF))
c8a3ea1f 1037 old_branch_info.path = NULL;
782c2d65 1038
c8a3ea1f
BW
1039 if (old_branch_info.path)
1040 skip_prefix(old_branch_info.path, "refs/heads/", &old_branch_info.name);
782c2d65 1041
c8a3ea1f
BW
1042 if (!new_branch_info->name) {
1043 new_branch_info->name = "HEAD";
1044 new_branch_info->commit = old_branch_info.commit;
1045 if (!new_branch_info->commit)
e8a8a4d7 1046 die(_("You are on a branch yet to be born"));
c8a3ea1f 1047 parse_commit_or_die(new_branch_info->commit);
782c2d65
DB
1048 }
1049
fa655d84
BP
1050 /* optimize the "checkout -b <new_branch> path */
1051 if (skip_merge_working_tree(opts, &old_branch_info, new_branch_info)) {
1052 if (!checkout_optimize_new_branch && !opts->quiet) {
1053 if (read_cache_preload(NULL) < 0)
1054 return error(_("index file corrupt"));
1055 show_local_changes(&new_branch_info->commit->object, &opts->diff_options);
1056 }
1057 } else {
1058 ret = merge_working_tree(opts, &old_branch_info, new_branch_info, &writeout_error);
1059 if (ret) {
1060 free(path_to_free);
1061 return ret;
1062 }
96ec7b1e 1063 }
782c2d65 1064
c8a3ea1f
BW
1065 if (!opts->quiet && !old_branch_info.path && old_branch_info.commit && new_branch_info->commit != old_branch_info.commit)
1066 orphaned_commit_warning(old_branch_info.commit, new_branch_info->commit);
77ebd56d 1067
c8a3ea1f 1068 update_refs_for_switch(opts, &old_branch_info, new_branch_info);
782c2d65 1069
c8a3ea1f 1070 ret = post_checkout_hook(old_branch_info.commit, new_branch_info->commit, 1);
96ec7b1e 1071 free(path_to_free);
a2b4994c 1072 return ret || writeout_error;
782c2d65
DB
1073}
1074
0cf8581e
JH
1075static int git_checkout_config(const char *var, const char *value, void *cb)
1076{
fa655d84
BP
1077 if (!strcmp(var, "checkout.optimizenewbranch")) {
1078 checkout_optimize_new_branch = git_config_bool(var, value);
1079 return 0;
1080 }
1081
175f6e59
JS
1082 if (!strcmp(var, "diff.ignoresubmodules")) {
1083 struct checkout_opts *opts = cb;
1084 handle_ignore_submodules_arg(&opts->diff_options, value);
1085 return 0;
1086 }
23b4c7bc 1087
59556548 1088 if (starts_with(var, "submodule."))
7463e2ec 1089 return git_default_submodule_config(var, value, NULL);
23b4c7bc 1090
175f6e59 1091 return git_xmerge_config(var, value, NULL);
0cf8581e
JH
1092}
1093
7ab4ad00
NTND
1094static void setup_new_branch_info_and_source_tree(
1095 struct branch_info *new_branch_info,
1096 struct checkout_opts *opts,
1097 struct object_id *rev,
1098 const char *arg)
1099{
1100 struct tree **source_tree = &opts->source_tree;
1101 struct object_id branch_rev;
1102
1103 new_branch_info->name = arg;
1104 setup_branch_path(new_branch_info);
1105
1106 if (!check_refname_format(new_branch_info->path, 0) &&
1107 !read_ref(new_branch_info->path, &branch_rev))
1108 oidcpy(rev, &branch_rev);
1109 else
1110 new_branch_info->path = NULL; /* not an existing branch */
1111
1112 new_branch_info->commit = lookup_commit_reference_gently(the_repository, rev, 1);
1113 if (!new_branch_info->commit) {
1114 /* not a commit */
1115 *source_tree = parse_tree_indirect(rev);
1116 } else {
1117 parse_commit_or_die(new_branch_info->commit);
1118 *source_tree = get_commit_tree(new_branch_info->commit);
1119 }
1120}
1121
09ebad6f
JN
1122static int parse_branchname_arg(int argc, const char **argv,
1123 int dwim_new_local_branch_ok,
c8a3ea1f 1124 struct branch_info *new_branch_info,
10f102be 1125 struct checkout_opts *opts,
3c87aa94
ÆAB
1126 struct object_id *rev,
1127 int *dwim_remotes_matched)
09ebad6f 1128{
10f102be 1129 const char **new_branch = &opts->new_branch;
09ebad6f 1130 int argcount = 0;
09ebad6f 1131 const char *arg;
bca39695
MM
1132 int dash_dash_pos;
1133 int has_dash_dash = 0;
1134 int i;
09ebad6f
JN
1135
1136 /*
1137 * case 1: git checkout <ref> -- [<paths>]
1138 *
1139 * <ref> must be a valid tree, everything after the '--' must be
1140 * a path.
1141 *
1142 * case 2: git checkout -- [<paths>]
1143 *
1144 * everything after the '--' must be paths.
1145 *
a047fafc 1146 * case 3: git checkout <something> [--]
09ebad6f 1147 *
a047fafc
MM
1148 * (a) If <something> is a commit, that is to
1149 * switch to the branch or detach HEAD at it. As a special case,
1150 * if <something> is A...B (missing A or B means HEAD but you can
1151 * omit at most one side), and if there is a unique merge base
1152 * between A and B, A...B names that merge base.
09ebad6f 1153 *
a047fafc 1154 * (b) If <something> is _not_ a commit, either "--" is present
01689909 1155 * or <something> is not a path, no -t or -b was given, and
a047fafc 1156 * and there is a tracking branch whose name is <something>
8d7b558b
ÆAB
1157 * in one and only one remote (or if the branch exists on the
1158 * remote named in checkout.defaultRemote), then this is a
1159 * short-hand to fork local <something> from that
1160 * remote-tracking branch.
09ebad6f 1161 *
a047fafc
MM
1162 * (c) Otherwise, if "--" is present, treat it like case (1).
1163 *
1164 * (d) Otherwise :
1165 * - if it's a reference, treat it like case (1)
1166 * - else if it's a path, treat it like case (2)
1167 * - else: fail.
1168 *
1169 * case 4: git checkout <something> <paths>
1170 *
1171 * The first argument must not be ambiguous.
09ebad6f
JN
1172 * - If it's *only* a reference, treat it like case (1).
1173 * - If it's only a path, treat it like case (2).
1174 * - else: fail.
1175 *
1176 */
1177 if (!argc)
1178 return 0;
1179
5c06e269
NTND
1180 if (!opts->accept_pathspec) {
1181 if (argc > 1)
1182 die(_("only one reference expected"));
1183 has_dash_dash = 1; /* helps disambiguate */
1184 }
1185
09ebad6f 1186 arg = argv[0];
bca39695
MM
1187 dash_dash_pos = -1;
1188 for (i = 0; i < argc; i++) {
5c06e269 1189 if (opts->accept_pathspec && !strcmp(argv[i], "--")) {
bca39695
MM
1190 dash_dash_pos = i;
1191 break;
1192 }
1193 }
1194 if (dash_dash_pos == 0)
1195 return 1; /* case (2) */
1196 else if (dash_dash_pos == 1)
1197 has_dash_dash = 1; /* case (3) or (1) */
1198 else if (dash_dash_pos >= 2)
1199 die(_("only one reference expected, %d given."), dash_dash_pos);
0f086e6d 1200 opts->count_checkout_paths = !opts->quiet && !has_dash_dash;
09ebad6f
JN
1201
1202 if (!strcmp(arg, "-"))
1203 arg = "@{-1}";
1204
151b2911 1205 if (get_oid_mb(arg, rev)) {
a047fafc
MM
1206 /*
1207 * Either case (3) or (4), with <something> not being
1208 * a commit, or an attempt to use case (1) with an
1209 * invalid ref.
1210 *
1211 * It's likely an error, but we need to find out if
1212 * we should auto-create the branch, case (3).(b).
1213 */
1214 int recover_with_dwim = dwim_new_local_branch_ok;
1215
be4908f1
NTND
1216 int could_be_checkout_paths = !has_dash_dash &&
1217 check_filename(opts->prefix, arg);
1218
1219 if (!has_dash_dash && !no_wildcard(arg))
a047fafc 1220 recover_with_dwim = 0;
be4908f1 1221
a047fafc 1222 /*
5c06e269
NTND
1223 * Accept "git checkout foo", "git checkout foo --"
1224 * and "git switch foo" as candidates for dwim.
a047fafc
MM
1225 */
1226 if (!(argc == 1 && !has_dash_dash) &&
5c06e269
NTND
1227 !(argc == 2 && has_dash_dash) &&
1228 opts->accept_pathspec)
a047fafc
MM
1229 recover_with_dwim = 0;
1230
1231 if (recover_with_dwim) {
3c87aa94
ÆAB
1232 const char *remote = unique_tracking_name(arg, rev,
1233 dwim_remotes_matched);
a047fafc 1234 if (remote) {
be4908f1
NTND
1235 if (could_be_checkout_paths)
1236 die(_("'%s' could be both a local file and a tracking branch.\n"
1237 "Please use -- (and optionally --no-guess) to disambiguate"),
1238 arg);
a047fafc
MM
1239 *new_branch = arg;
1240 arg = remote;
1241 /* DWIMmed to create local branch, case (3).(b) */
1242 } else {
1243 recover_with_dwim = 0;
1244 }
1245 }
1246
1247 if (!recover_with_dwim) {
1248 if (has_dash_dash)
1249 die(_("invalid reference: %s"), arg);
09ebad6f
JN
1250 return argcount;
1251 }
1252 }
1253
1254 /* we can't end up being in (2) anymore, eat the argument */
1255 argcount++;
1256 argv++;
1257 argc--;
1258
7ab4ad00 1259 setup_new_branch_info_and_source_tree(new_branch_info, opts, rev, arg);
09ebad6f 1260
7ab4ad00 1261 if (!opts->source_tree) /* case (1): want a tree */
6c80cd29 1262 die(_("reference is not a tree: %s"), arg);
7ab4ad00 1263
7f82b24e 1264 if (!has_dash_dash) { /* case (3).(d) -> (1) */
09ebad6f
JN
1265 /*
1266 * Do not complain the most common case
1267 * git checkout branch
1268 * even if there happen to be a file called 'branch';
1269 * it would be extremely annoying.
1270 */
1271 if (argc)
b829b943 1272 verify_non_filename(opts->prefix, arg);
5c06e269 1273 } else if (opts->accept_pathspec) {
09ebad6f
JN
1274 argcount++;
1275 argv++;
1276 argc--;
1277 }
1278
1279 return argcount;
1280}
1281
a2b4994c 1282static int switch_unborn_to_new_branch(const struct checkout_opts *opts)
abe19980
JH
1283{
1284 int status;
1285 struct strbuf branch_ref = STRBUF_INIT;
1286
e27dd8ae
JH
1287 trace2_cmd_mode("unborn");
1288
8ced1aa0
CW
1289 if (!opts->new_branch)
1290 die(_("You are on a branch yet to be born"));
abe19980
JH
1291 strbuf_addf(&branch_ref, "refs/heads/%s", opts->new_branch);
1292 status = create_symref("HEAD", branch_ref.buf, "checkout -b");
1293 strbuf_release(&branch_ref);
afa8c07a
JK
1294 if (!opts->quiet)
1295 fprintf(stderr, _("Switched to a new branch '%s'\n"),
1296 opts->new_branch);
abe19980
JH
1297 return status;
1298}
1299
b6312c27 1300static int checkout_branch(struct checkout_opts *opts,
c8a3ea1f 1301 struct branch_info *new_branch_info)
b6312c27 1302{
817b345a 1303 if (opts->pathspec.nr)
b6312c27
NTND
1304 die(_("paths cannot be used with switching branches"));
1305
1306 if (opts->patch_mode)
1307 die(_("'%s' cannot be used with switching branches"),
1308 "--patch");
1309
091e04bc
TG
1310 if (!opts->overlay_mode)
1311 die(_("'%s' cannot be used with switching branches"),
1312 "--no-overlay");
1313
b6312c27
NTND
1314 if (opts->writeout_stage)
1315 die(_("'%s' cannot be used with switching branches"),
1316 "--ours/--theirs");
1317
1318 if (opts->force && opts->merge)
1319 die(_("'%s' cannot be used with '%s'"), "-f", "-m");
1320
3ec37ad1
NTND
1321 if (opts->discard_changes && opts->merge)
1322 die(_("'%s' cannot be used with '%s'"), "--discard-changes", "--merge");
1323
b6312c27
NTND
1324 if (opts->force_detach && opts->new_branch)
1325 die(_("'%s' cannot be used with '%s'"),
1326 "--detach", "-b/-B/--orphan");
1327
1328 if (opts->new_orphan_branch) {
1329 if (opts->track != BRANCH_TRACK_UNSPECIFIED)
1330 die(_("'%s' cannot be used with '%s'"), "--orphan", "-t");
1331 } else if (opts->force_detach) {
1332 if (opts->track != BRANCH_TRACK_UNSPECIFIED)
1333 die(_("'%s' cannot be used with '%s'"), "--detach", "-t");
1334 } else if (opts->track == BRANCH_TRACK_UNSPECIFIED)
1335 opts->track = git_branch_track;
1336
c8a3ea1f 1337 if (new_branch_info->name && !new_branch_info->commit)
b6312c27 1338 die(_("Cannot switch branch to a non-commit '%s'"),
c8a3ea1f 1339 new_branch_info->name);
b6312c27 1340
c8a3ea1f 1341 if (new_branch_info->path && !opts->force_detach && !opts->new_branch &&
c265c533 1342 !opts->ignore_other_worktrees) {
e1c1ab9d 1343 int flag;
efbd4fdf 1344 char *head_ref = resolve_refdup("HEAD", 0, NULL, &flag);
e1c1ab9d 1345 if (head_ref &&
c8a3ea1f
BW
1346 (!(flag & REF_ISSYMREF) || strcmp(head_ref, new_branch_info->path)))
1347 die_if_checked_out(new_branch_info->path, 1);
e1c1ab9d
NTND
1348 free(head_ref);
1349 }
1350
c8a3ea1f 1351 if (!new_branch_info->commit && opts->new_branch) {
60af7691 1352 struct object_id rev;
b6312c27
NTND
1353 int flag;
1354
34c290a6 1355 if (!read_ref_full("HEAD", 0, &rev, &flag) &&
60af7691 1356 (flag & REF_ISSYMREF) && is_null_oid(&rev))
b6312c27
NTND
1357 return switch_unborn_to_new_branch(opts);
1358 }
c8a3ea1f 1359 return switch_branches(opts, new_branch_info);
b6312c27
NTND
1360}
1361
20871822
NTND
1362static struct option *add_common_options(struct checkout_opts *opts,
1363 struct option *prevopts)
782c2d65 1364{
782c2d65 1365 struct option options[] = {
b3edccb9 1366 OPT__QUIET(&opts->quiet, N_("suppress progress reporting")),
20871822
NTND
1367 { OPTION_CALLBACK, 0, "recurse-submodules", NULL,
1368 "checkout", "control recursive updating of submodules",
1369 PARSE_OPT_OPTARG, option_parse_recurse_submodules_worktree_updater },
1370 OPT_BOOL(0, "progress", &opts->show_progress, N_("force progress reporting")),
1371 OPT__FORCE(&opts->force, N_("force checkout (throw away local modifications)"),
1372 PARSE_OPT_NOCOMPLETE),
1373 OPT_BOOL('m', "merge", &opts->merge, N_("perform a 3-way merge with the new branch")),
1374 OPT_STRING(0, "conflict", &opts->conflict_style, N_("style"),
1375 N_("conflict style (merge or diff3)")),
1376 OPT_END()
1377 };
1378 struct option *newopts = parse_options_concat(prevopts, options);
1379 free(prevopts);
1380 return newopts;
1381}
1382
b7b5fce2
NTND
1383static struct option *add_common_switch_branch_options(
1384 struct checkout_opts *opts, struct option *prevopts)
20871822
NTND
1385{
1386 struct option options[] = {
b3edccb9
NTND
1387 OPT_BOOL(0, "detach", &opts->force_detach, N_("detach HEAD at named commit")),
1388 OPT_SET_INT('t', "track", &opts->track, N_("set upstream info for new branch"),
9ed36cfa 1389 BRANCH_TRACK_EXPLICIT),
b3edccb9 1390 OPT_STRING(0, "orphan", &opts->new_orphan_branch, N_("new-branch"), N_("new unparented branch")),
20871822
NTND
1391 OPT_BOOL_F(0, "overwrite-ignore", &opts->overwrite_ignore,
1392 N_("update ignored files (default)"),
1393 PARSE_OPT_NOCOMPLETE),
1394 OPT_BOOL(0, "no-guess", &opts->no_dwim_new_local_branch,
1395 N_("second guess 'git checkout <no-such-branch>'")),
1396 OPT_BOOL(0, "ignore-other-worktrees", &opts->ignore_other_worktrees,
1397 N_("do not check if another worktree is holding the given ref")),
1398 OPT_END()
1399 };
1400 struct option *newopts = parse_options_concat(prevopts, options);
1401 free(prevopts);
1402 return newopts;
1403}
1404
1405static struct option *add_checkout_path_options(struct checkout_opts *opts,
1406 struct option *prevopts)
1407{
1408 struct option options[] = {
b3edccb9 1409 OPT_SET_INT_F('2', "ours", &opts->writeout_stage,
3fe735e7
NTND
1410 N_("checkout our version for unmerged files"),
1411 2, PARSE_OPT_NONEG),
b3edccb9 1412 OPT_SET_INT_F('3', "theirs", &opts->writeout_stage,
3fe735e7
NTND
1413 N_("checkout their version for unmerged files"),
1414 3, PARSE_OPT_NONEG),
b3edccb9
NTND
1415 OPT_BOOL('p', "patch", &opts->patch_mode, N_("select hunks interactively")),
1416 OPT_BOOL(0, "ignore-skip-worktree-bits", &opts->ignore_skipworktree,
08d595dc 1417 N_("do not limit pathspecs to sparse entries only")),
b3edccb9 1418 OPT_BOOL(0, "overlay", &opts->overlay_mode, N_("use overlay mode (default)")),
20871822 1419 OPT_END()
782c2d65 1420 };
20871822
NTND
1421 struct option *newopts = parse_options_concat(prevopts, options);
1422 free(prevopts);
1423 return newopts;
1424}
1425
d787d311
NTND
1426static int checkout_main(int argc, const char **argv, const char *prefix,
1427 struct checkout_opts *opts, struct option *options,
1428 const char * const usagestr[])
20871822 1429{
20871822
NTND
1430 struct branch_info new_branch_info;
1431 int dwim_remotes_matched = 0;
1432 int dwim_new_local_branch;
782c2d65 1433
c8a3ea1f 1434 memset(&new_branch_info, 0, sizeof(new_branch_info));
b3edccb9
NTND
1435 opts->overwrite_ignore = 1;
1436 opts->prefix = prefix;
1437 opts->show_progress = -1;
1438 opts->overlay_mode = -1;
782c2d65 1439
b3edccb9 1440 git_config(git_checkout_config, opts);
782c2d65 1441
b3edccb9 1442 opts->track = BRANCH_TRACK_UNSPECIFIED;
782c2d65 1443
d787d311 1444 argc = parse_options(argc, argv, prefix, options, usagestr,
f5242ebf 1445 PARSE_OPT_KEEP_DASHDASH);
859fdaba 1446
55cf704a 1447 dwim_new_local_branch = !opts->no_dwim_new_local_branch;
b3edccb9
NTND
1448 if (opts->show_progress < 0) {
1449 if (opts->quiet)
1450 opts->show_progress = 0;
870ebdb9 1451 else
b3edccb9 1452 opts->show_progress = isatty(2);
870ebdb9
ECA
1453 }
1454
55cf704a 1455 if (opts->conflict_style) {
b3edccb9 1456 opts->merge = 1; /* implied */
55cf704a 1457 git_xmerge_config("merge.conflictstyle", opts->conflict_style, NULL);
b6312c27 1458 }
3ec37ad1
NTND
1459 if (opts->force)
1460 opts->discard_changes = 1;
02ac9837 1461
b3edccb9 1462 if ((!!opts->new_branch + !!opts->new_branch_force + !!opts->new_orphan_branch) > 1)
b6312c27 1463 die(_("-b, -B and --orphan are mutually exclusive"));
02ac9837 1464
b3edccb9 1465 if (opts->overlay_mode == 1 && opts->patch_mode)
091e04bc
TG
1466 die(_("-p and --overlay are mutually exclusive"));
1467
b6312c27
NTND
1468 /*
1469 * From here on, new_branch will contain the branch to be checked out,
1470 * and new_branch_force and new_orphan_branch will tell us which one of
1471 * -b/-B/--orphan is being used.
1472 */
b3edccb9
NTND
1473 if (opts->new_branch_force)
1474 opts->new_branch = opts->new_branch_force;
02ac9837 1475
b3edccb9
NTND
1476 if (opts->new_orphan_branch)
1477 opts->new_branch = opts->new_orphan_branch;
32669671 1478
b6312c27 1479 /* --track without -b/-B/--orphan should DWIM */
b3edccb9 1480 if (opts->track != BRANCH_TRACK_UNSPECIFIED && !opts->new_branch) {
9188ed89
AR
1481 const char *argv0 = argv[0];
1482 if (!argc || !strcmp(argv0, "--"))
1a07e59c 1483 die(_("--track needs a branch name"));
e3f1da98
RS
1484 skip_prefix(argv0, "refs/", &argv0);
1485 skip_prefix(argv0, "remotes/", &argv0);
9188ed89
AR
1486 argv0 = strchr(argv0, '/');
1487 if (!argv0 || !argv0[1])
1a07e59c 1488 die(_("missing branch name; try -b"));
b3edccb9 1489 opts->new_branch = argv0 + 1;
bb0ceb62
JS
1490 }
1491
859fdaba 1492 /*
09ebad6f
JN
1493 * Extract branch name from command line arguments, so
1494 * all that is left is pathspecs.
859fdaba 1495 *
09ebad6f 1496 * Handle
70c9ac2f 1497 *
09ebad6f
JN
1498 * 1) git checkout <tree> -- [<paths>]
1499 * 2) git checkout -- [<paths>]
1500 * 3) git checkout <something> [<paths>]
859fdaba 1501 *
09ebad6f
JN
1502 * including "last branch" syntax and DWIM-ery for names of
1503 * remote branches, erroring out for invalid or ambiguous cases.
859fdaba 1504 */
782c2d65 1505 if (argc) {
60af7691 1506 struct object_id rev;
09ebad6f 1507 int dwim_ok =
b3edccb9 1508 !opts->patch_mode &&
09ebad6f 1509 dwim_new_local_branch &&
b3edccb9
NTND
1510 opts->track == BRANCH_TRACK_UNSPECIFIED &&
1511 !opts->new_branch;
f8bd36a4 1512 int n = parse_branchname_arg(argc, argv, dwim_ok,
b3edccb9 1513 &new_branch_info, opts, &rev,
3c87aa94 1514 &dwim_remotes_matched);
09ebad6f
JN
1515 argv += n;
1516 argc -= n;
782c2d65
DB
1517 }
1518
782c2d65 1519 if (argc) {
b3edccb9
NTND
1520 parse_pathspec(&opts->pathspec, 0,
1521 opts->patch_mode ? PATHSPEC_PREFIX_ORIGIN : 0,
480ca644 1522 prefix, argv);
301e42ed 1523
b3edccb9 1524 if (!opts->pathspec.nr)
e8a8a4d7 1525 die(_("invalid path specification"));
301e42ed 1526
b6312c27
NTND
1527 /*
1528 * Try to give more helpful suggestion.
1529 * new_branch && argc > 1 will be caught later.
1530 */
b3edccb9 1531 if (opts->new_branch && argc == 1)
6c486862 1532 die(_("'%s' is not a commit and a branch '%s' cannot be created from it"),
b3edccb9 1533 argv[0], opts->new_branch);
782c2d65 1534
b3edccb9 1535 if (opts->force_detach)
b6312c27
NTND
1536 die(_("git checkout: --detach does not take a path argument '%s'"),
1537 argv[0]);
32669671 1538
b3edccb9 1539 if (1 < !!opts->writeout_stage + !!opts->force + !!opts->merge)
b6312c27
NTND
1540 die(_("git checkout: --ours/--theirs, --force and --merge are incompatible when\n"
1541 "checking out of the index."));
782c2d65
DB
1542 }
1543
b3edccb9 1544 if (opts->new_branch) {
f285a2d7 1545 struct strbuf buf = STRBUF_INIT;
55c4a673 1546
b3edccb9
NTND
1547 if (opts->new_branch_force)
1548 opts->branch_exists = validate_branchname(opts->new_branch, &buf);
bc1c9c0e 1549 else
b3edccb9
NTND
1550 opts->branch_exists =
1551 validate_new_branchname(opts->new_branch, &buf, 0);
352eadc4
DB
1552 strbuf_release(&buf);
1553 }
1554
886e1084 1555 UNLEAK(opts);
b3edccb9
NTND
1556 if (opts->patch_mode || opts->pathspec.nr) {
1557 int ret = checkout_paths(opts, new_branch_info.name);
ad8d5104
ÆAB
1558 if (ret && dwim_remotes_matched > 1 &&
1559 advice_checkout_ambiguous_remote_branch_name)
1560 advise(_("'%s' matched more than one remote tracking branch.\n"
1561 "We found %d remotes with a reference that matched. So we fell back\n"
1562 "on trying to resolve the argument as a path, but failed there too!\n"
1563 "\n"
1564 "If you meant to check out a remote tracking branch on, e.g. 'origin',\n"
1565 "you can do so by fully qualifying the name with the --track option:\n"
1566 "\n"
8d7b558b
ÆAB
1567 " git checkout --track origin/<name>\n"
1568 "\n"
1569 "If you'd like to always have checkouts of an ambiguous <name> prefer\n"
1570 "one remote, e.g. the 'origin' remote, consider setting\n"
1571 "checkout.defaultRemote=origin in your config."),
ad8d5104
ÆAB
1572 argv[0],
1573 dwim_remotes_matched);
1c550553
ÆAB
1574 return ret;
1575 } else {
b3edccb9 1576 return checkout_branch(opts, &new_branch_info);
1c550553 1577 }
782c2d65 1578}
d787d311
NTND
1579
1580int cmd_checkout(int argc, const char **argv, const char *prefix)
1581{
1582 struct checkout_opts opts;
b7b5fce2
NTND
1583 struct option *options;
1584 struct option checkout_options[] = {
1585 OPT_STRING('b', NULL, &opts.new_branch, N_("branch"),
1586 N_("create and checkout a new branch")),
1587 OPT_STRING('B', NULL, &opts.new_branch_force, N_("branch"),
1588 N_("create/reset and checkout a branch")),
492ededc 1589 OPT_BOOL('l', NULL, &opts.new_branch_log, N_("create reflog for new branch")),
b7b5fce2
NTND
1590 OPT_END()
1591 };
d787d311
NTND
1592 int ret;
1593
1594 memset(&opts, 0, sizeof(opts));
1595 opts.no_dwim_new_local_branch = 0;
5c06e269 1596 opts.accept_pathspec = 1;
d787d311 1597
b7b5fce2 1598 options = parse_options_dup(checkout_options);
d787d311 1599 options = add_common_options(&opts, options);
b7b5fce2 1600 options = add_common_switch_branch_options(&opts, options);
d787d311
NTND
1601 options = add_checkout_path_options(&opts, options);
1602
1603 ret = checkout_main(argc, argv, prefix, &opts,
1604 options, checkout_usage);
1605 FREE_AND_NULL(options);
1606 return ret;
1607}
1608
1609int cmd_switch(int argc, const char **argv, const char *prefix)
1610{
1611 struct checkout_opts opts;
1612 struct option *options = NULL;
b7b5fce2
NTND
1613 struct option switch_options[] = {
1614 OPT_STRING('c', "create", &opts.new_branch, N_("branch"),
1615 N_("create and switch to a new branch")),
1616 OPT_STRING('C', "force-create", &opts.new_branch_force, N_("branch"),
1617 N_("create/reset and switch to a branch")),
3ec37ad1
NTND
1618 OPT_BOOL(0, "discard-changes", &opts.discard_changes,
1619 N_("throw away local modifications")),
b7b5fce2
NTND
1620 OPT_END()
1621 };
d787d311
NTND
1622 int ret;
1623
1624 memset(&opts, 0, sizeof(opts));
1625 opts.no_dwim_new_local_branch = 0;
5c06e269 1626 opts.accept_pathspec = 0;
d787d311 1627
b7b5fce2 1628 options = parse_options_dup(switch_options);
d787d311 1629 options = add_common_options(&opts, options);
b7b5fce2 1630 options = add_common_switch_branch_options(&opts, options);
d787d311
NTND
1631
1632 ret = checkout_main(argc, argv, prefix, &opts,
1633 options, switch_branch_usage);
1634 FREE_AND_NULL(options);
1635 return ret;
1636}