diff options
author | Junio C Hamano <junkio@cox.net> | 2006-01-09 13:29:23 -0800 |
---|---|---|
committer | Junio C Hamano <junkio@cox.net> | 2006-01-09 23:49:46 -0800 |
commit | c2bdd6afe29589980e66855d574907240cb9c62a (patch) | |
tree | 01f4108d2b27c8f08ecc2fa3918b1cbebdc0cac0 | |
parent | eb858c60d7850fc2ed2f69397f0560e707de324d (diff) | |
download | git-c2bdd6afe29589980e66855d574907240cb9c62a.tar.gz git-c2bdd6afe29589980e66855d574907240cb9c62a.tar.xz |
show-branch: take default arguments from configuration file.
This lets showbranch.default multivalued configuration item to
be used as the default set of parameters to git-show-branch when
none is given on the command line.
I keep many topic branches (e.g. zzz/pack, net/misc) and
branches used only as a reference under subdirectories
(e.g. hold/{html,man,todo} track the same from git.git, but
clutters the show-branch output when shown along with the main
development; ko/master tracks what I have pushed out already and
refetched from the kernel.org server), and often run:
$ git show-branch ko/master heads/*
to view only the ko/master head and branches I keep immediately
under $GIT_DIR/refs/heads. With this change, I can have this in
my $GIT_DIR/config file:
[showbranch]
default = ko/master
default = heads/*
and say
$ git show-branch
Signed-off-by: Junio C Hamano <junkio@cox.net>
-rw-r--r-- | show-branch.c | 32 |
1 files changed, 31 insertions, 1 deletions
diff --git a/show-branch.c b/show-branch.c index 15b196878..f43c40646 100644 --- a/show-branch.c +++ b/show-branch.c @@ -7,6 +7,10 @@ static const char show_branch_usage[] = "git-show-branch [--all] [--heads] [--tags] [--topo-order] [--more=count | --list | --independent | --merge-base ] [<refs>...]"; +static int default_num = 0; +static int default_alloc = 0; +static char **default_arg = NULL; + #define UNINTERESTING 01 #define REV_SHIFT 2 @@ -508,6 +512,21 @@ static void append_one_rev(const char *av) die("bad sha1 reference %s", av); } +static int git_show_branch_config(const char *var, const char *value) +{ + if (!strcmp(var, "showbranch.default")) { + if (default_alloc <= default_num + 1) { + default_alloc = default_alloc * 3 / 2 + 20; + default_arg = xrealloc(default_arg, sizeof *default_arg * default_alloc); + } + default_arg[default_num++] = strdup(value); + default_arg[default_num] = NULL; + return 0; + } + + return git_default_config(var, value); +} + int main(int ac, char **av) { struct commit *rev[MAX_REVS], *commit; @@ -527,11 +546,22 @@ int main(int ac, char **av) int shown_merge_point = 0; int topo_order = 0; + git_config(git_show_branch_config); setup_git_directory(); + /* If nothing is specified, try the default first */ + if (ac == 1 && default_num) { + ac = default_num + 1; + av = default_arg - 1; /* ick; we would not address av[0] */ + } + while (1 < ac && av[1][0] == '-') { char *arg = av[1]; - if (!strcmp(arg, "--all")) + if (!strcmp(arg, "--")) { + ac--; av++; + break; + } + else if (!strcmp(arg, "--all")) all_heads = all_tags = 1; else if (!strcmp(arg, "--heads")) all_heads = 1; |