git.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Junio C Hamano <gitster@pobox.com>
To: Olivier Marin <dkr+ml.git@free.fr>
Cc: Ingo Molnar <mingo@elte.hu>,
	Bruce Stephens <bruce.stephens@isode.com>,
	git@vger.kernel.org
Subject: Re: [PATCH 0/3] Making remote tracking statistics available to other tools
Date: Thu, 03 Jul 2008 12:07:12 -0700	[thread overview]
Message-ID: <7v8wwi23dr.fsf@gitster.siamese.dyndns.org> (raw)
In-Reply-To: <486CFDA3.9070704@free.fr> (Olivier Marin's message of "Thu, 03 Jul 2008 18:26:11 +0200")

Olivier Marin <dkr+ml.git@free.fr> writes:

> Junio C Hamano a écrit :
>> The one I sent out was a bit hacky as the existing implementation inside
>> git-checkout was not designed to be cleanly reusable.
>> 
>> Here is a cleaned up series that could be applied.
>> 
>> [PATCH 1/3] Refactor "tracking statistics" code used by "git checkout"
>> [PATCH 2/3] git-status: show the remote tracking statistics
>> [PATCH 3/3] git-branch -v: show the remote tracking statistics
>
> Sorry, but the third patch does not work for me. FWIU, the problem comes from
> the revision walking code that is not reentrant because of the object cache.
> IOW, calling stats_tracking_info() more than once does not work: objects
> states changed after first call.
>
> I do not understand the code enough yet and I failed to fix it. The only way
> I found is by clearing obj_hash (object.c) but this seems the wrong thing to
> do.
>
> Ideas?

Thanks.

 remote.c                 |    4 +++
 revision.h               |    1 +
 t/t6040-tracking-info.sh |   52 ++++++++++++++++++++++++++++++++++++++++++++++
 3 files changed, 57 insertions(+), 0 deletions(-)

diff --git a/remote.c b/remote.c
index bd5c3be..df8bd72 100644
--- a/remote.c
+++ b/remote.c
@@ -1295,6 +1295,10 @@ int stat_tracking_info(struct branch *branch, int *num_ours, int *num_theirs)
 		else
 			(*num_theirs)++;
 	}
+
+	/* clear object flags smudged by the above traversal */
+	clear_commit_marks(ours, ALL_REV_FLAGS);
+	clear_commit_marks(theirs, ALL_REV_FLAGS);
 	return 1;
 }
 
diff --git a/revision.h b/revision.h
index abce500..e8bac6d 100644
--- a/revision.h
+++ b/revision.h
@@ -11,6 +11,7 @@
 #define ADDED		(1u<<7)	/* Parents already parsed and added? */
 #define SYMMETRIC_LEFT	(1u<<8)
 #define TOPOSORT	(1u<<9)	/* In the active toposort list.. */
+#define ALL_REV_FLAGS	((1u<<10)-1)
 
 struct rev_info;
 struct log_info;
diff --git a/t/t6040-tracking-info.sh b/t/t6040-tracking-info.sh
new file mode 100755
index 0000000..960db2d
--- /dev/null
+++ b/t/t6040-tracking-info.sh
@@ -0,0 +1,52 @@
+#!/bin/sh
+
+test_description='remote tracking stats'
+
+. ./test-lib.sh
+
+advance () {
+	echo "$1" >"$1" &&
+	git add "$1" &&
+	test_tick &&
+	git commit -m "$1"
+}
+
+test_expect_success setup '
+	for i in a b c;
+	do
+		advance $i || break
+	done &&
+	git clone . test &&
+	(
+		cd test &&
+		git checkout -b b1 origin &&
+		git reset --hard HEAD^ &&
+		advance d &&
+		git checkout -b b2 origin &&
+		git reset --hard b1 &&
+		git checkout -b b3 origin &&
+		git reset --hard HEAD^ &&
+		git checkout -b b4 origin &&
+		advance e &&
+		advance f
+	)
+'
+
+script='s/^..\(b.\)[	 0-9a-f]*\[\([^]]*\)\].*/\1 \2/p'
+cat >expect <<\EOF
+b1 ahead 1, behind 1
+b2 ahead 1, behind 1
+b3 behind 1
+b4 ahead 2
+EOF
+
+test_expect_success 'branch -v' '
+	(
+		cd test &&
+		git branch -v
+	) |
+	sed -n -e "$script" >actual &&
+	test_cmp expect actual
+'
+
+test_done

  reply	other threads:[~2008-07-03 19:08 UTC|newest]

Thread overview: 28+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2008-07-01  9:13 [OT] Your branch is ahead of the tracked remote branch 'origin/master' by 50 commits Ingo Molnar
2008-07-01  9:26 ` Bruce Stephens
2008-07-01 10:14   ` Ingo Molnar
2008-07-01 11:41     ` SZEDER Gábor
2008-07-01 12:47       ` Jakub Narebski
2008-07-01 19:16     ` Junio C Hamano
2008-07-02  7:50       ` [PATCH 0/3] Making remote tracking statistics available to other tools Junio C Hamano
2008-07-03 16:26         ` Olivier Marin
2008-07-03 19:07           ` Junio C Hamano [this message]
2008-07-03 19:25             ` Olivier Marin
2008-07-02  7:51       ` [PATCH 1/3] Refactor "tracking statistics" code used by "git checkout" Junio C Hamano
2008-07-02  7:52       ` [PATCH 2/3] git-status: show the remote tracking statistics Junio C Hamano
2008-07-02  7:52       ` [PATCH 3/3] git-branch -v: " Junio C Hamano
2008-07-02  8:23         ` Johannes Sixt
2008-07-02  8:33           ` Karl Hasselström
2008-07-02 14:44             ` Brian Gernhardt
2008-07-02  8:42           ` Junio C Hamano
2008-07-02 15:44         ` Johannes Schindelin
2008-07-01 12:44   ` [OT] Your branch is ahead of the tracked remote branch 'origin/master' by 50 commits Jakub Narebski
2008-07-01  9:32 ` Junio C Hamano
2008-07-01 10:07   ` Ingo Molnar
2008-07-01 11:16     ` Miklos Vajna
2008-07-01 11:22       ` Ingo Molnar
2008-07-01 11:41         ` Miklos Vajna
2008-07-01 23:55           ` Junio C Hamano
2008-07-04  8:35         ` Pedro Melo
2008-07-01 12:46     ` Mikael Magnusson
2008-07-01 18:01     ` Björn Steinbrink

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=7v8wwi23dr.fsf@gitster.siamese.dyndns.org \
    --to=gitster@pobox.com \
    --cc=bruce.stephens@isode.com \
    --cc=dkr+ml.git@free.fr \
    --cc=git@vger.kernel.org \
    --cc=mingo@elte.hu \
    /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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).