All of lore.kernel.org
 help / color / mirror / Atom feed
From: Jeff King <peff@peff.net>
To: Piotr Krukowiecki <piotr.krukowiecki@gmail.com>
Cc: Git Mailing List <git@vger.kernel.org>
Subject: Re: [bug] git checkout lies about number of ahead commits when switching from detached HEAD
Date: Sat, 19 Mar 2011 18:47:26 -0400	[thread overview]
Message-ID: <20110319224726.GC7116@sigill.intra.peff.net> (raw)
In-Reply-To: <20110319222852.GB7116@sigill.intra.peff.net>

On Sat, Mar 19, 2011 at 06:28:52PM -0400, Jeff King wrote:

> On Sat, Mar 19, 2011 at 10:53:13PM +0100, Piotr Krukowiecki wrote:
> 
> > It says "by 0 commits" when going back from detached HEAD to
> > master branch:
> > 
> > 
> > $ git checkout HEAD^
> > 
> > $ git checkout master
> > Previous HEAD position was af4c62a... Merge branch 'maint'
> > Switched to branch 'master'
> > Your branch is ahead of 'origin/master' by 0 commits.
> >                                         ^^^^^^^^^^^^
> > 
> > $ git status
> > # On branch master
> > # Your branch is ahead of 'origin/master' by 1 commit.
> >                                           ^^^^^^^^^^^
> 
> Hmm. My guess is that the new "check for connectivity when leaving
> detached HEAD" test is polluting the commit flags for the ahead/behind
> test.
> 
> [bisect bisect bisect]
> 
> Yep, it bisects to 8e2dc6a (commit: give final warning when reattaching
> HEAD to leave commits behind, 2011-02-18). We probably need to clean the
> uninteresting flags between the two traversals.

This patch fixes it:

diff --git a/remote.c b/remote.c
index ca42a12..92b7428 100644
--- a/remote.c
+++ b/remote.c
@@ -1560,6 +1560,8 @@ int stat_tracking_info(struct branch *branch, int *num_ours, int *num_theirs)
 	strcpy(symmetric + 40, "...");
 	strcpy(symmetric + 43, sha1_to_hex(theirs->object.sha1));
 
+	clear_commit_marks(ours, -1);
+	clear_commit_marks(theirs, -1);
 	init_revisions(&revs, NULL);
 	setup_revisions(rev_argc, rev_argv, &revs, NULL);
 	prepare_revision_walk(&revs);

but I'm not quite sure if this is the right place. Is it the
responsibility of the checkout-orphan-warning code to clean up after
itself, or is it the responsibility of a revision walker to clean up
before itself?

In the former case, things can be a bit tricky because you have to
remember the tips you started from to call clear_commit_marks(), which
means saving away the revs.pending list after setup_revisions but before
prepare_revision_walk. It might be worth having an alternate
clear_commit_marks() that didn't actually walk the tree but just cleared
the marks from every commit we've loaded, giving other walkers a total
clean slate.

If the latter case (clean up beforehand), should prepare_revision_walk
actually be clearing any existing marks?

I think I favor the prepare_revision_walk approach; in most cases
cleaning up afterwards is just a waste (since there usually isn't a
second walk). But I don't know if there is code that actually depends on
the intermediate results of a previous walk.

-Peff

  reply	other threads:[~2011-03-19 22:47 UTC|newest]

Thread overview: 28+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2011-03-19 21:53 [bug] git checkout lies about number of ahead commits when switching from detached HEAD Piotr Krukowiecki
2011-03-19 22:28 ` Jeff King
2011-03-19 22:47   ` Jeff King [this message]
2011-03-20  0:35     ` Junio C Hamano
2011-03-20  9:01       ` Jeff King
2011-03-20  9:04         ` [PATCH 1/3] checkout: add basic tests for detached-orphan warning Jeff King
2011-03-20  9:09         ` [PATCH 2/3] checkout: clear commit marks after detached-orphan check Jeff King
2011-03-20 19:05           ` Junio C Hamano
2012-04-13 22:59           ` [PATCH] i18n: use test_i18ncmp in t2020 (checkout --detach) Jonathan Nieder
2012-04-13 23:25             ` [PATCH/RFC] checkout --detached test: write supporting files before start of tests Jonathan Nieder
2012-04-13 23:33               ` Jeff King
2012-04-13 23:49                 ` Jonathan Nieder
2012-04-14  2:26                   ` Jeff King
2012-04-13 23:30             ` [PATCH] i18n: use test_i18ncmp in t2020 (checkout --detach) Jeff King
2012-04-13 23:46               ` Jonathan Nieder
2012-04-14  2:24                 ` Jeff King
2012-04-14  4:44                   ` [PATCH v2 0/3] " Jonathan Nieder
2012-04-14  4:45                     ` [PATCH 1/3] test: do not rely on US English tracking-info messages Jonathan Nieder
2012-04-14  4:46                     ` [PATCH 2/3] test: use test_i18ncmp for "Patch format detection failed" message Jonathan Nieder
2012-04-14  4:48                     ` [PATCH 3/3] test: am of empty patch should not succeed Jonathan Nieder
2012-04-14  8:15                     ` [PATCH v2 0/3] Re: i18n: use test_i18ncmp in t2020 (checkout --detach) Jeff King
2012-04-14  5:02                   ` [PATCH] " Jonathan Nieder
2012-04-14  8:22                     ` Jeff King
2012-04-14 12:47                       ` Jonathan Nieder
2011-03-20  9:19         ` [PATCH 3/3] checkout: tweak detached-orphan warning format Jeff King
2011-03-20 19:00         ` [bug] git checkout lies about number of ahead commits when switching from detached HEAD Junio C Hamano
2011-03-21 10:35           ` Jeff King
2011-03-21 15:17             ` Junio C Hamano

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20110319224726.GC7116@sigill.intra.peff.net \
    --to=peff@peff.net \
    --cc=git@vger.kernel.org \
    --cc=piotr.krukowiecki@gmail.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.