threads / patch / 23050

patchbranch: only print upstream relationship with -v -v

Subject: [PATCH] branch: only print upstream relationship with -v -v

## tl;dr

4 messages between Mar 17, 2010 and Mar 18, 2010. Diffs are folded; open one to read it.

replies: 3people: 3as markdown or json

Nguyễn Thái Ngọc Duy· Mar 17, 2010, 15:05 UTC · lore

"git branch -v" is unusable for me because it's too slow. After this patch:

pclouds@do ~/w/git $ time ./git branch -v > /dev/null real 0m0.016s user 0m0.011s sys 0m0.004s

pclouds@do ~/w/git $ time ./git branch -v -v > /dev/null real 0m8.960s user 0m8.854s sys 0m0.029s

This is on a repository with ~30 branches, some are hundreds of patches behind upstream.

Signed-off-by: Nguyễn Thái Ngọc Duy <pclouds@gmail.com>
---
 Maybe it's just me, with my old branches...
 Documentation/git-branch.txt |    6 +++---
 builtin/branch.c             |    4 ++--
 2 files changed, 5 insertions(+), 5 deletions(-)
Show changes to 2 files +5 −5

Documentation/git-branch.txt, builtin/branch.c

diff --git a/Documentation/git-branch.txt b/Documentation/git-branch.txt
index 903a690..4380846 100644
--- a/Documentation/git-branch.txt
+++ b/Documentation/git-branch.txt
@@ -101,9 +101,9 @@ OPTIONS
 
 -v::
 --verbose::
-	Show sha1 and commit subject line for each head, along with
-	relationship to upstream branch (if any). If given twice, print
-	the name of the upstream branch, as well.
+	Show sha1 and commit subject line for each head. If given twice,
+	also the relationship to upstream branch (if any). If given
+	three times, print the name of the upstream branch, as well.
 
 --abbrev=<length>::
 	Alter the sha1's minimum display length in the output listing.
diff --git a/builtin/branch.c b/builtin/branch.c
index 6cf7e72..eb407f0 100644
--- a/builtin/branch.c
+++ b/builtin/branch.c
@@ -439,8 +439,8 @@ static void print_ref_item(struct ref_item *item, int maxwidth, int verbose,
 			sub = subject.buf;
 		}
 
-		if (item->kind == REF_LOCAL_BRANCH)
-			fill_tracking_info(&stat, item->name, verbose > 1);
+		if (item->kind == REF_LOCAL_BRANCH && verbose > 1)
+			fill_tracking_info(&stat, item->name, verbose > 2);
 
 		strbuf_addf(&out, " %s %s%s",
 			find_unique_abbrev(item->commit->object.sha1, abbrev),
-- 
1.7.0.1.390.g67bca
Michael J Gruber· Mar 17, 2010, 16:21 UTC · re: Nguyễn Thái Ngọc Duy · lore

Re: [PATCH] branch: only print upstream relationship with -v -v

Nguyễn Thái Ngọc Duy venit, vidit, dixit 17.03.2010 16:05:
Show 13 quoted lines
> "git branch -v" is unusable for me because it's too slow. After this
> patch:
> 
> pclouds@do ~/w/git $ time ./git branch -v > /dev/null
> real    0m0.016s
> user    0m0.011s
> sys     0m0.004s
> 
> pclouds@do ~/w/git $ time ./git branch -v -v > /dev/null
> real    0m8.960s
> user    0m8.854s
> sys     0m0.029s
> 

Well, but also, after your patch the old output format of "git branch -v" is not available any more at all! I mean, what is wrong with

git log --oneline --no-walk --branches --decorate
or
git rev-list --oneline --no-walk --branches

depending on what it is that you're really after? (Not to mention for-each-ref.)

Michael
Junio C Hamano· Mar 17, 2010, 16:53 UTC · re: Nguyễn Thái Ngọc Duy · lore

Re: [PATCH] branch: only print upstream relationship with -v -v

Nguyễn Thái Ngọc Duy  <pclouds@gmail.com> writes:
> "git branch -v" is unusable for me because it's too slow.
> ...
> This is on a repository with ~30 branches, some are hundreds of
> patches behind upstream.
Perhaps you have an overeager branch.autosetupmerge configuration?

I dunno. I seem to have a lot more branches than you do (currently 56), but most of them are topics that, once they forked from a particular commit, never merge other random commits, only because they have new commits that are unrelated to the objective of the topic, so most of my branches do not have "upstream" in that sense.

Nguyen Thai Ngoc Duy· Mar 18, 2010, 00:06 UTC · re: Junio C Hamano · lore

Re: [PATCH] branch: only print upstream relationship with -v -v

On 3/17/10, Junio C Hamano <gitster@pobox.com> wrote:
Show 11 quoted lines
> Nguyễn Thái Ngọc Duy  <pclouds@gmail.com> writes:
>
>  > "git branch -v" is unusable for me because it's too slow.
>
> > ...
>
> > This is on a repository with ~30 branches, some are hundreds of
>  > patches behind upstream.
>
>
> Perhaps you have an overeager branch.autosetupmerge configuration?
No. Never heard of it.
Show 5 quoted lines
>  I dunno.  I seem to have a lot more branches than you do (currently
>  56), but most of them are topics that, once they forked from a
>  particular commit, never merge other random commits, only because they
>  have new commits that are unrelated to the objective of the topic, so
>  most of my branches do not have "upstream" in that sense.

I did sysprof and it seems half the time was spent inside merge_bases_many(). Being a complete ignorant about merging stuff, I put "return NULL;" at the beginning of that function, "git branch -v" now goes down to 2 seconds. Don't know if that could tell anything.

-- 
Duy

← back to recent threads