Skip to content

Commit

Permalink
git-log: allow --decorate[=short|full]
Browse files Browse the repository at this point in the history
Commit de435ac changed the behavior of --decorate from printing the
full ref (e.g., "refs/heads/master") to a shorter, more human-readable
version (e.g., just "master"). While this is nice for human readers,
external tools using the output from "git log" may prefer the full
version.

This patch introduces an extension to --decorate to allow the caller to
specify either the short or the full versions.

Signed-off-by: Lars Hjemli <hjemli@gmail.com>
Acked-by: Jeff King <peff@peff.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
  • Loading branch information
Lars Hjemli authored and Junio C Hamano committed Aug 26, 2009
1 parent 8d95184 commit d8526a4
Show file tree
Hide file tree
Showing 9 changed files with 65 additions and 10 deletions.
8 changes: 6 additions & 2 deletions Documentation/git-log.txt
Original file line number Diff line number Diff line change
Expand Up @@ -37,8 +37,12 @@ include::diff-options.txt[]
and <until>, see "SPECIFYING REVISIONS" section in
linkgit:git-rev-parse[1].

--decorate::
Print out the ref names of any commits that are shown.
--decorate[=short|full]::
Print out the ref names of any commits that are shown. If 'short' is
specified, the ref name prefixes 'refs/heads/', 'refs/tags/' and
'refs/remotes/' will not be printed. If 'full' is specified, the
full ref name (including prefix) will be printed. The default option
is 'short'.

--source::
Print out the ref name given on the command line by which each
Expand Down
16 changes: 14 additions & 2 deletions builtin-log.c
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,7 @@ static void cmd_log_init(int argc, const char **argv, const char *prefix,
struct rev_info *rev)
{
int i;
int decoration_style = 0;

rev->abbrev = DEFAULT_ABBREV;
rev->commit_format = CMIT_FMT_DEFAULT;
Expand All @@ -57,13 +58,24 @@ static void cmd_log_init(int argc, const char **argv, const char *prefix,
for (i = 1; i < argc; i++) {
const char *arg = argv[i];
if (!strcmp(arg, "--decorate")) {
load_ref_decorations();
rev->show_decorations = 1;
decoration_style = DECORATE_SHORT_REFS;
} else if (!prefixcmp(arg, "--decorate=")) {
const char *v = skip_prefix(arg, "--decorate=");
if (!strcmp(v, "full"))
decoration_style = DECORATE_FULL_REFS;
else if (!strcmp(v, "short"))
decoration_style = DECORATE_SHORT_REFS;
else
die("invalid --decorate option: %s", arg);
} else if (!strcmp(arg, "--source")) {
rev->show_source = 1;
} else
die("unrecognized argument: %s", arg);
}
if (decoration_style) {
rev->show_decorations = 1;
load_ref_decorations(decoration_style);
}
}

/*
Expand Down
7 changes: 4 additions & 3 deletions log-tree.c
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,8 @@ static int add_ref_decoration(const char *refname, const unsigned char *sha1, in
struct object *obj = parse_object(sha1);
if (!obj)
return 0;
refname = prettify_refname(refname);
if (!cb_data || *(int *)cb_data == DECORATE_SHORT_REFS)
refname = prettify_refname(refname);
add_name_decoration("", refname, obj);
while (obj->type == OBJ_TAG) {
obj = ((struct tag *)obj)->tagged;
Expand All @@ -36,12 +37,12 @@ static int add_ref_decoration(const char *refname, const unsigned char *sha1, in
return 0;
}

void load_ref_decorations(void)
void load_ref_decorations(int flags)
{
static int loaded;
if (!loaded) {
loaded = 1;
for_each_ref(add_ref_decoration, NULL);
for_each_ref(add_ref_decoration, &flags);
}
}

Expand Down
2 changes: 1 addition & 1 deletion log-tree.h
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@ void log_write_email_headers(struct rev_info *opt, struct commit *commit,
const char **subject_p,
const char **extra_headers_p,
int *need_8bit_cte_p);
void load_ref_decorations(void);
void load_ref_decorations(int flags);

#define FORMAT_PATCH_NAME_MAX 64
void get_patch_filename(struct commit *commit, int nr, const char *suffix,
Expand Down
2 changes: 1 addition & 1 deletion pretty.c
Original file line number Diff line number Diff line change
Expand Up @@ -583,7 +583,7 @@ static void format_decoration(struct strbuf *sb, const struct commit *commit)
struct name_decoration *d;
const char *prefix = " (";

load_ref_decorations();
load_ref_decorations(DECORATE_SHORT_REFS);
d = lookup_decoration(&name_decoration, &commit->object);
while (d) {
strbuf_addstr(sb, prefix);
Expand Down
2 changes: 1 addition & 1 deletion revision.c
Original file line number Diff line number Diff line change
Expand Up @@ -1052,7 +1052,7 @@ static int handle_revision_opt(struct rev_info *revs, int argc, const char **arg
revs->simplify_by_decoration = 1;
revs->limited = 1;
revs->prune = 1;
load_ref_decorations();
load_ref_decorations(DECORATE_SHORT_REFS);
} else if (!strcmp(arg, "--date-order")) {
revs->lifo = 0;
revs->topo_order = 1;
Expand Down
3 changes: 3 additions & 0 deletions revision.h
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,9 @@
#define SYMMETRIC_LEFT (1u<<8)
#define ALL_REV_FLAGS ((1u<<9)-1)

#define DECORATE_SHORT_REFS 1
#define DECORATE_FULL_REFS 2

struct rev_info;
struct log_info;

Expand Down
1 change: 1 addition & 0 deletions t/t4013-diff-various.sh
Original file line number Diff line number Diff line change
Expand Up @@ -207,6 +207,7 @@ log --root --cc --patch-with-stat --summary master
log -SF master
log -SF -p master
log --decorate --all
log --decorate=full --all
rev-list --parents HEAD
rev-list --children HEAD
Expand Down
34 changes: 34 additions & 0 deletions t/t4013/diff.log_--decorate=full_--all
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
$ git log --decorate=full --all
commit 59d314ad6f356dd08601a4cd5e530381da3e3c64 (refs/heads/master)
Merge: 9a6d494 c7a2ab9
Author: A U Thor <author@example.com>
Date: Mon Jun 26 00:04:00 2006 +0000

Merge branch 'side'

commit c7a2ab9e8eac7b117442a607d5a9b3950ae34d5a (refs/heads/side)
Author: A U Thor <author@example.com>
Date: Mon Jun 26 00:03:00 2006 +0000

Side

commit 9a6d4949b6b76956d9d5e26f2791ec2ceff5fdc0
Author: A U Thor <author@example.com>
Date: Mon Jun 26 00:02:00 2006 +0000

Third

commit 1bde4ae5f36c8d9abe3a0fce0c6aab3c4a12fe44
Author: A U Thor <author@example.com>
Date: Mon Jun 26 00:01:00 2006 +0000

Second

This is the second commit.

commit 444ac553ac7612cc88969031b02b3767fb8a353a (refs/heads/initial)
Author: A U Thor <author@example.com>
Date: Mon Jun 26 00:00:00 2006 +0000

Initial
$

0 comments on commit d8526a4

Please sign in to comment.