summary | shortlog | log | commit | commitdiff | tree
raw | patch | inline | side by side (parent: 493dd6e)
raw | patch | inline | side by side (parent: 493dd6e)
author | Jeff King <peff@peff.net> | |
Sun, 20 Mar 2011 09:09:18 +0000 (05:09 -0400) | ||
committer | Junio C Hamano <gitster@pobox.com> | |
Sun, 20 Mar 2011 20:32:45 +0000 (13:32 -0700) |
When leaving a detached HEAD, we do a revision walk to make
sure the commit we are leaving isn't being orphaned.
However, this leaves crufty marks in the commit objects
which can confuse later walkers, like the one in
stat_tracking_info.
Let's clean up after ourselves to prevent this conflict.
Signed-off-by: Jeff King <peff@peff.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
sure the commit we are leaving isn't being orphaned.
However, this leaves crufty marks in the commit objects
which can confuse later walkers, like the one in
stat_tracking_info.
Let's clean up after ourselves to prevent this conflict.
Signed-off-by: Jeff King <peff@peff.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
builtin/checkout.c | patch | blob | history | |
t/t2020-checkout-detach.sh | patch | blob | history |
diff --git a/builtin/checkout.c b/builtin/checkout.c
index 2bf02f2841a84a2a86de08e53328dbbb87ff3587..f88d2c84a56e757e08be13df645e285496c05cfd 100644 (file)
--- a/builtin/checkout.c
+++ b/builtin/checkout.c
return 0;
}
+static int clear_commit_marks_from_one_ref(const char *refname,
+ const unsigned char *sha1,
+ int flags,
+ void *cb_data)
+{
+ struct commit *commit = lookup_commit_reference_gently(sha1, 1);
+ if (commit)
+ clear_commit_marks(commit, -1);
+ return 0;
+}
static void describe_one_orphan(struct strbuf *sb, struct commit *commit)
{
suggest_reattach(commit, &revs);
else
describe_detached_head("Previous HEAD position was", commit);
+
+ clear_commit_marks(commit, -1);
+ for_each_ref(clear_commit_marks_from_one_ref, NULL);
}
static int switch_branches(struct checkout_opts *opts, struct branch_info *new)
index bfeb2a65129a7d573a311037c923ae92d6d97f22..569b27fe8d488833c3ec0d9952ae064764a0183f 100755 (executable)
check_no_orphan_warning stderr
'
+cat >expect <<'EOF'
+Your branch is behind 'master' by 1 commit, and can be fast-forwarded.
+EOF
+test_expect_success 'tracking count is accurate after orphan check' '
+ reset &&
+ git branch child master^ &&
+ git config branch.child.remote . &&
+ git config branch.child.merge refs/heads/master &&
+ git checkout child^ &&
+ git checkout child >stdout &&
+ test_cmp expect stdout
+'
+
test_done