Skip to content

Commit

Permalink
Add a 'source' decorator for commits
Browse files Browse the repository at this point in the history
We already support decorating commits by tags or branches that point to
them, but especially when we are looking at multiple branches together,
we sometimes want to see _how_ we reached a particular commit.

We can abuse the '->util' field in the commit to keep track of that as
we walk the commit lists, and get a reasonably useful view into which
branch or tag first reaches that commit.

Of course, if the commit is reachable through multiple sources (which is
common), our particular choice of "first" reachable is entirely random
and depends on the particular path we happened to follow.

Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
  • Loading branch information
torvalds authored and gitster committed Nov 4, 2008
1 parent 9f8f132 commit 0f3a290
Show file tree
Hide file tree
Showing 6 changed files with 14 additions and 5 deletions.
2 changes: 2 additions & 0 deletions builtin-log.c
Expand Up @@ -56,6 +56,8 @@ static void cmd_log_init(int argc, const char **argv, const char *prefix,
if (!strcmp(arg, "--decorate")) {
load_ref_decorations();
decorate = 1;
} else if (!strcmp(arg, "--source")) {
rev->show_source = 1;
} else
die("unrecognized argument: %s", arg);
}
Expand Down
2 changes: 1 addition & 1 deletion builtin-rev-list.c
Expand Up @@ -100,7 +100,7 @@ static void show_commit(struct commit *commit)
children = children->next;
}
}
show_decorations(commit);
show_decorations(&revs, commit);
if (revs.commit_format == CMIT_FMT_ONELINE)
putchar(' ');
else
Expand Down
8 changes: 5 additions & 3 deletions log-tree.c
Expand Up @@ -52,11 +52,13 @@ static void show_parents(struct commit *commit, int abbrev)
}
}

void show_decorations(struct commit *commit)
void show_decorations(struct rev_info *opt, struct commit *commit)
{
const char *prefix;
struct name_decoration *decoration;

if (opt->show_source && commit->util)
printf(" %s", (char *) commit->util);
decoration = lookup_decoration(&name_decoration, &commit->object);
if (!decoration)
return;
Expand Down Expand Up @@ -279,7 +281,7 @@ void show_log(struct rev_info *opt)
fputs(diff_unique_abbrev(commit->object.sha1, abbrev_commit), stdout);
if (opt->print_parents)
show_parents(commit, abbrev_commit);
show_decorations(commit);
show_decorations(opt, commit);
if (opt->graph && !graph_is_commit_finished(opt->graph)) {
putchar('\n');
graph_show_remainder(opt->graph);
Expand Down Expand Up @@ -352,7 +354,7 @@ void show_log(struct rev_info *opt)
printf(" (from %s)",
diff_unique_abbrev(parent->object.sha1,
abbrev_commit));
show_decorations(commit);
show_decorations(opt, commit);
printf("%s", diff_get_color_opt(&opt->diffopt, DIFF_RESET));
if (opt->commit_format == CMIT_FMT_ONELINE) {
putchar(' ');
Expand Down
2 changes: 1 addition & 1 deletion log-tree.h
Expand Up @@ -12,7 +12,7 @@ int log_tree_diff_flush(struct rev_info *);
int log_tree_commit(struct rev_info *, struct commit *);
int log_tree_opt_parse(struct rev_info *, const char **, int);
void show_log(struct rev_info *opt);
void show_decorations(struct commit *commit);
void show_decorations(struct rev_info *opt, struct commit *commit);
void log_write_email_headers(struct rev_info *opt, const char *name,
const char **subject_p,
const char **extra_headers_p,
Expand Down
4 changes: 4 additions & 0 deletions revision.c
Expand Up @@ -199,6 +199,8 @@ static struct commit *handle_commit(struct rev_info *revs, struct object *object
mark_parents_uninteresting(commit);
revs->limited = 1;
}
if (revs->show_source && !commit->util)
commit->util = (void *) name;
return commit;
}

Expand Down Expand Up @@ -484,6 +486,8 @@ static int add_parents_to_list(struct rev_info *revs, struct commit *commit,

if (parse_commit(p) < 0)
return -1;
if (revs->show_source && !p->util)
p->util = commit->util;
p->object.flags |= left_flag;
if (!(p->object.flags & SEEN)) {
p->object.flags |= SEEN;
Expand Down
1 change: 1 addition & 0 deletions revision.h
Expand Up @@ -53,6 +53,7 @@ struct rev_info {
left_right:1,
rewrite_parents:1,
print_parents:1,
show_source:1,
reverse:1,
reverse_output_stage:1,
cherry_pick:1,
Expand Down

0 comments on commit 0f3a290

Please sign in to comment.