checkout -m: do not try to fall back to --merge from an unborn branch
authorJunio C Hamano <gitster@pobox.com>
Thu, 7 Jan 2010 07:51:47 +0000 (23:51 -0800)
committerJunio C Hamano <gitster@pobox.com>
Thu, 7 Jan 2010 07:51:47 +0000 (23:51 -0800)
If switching from an unborn branch (= empty tree) to a valid commit failed
without -m, it would fail with -m option as well.

Signed-off-by: Junio C Hamano <gitster@pobox.com>
builtin-checkout.c

index c107fd6..b76cd22 100644 (file)
@@ -272,7 +272,7 @@ static int merge_working_tree(struct checkout_opts *opts,
                topts.initial_checkout = is_cache_unborn();
                topts.update = 1;
                topts.merge = 1;
-               topts.gently = opts->merge;
+               topts.gently = opts->merge && old->commit;
                topts.verbose_update = !opts->quiet;
                topts.fn = twoway_merge;
                topts.dir = xcalloc(1, sizeof(*topts.dir));
@@ -294,7 +294,13 @@ static int merge_working_tree(struct checkout_opts *opts,
                        struct tree *work;
                        if (!opts->merge)
                                return 1;
-                       parse_commit(old->commit);
+
+                       /*
+                        * Without old->commit, the below is the same as
+                        * the two-tree unpack we already tried and failed.
+                        */
+                       if (!old->commit)
+                               return 1;
 
                        /* Do more real merge */