summaryrefslogtreecommitdiff
path: root/builtin
diff options
context:
space:
mode:
authorJeff King <peff@peff.net>2011-03-20 05:09:18 -0400
committerJunio C Hamano <gitster@pobox.com>2011-03-20 13:32:45 -0700
commit5c08dc48a8cf987c3a14006b5a82651e9b3f5423 (patch)
treec4dd55a9349bbc2516a7cb3ae0bb4cfe7aee1a22 /builtin
parent493dd6ed5b46659d7e20aaef00f97e279ce1c4cb (diff)
downloadgit-5c08dc48a8cf987c3a14006b5a82651e9b3f5423.tar.gz
checkout: clear commit marks after detached-orphan check
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>
Diffstat (limited to 'builtin')
-rw-r--r--builtin/checkout.c13
1 files changed, 13 insertions, 0 deletions
diff --git a/builtin/checkout.c b/builtin/checkout.c
index 2bf02f2841..f88d2c84a5 100644
--- a/builtin/checkout.c
+++ b/builtin/checkout.c
@@ -603,6 +603,16 @@ static int add_one_ref_to_rev_list_arg(const char *refname,
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)
{
@@ -674,6 +684,9 @@ static void orphaned_commit_warning(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)