#include "builtin.h"
static const char show_branch_usage[] =
-"git-show-branch [--sparse] [--current] [--all] [--remotes] [--topo-order] [--more=count | --list | --independent | --merge-base ] [--topics] [<refs>...] | --reflog[=n] <branch>";
+"git-show-branch [--sparse] [--current] [--all] [--remotes] [--topo-order] [--more=count | --list | --independent | --merge-base ] [--topics] [<refs>...] | --reflog[=n[,b]] <branch>";
+static const char show_branch_usage_reflog[] =
+"--reflog is incompatible with --all, --remotes, --independent or --merge-base";
static int default_num;
static int default_alloc;
dense = 0;
else if (!strcmp(arg, "--date-order"))
lifo = 0;
- else if (!strcmp(arg, "--reflog")) {
+ else if (!strcmp(arg, "--reflog") || !strcmp(arg, "-g")) {
reflog = DEFAULT_REFLOG;
}
else if (!strncmp(arg, "--reflog=", 9))
parse_reflog_param(arg + 9, &reflog, &reflog_base);
+ else if (!strncmp(arg, "-g=", 3))
+ parse_reflog_param(arg + 3, &reflog, &reflog_base);
else
usage(show_branch_usage);
ac--; av++;
}
ac--; av++;
- if (!!extra || !!reflog) {
+ if (extra || reflog) {
/* "listing" mode is incompatible with
* independent nor merge-base modes.
*/
if (independent || merge_base)
usage(show_branch_usage);
- if (!!reflog && (0 < extra))
+ if (reflog && ((0 < extra) || all_heads || all_remotes))
/*
* Asking for --more in reflog mode does not
- * make sense.
+ * make sense. --list is Ok.
+ *
+ * Also --all and --remotes do not make sense either.
*/
- usage(show_branch_usage);
+ usage(show_branch_usage_reflog);
}
/* If nothing is specified, show all branches by default */
if (ac + all_heads + all_remotes == 0)
all_heads = 1;
- if (all_heads + all_remotes)
- snarf_refs(all_heads, all_remotes);
if (reflog) {
unsigned char sha1[20];
char nth_desc[256];
char *ref;
int base = 0;
+
+ if (ac == 0) {
+ static const char *fake_av[2];
+ const char *refname;
+
+ refname = resolve_ref("HEAD", sha1, 1, NULL);
+ fake_av[0] = xstrdup(refname);
+ fake_av[1] = NULL;
+ av = fake_av;
+ ac = 1;
+ }
if (ac != 1)
die("--reflog option needs one branch name");
+
+ if (MAX_REVS < reflog)
+ die("Only %d entries can be shown at one time.",
+ MAX_REVS);
if (!dwim_ref(*av, strlen(*av), sha1, &ref))
die("No such ref %s", *av);
msg++;
m = xmalloc(strlen(msg) + 200);
sprintf(m, "(%s) %s",
- show_date(timestamp, 0, 1),
+ show_date(timestamp, tz, 1),
msg);
reflog_msg[i] = m;
free(logmsg);
append_ref(nth_desc, sha1, 1);
}
}
+ else if (all_heads + all_remotes)
+ snarf_refs(all_heads, all_remotes);
else {
while (0 < ac) {
append_one_rev(*av);