Skip to content

Commit

Permalink
show-branch: take default arguments from configuration file.
Browse files Browse the repository at this point in the history
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>
  • Loading branch information
Junio C Hamano committed Jan 10, 2006
1 parent eb858c6 commit c2bdd6a
Showing 1 changed file with 31 additions and 1 deletion.
32 changes: 31 additions & 1 deletion show-branch.c
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down Expand Up @@ -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;
Expand All @@ -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;
Expand Down

0 comments on commit c2bdd6a

Please sign in to comment.