threads / patch / 38821

patchshow-branch: show all local heads when only giving one rev along --topics

Subject: [PATCH] show-branch: show all local heads when only giving one rev along --topics

## tl;dr

2 messages between Mar 16, 2015 and Mar 16, 2015. Diffs are folded; open one to read it.

replies: 1people: 1as markdown or json

Mike Hommey· Mar 16, 2015, 08:38 UTC · lore

"git show-branch --topics <rev> <revs>..." displays ancestry graph, only considering commits that are in all given revs, except the first one.

"git show-branch" displays ancestry graph for all local branches.

Unfortunately, "git show-branch --topics <rev>" only prints out the rev info for the given rev, and nothing else, e.g.:

  $ git show-branch --topics origin/master
  [origin/master] Sync with 2.3.3

While there is an option to add all remote-tracking branches (-r), and another to add all local+remote branches (-a), there is no option to add only local branches. Adding such an option could be considered, but a user would likely already expect that the above command line considers the lack of rev other than for --topics as meaning all local branches, like when there is no argument at all.

Moreover, when using -r and -a along with --topics, the first local or remote-tracking branch, depending on alphabetic order is used instead of the one given after --topics (any rev given on the command line is actually simply ignored when either -r or -a is given). And if no rev is given at all, the fact that the first alphetical branch is the base of topics is probably not expected by users (Maybe --topics should always require one rev on the command line?)

This change makes
  "show-branch --topics $rev"
act as
  "show-branch --topics $rev $(git for-each-ref refs/heads
                               --format='%(refname:short)')"
  "show-branch -r --topics $rev ..."
act as
  "show-branch --topics $rev ... $(git for-each-ref refs/remotes
                                   --format='%(refname:short)')"
instead of
  "show-branch --topics $(git for-each-ref refs/remotes
                          --format='%(refname:short)')"
and
  "show-branch -a --topics $rev ..."
act as
  "show-branch --topics $rev ... $(git for-each-ref refs/heads refs/remotes
                                   --format='%(refname:short)')"
instead of
  "show-branch --topics $(git for-each-ref refs/heads refs/remotes
                          --format='%(refname:short)')"
---
 builtin/show-branch.c | 6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)
Show changes to builtin/show-branch.c +3 −3
diff --git a/builtin/show-branch.c b/builtin/show-branch.c
index 365228a..ef9e719 100644
--- a/builtin/show-branch.c
+++ b/builtin/show-branch.c
@@ -718,7 +718,7 @@ int cmd_show_branch(int ac, const char **av, const char *prefix)
 	}
 
 	/* If nothing is specified, show all branches by default */
-	if (ac + all_heads + all_remotes == 0)
+	if (ac <= topics && all_heads + all_remotes == 0)
 		all_heads = 1;
 
 	if (reflog) {
@@ -785,13 +785,13 @@ int cmd_show_branch(int ac, const char **av, const char *prefix)
 		}
 		free(ref);
 	}
-	else if (all_heads + all_remotes)
-		snarf_refs(all_heads, all_remotes);
 	else {
 		while (0 < ac) {
 			append_one_rev(*av);
 			ac--; av++;
 		}
+		if (all_heads + all_remotes)
+			snarf_refs(all_heads, all_remotes);
 	}
 
 	head_p = resolve_ref_unsafe("HEAD", RESOLVE_REF_READING,
-- 
2.3.3.3.g6c0eb00
Mike Hommey· Mar 16, 2015, 23:50 UTC · re: Mike Hommey · lore

Re: [PATCH] show-branch: show all local heads when only giving one rev along --topics

On Mon, Mar 16, 2015 at 05:38:06PM +0900, Mike Hommey wrote:
Show 48 quoted lines
> "git show-branch --topics <rev> <revs>..." displays ancestry graph, only
> considering commits that are in all given revs, except the first one.
> 
> "git show-branch" displays ancestry graph for all local branches.
> 
> Unfortunately, "git show-branch --topics <rev>" only prints out the rev
> info for the given rev, and nothing else, e.g.:
> 
>   $ git show-branch --topics origin/master
>   [origin/master] Sync with 2.3.3
> 
> While there is an option to add all remote-tracking branches (-r), and
> another to add all local+remote branches (-a), there is no option to add
> only local branches. Adding such an option could be considered, but a
> user would likely already expect that the above command line considers
> the lack of rev other than for --topics as meaning all local branches,
> like when there is no argument at all.
> 
> Moreover, when using -r and -a along with --topics, the first local or
> remote-tracking branch, depending on alphabetic order is used instead of
> the one given after --topics (any rev given on the command line is
> actually simply ignored when either -r or -a is given). And if no rev is
> given at all, the fact that the first alphetical branch is the base of
> topics is probably not expected by users (Maybe --topics should always
> require one rev on the command line?)
> 
> This change makes
>   "show-branch --topics $rev"
> act as
>   "show-branch --topics $rev $(git for-each-ref refs/heads
>                                --format='%(refname:short)')"
> 
>   "show-branch -r --topics $rev ..."
> act as
>   "show-branch --topics $rev ... $(git for-each-ref refs/remotes
>                                    --format='%(refname:short)')"
> instead of
>   "show-branch --topics $(git for-each-ref refs/remotes
>                           --format='%(refname:short)')"
> 
> and
>   "show-branch -a --topics $rev ..."
> act as
>   "show-branch --topics $rev ... $(git for-each-ref refs/heads refs/remotes
>                                    --format='%(refname:short)')"
> instead of
>   "show-branch --topics $(git for-each-ref refs/heads refs/remotes
>                           --format='%(refname:short)')"
Sorry, this was missing:
Signed-off-by: Mike Hommey <mh@glandium.org>
Mike

← back to recent threads