Skip to content

Commit

Permalink
show-branch: --current includes the current branch.
Browse files Browse the repository at this point in the history
With this, the command includes the current branch to the list
of revs to be shown when it is not given on the command line.
This is handy to use in the configuration file like this:

	[showbranch]
	default = --current
	default = heads/*	; primary branches, not topics under
				; subdirectories

Signed-off-by: Junio C Hamano <junkio@cox.net>
  • Loading branch information
Junio C Hamano committed Jan 15, 2006
1 parent ebedc31 commit 1aa68d6
Show file tree
Hide file tree
Showing 2 changed files with 46 additions and 16 deletions.
13 changes: 11 additions & 2 deletions Documentation/git-show-branch.txt
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,10 @@ git-show-branch - Show branches and their commits.

SYNOPSIS
--------
'git-show-branch [--all] [--heads] [--tags] [--topo-order] [--more=<n> | --list | --independent | --merge-base] [--no-name | --sha1-name] [<rev> | <glob>]...'
[verse]
git-show-branch [--all] [--heads] [--tags] [--topo-order] [--current]
[--more=<n> | --list | --independent | --merge-base]
[--no-name | --sha1-name] [<rev> | <glob>]...

DESCRIPTION
-----------
Expand Down Expand Up @@ -38,6 +41,11 @@ OPTIONS
Show all refs under $GIT_DIR/refs, $GIT_DIR/refs/heads,
and $GIT_DIR/refs/tags, respectively.

--current::
With this option, the command includes the current
branch to the list of revs to be shown when it is not
given on the command line.

--topo-order::
By default, the branches and their commits are shown in
reverse chronological order. This option makes them
Expand Down Expand Up @@ -134,7 +142,8 @@ it, having the following in the configuration file may help:
------------

With this,`git show-branch` without extra parameters would show
only the primary branches.
only the primary branches. In addition, if you happen to be on
your topic branch, it is shown as well.



Expand Down
49 changes: 35 additions & 14 deletions show-branch.c
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@
#include "refs.h"

static const char show_branch_usage[] =
"git-show-branch [--all] [--heads] [--tags] [--topo-order] [--more=count | --list | --independent | --merge-base ] [<refs>...]";
"git-show-branch [--current] [--all] [--heads] [--tags] [--topo-order] [--more=count | --list | --independent | --merge-base ] [<refs>...]";

static int default_num = 0;
static int default_alloc = 0;
Expand Down Expand Up @@ -435,12 +435,12 @@ static void snarf_refs(int head, int tag)
}
}

static int rev_is_head(char *head_path, int headlen,
char *name,
static int rev_is_head(char *head_path, int headlen, char *name,
unsigned char *head_sha1, unsigned char *sha1)
{
int namelen;
if ((!head_path[0]) || memcmp(head_sha1, sha1, 20))
if ((!head_path[0]) ||
(head_sha1 && sha1 && memcmp(head_sha1, sha1, 20)))
return 0;
namelen = strlen(name);
if ((headlen < namelen) ||
Expand Down Expand Up @@ -545,6 +545,7 @@ int main(int ac, char **av)
int sha1_name = 0;
int shown_merge_point = 0;
int topo_order = 0;
int with_current_branch = 0;
int head_at = -1;

git_config(git_show_branch_config);
Expand Down Expand Up @@ -574,6 +575,8 @@ int main(int ac, char **av)
extra = -1;
else if (!strcmp(arg, "--no-name"))
no_name = 1;
else if (!strcmp(arg, "--current"))
with_current_branch = 1;
else if (!strcmp(arg, "--sha1-name"))
sha1_name = 1;
else if (!strncmp(arg, "--more=", 7))
Expand Down Expand Up @@ -605,6 +608,34 @@ int main(int ac, char **av)
ac--; av++;
}

head_path_p = resolve_ref(git_path("HEAD"), head_sha1, 1);
if (head_path_p) {
head_path_len = strlen(head_path_p);
memcpy(head_path, head_path_p, head_path_len + 1);
}
else {
head_path_len = 0;
head_path[0] = 0;
}

if (with_current_branch && head_path_p) {
int has_head = 0;
for (i = 0; !has_head && i < ref_name_cnt; i++) {
/* We are only interested in adding the branch
* HEAD points at.
*/
if (rev_is_head(head_path,
head_path_len,
ref_name[i],
head_sha1, NULL))
has_head++;
}
if (!has_head) {
int pfxlen = strlen(git_path("refs/heads/"));
append_one_rev(head_path + pfxlen);
}
}

if (!ref_name_cnt) {
fprintf(stderr, "No revs to be shown.\n");
exit(0);
Expand Down Expand Up @@ -640,16 +671,6 @@ int main(int ac, char **av)
if (0 <= extra)
join_revs(&list, &seen, num_rev, extra);

head_path_p = resolve_ref(git_path("HEAD"), head_sha1, 1);
if (head_path_p) {
head_path_len = strlen(head_path_p);
memcpy(head_path, head_path_p, head_path_len + 1);
}
else {
head_path_len = 0;
head_path[0] = 0;
}

if (merge_base)
return show_merge_base(seen, num_rev);

Expand Down

0 comments on commit 1aa68d6

Please sign in to comment.