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
next prev parent 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).