summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJunio C Hamano <junkio@cox.net>2006-01-11 08:16:42 (GMT)
committerJunio C Hamano <junkio@cox.net>2006-01-15 08:04:23 (GMT)
commit1aa68d67358be1ee20da57b0c3bd1f9863fe41a4 (patch)
tree0eec4370d640c490c8628f6dc8e4d19e4400c5e4
parentebedc3195258a6382f58c8c6b54b21db922440af (diff)
downloadgit-1aa68d67358be1ee20da57b0c3bd1f9863fe41a4.zip
git-1aa68d67358be1ee20da57b0c3bd1f9863fe41a4.tar.gz
git-1aa68d67358be1ee20da57b0c3bd1f9863fe41a4.tar.bz2
show-branch: --current includes the current branch.
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>
-rw-r--r--Documentation/git-show-branch.txt13
-rw-r--r--show-branch.c49
2 files changed, 46 insertions, 16 deletions
diff --git a/Documentation/git-show-branch.txt b/Documentation/git-show-branch.txt
index 4bef476..7b1a9c9 100644
--- a/Documentation/git-show-branch.txt
+++ b/Documentation/git-show-branch.txt
@@ -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
-----------
@@ -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
@@ -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.
diff --git a/show-branch.c b/show-branch.c
index ea3d9e4..7a0dcc6 100644
--- a/show-branch.c
+++ b/show-branch.c
@@ -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;
@@ -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) ||
@@ -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);
@@ -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))
@@ -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);
@@ -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);