mirror of
https://github.com/git/git.git
synced 2024-05-09 02:06:12 +02:00
Add support for "commit name decorations" to log family of commands
This adds "--decorate" as a log option, which prints out the ref names of any commits that are shown. Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org> Signed-off-by: Junio C Hamano <junkio@cox.net>
This commit is contained in:
parent
a59b276e18
commit
ca135e7acc
|
@ -13,16 +13,43 @@
|
||||||
#include "tag.h"
|
#include "tag.h"
|
||||||
#include "reflog-walk.h"
|
#include "reflog-walk.h"
|
||||||
#include "patch-ids.h"
|
#include "patch-ids.h"
|
||||||
|
#include "refs.h"
|
||||||
|
|
||||||
static int default_show_root = 1;
|
static int default_show_root = 1;
|
||||||
|
|
||||||
/* this is in builtin-diff.c */
|
/* this is in builtin-diff.c */
|
||||||
void add_head(struct rev_info *revs);
|
void add_head(struct rev_info *revs);
|
||||||
|
|
||||||
|
static void add_name_decoration(const char *prefix, const char *name, struct object *obj)
|
||||||
|
{
|
||||||
|
int plen = strlen(prefix);
|
||||||
|
int nlen = strlen(name);
|
||||||
|
struct name_decoration *res = xmalloc(sizeof(struct name_decoration) + plen + nlen);
|
||||||
|
memcpy(res->name, prefix, plen);
|
||||||
|
memcpy(res->name + plen, name, nlen + 1);
|
||||||
|
res->next = add_decoration(&name_decoration, obj, res);
|
||||||
|
}
|
||||||
|
|
||||||
|
static int add_ref_decoration(const char *refname, const unsigned char *sha1, int flags, void *cb_data)
|
||||||
|
{
|
||||||
|
struct object *obj = parse_object(sha1);
|
||||||
|
if (!obj)
|
||||||
|
return 0;
|
||||||
|
add_name_decoration("", refname, obj);
|
||||||
|
while (obj->type == OBJ_TAG) {
|
||||||
|
obj = ((struct tag *)obj)->tagged;
|
||||||
|
if (!obj)
|
||||||
|
break;
|
||||||
|
add_name_decoration("tag: ", refname, obj);
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
static void cmd_log_init(int argc, const char **argv, const char *prefix,
|
static void cmd_log_init(int argc, const char **argv, const char *prefix,
|
||||||
struct rev_info *rev)
|
struct rev_info *rev)
|
||||||
{
|
{
|
||||||
int i;
|
int i;
|
||||||
|
int decorate = 0;
|
||||||
|
|
||||||
rev->abbrev = DEFAULT_ABBREV;
|
rev->abbrev = DEFAULT_ABBREV;
|
||||||
rev->commit_format = CMIT_FMT_DEFAULT;
|
rev->commit_format = CMIT_FMT_DEFAULT;
|
||||||
|
@ -39,8 +66,11 @@ static void cmd_log_init(int argc, const char **argv, const char *prefix,
|
||||||
git_log_output_encoding = xstrdup(arg);
|
git_log_output_encoding = xstrdup(arg);
|
||||||
else
|
else
|
||||||
git_log_output_encoding = "";
|
git_log_output_encoding = "";
|
||||||
}
|
} else if (!strcmp(arg, "--decorate")) {
|
||||||
else
|
if (!decorate)
|
||||||
|
for_each_ref(add_ref_decoration, NULL);
|
||||||
|
decorate = 1;
|
||||||
|
} else
|
||||||
die("unrecognized argument: %s", arg);
|
die("unrecognized argument: %s", arg);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
8
commit.h
8
commit.h
|
@ -3,6 +3,7 @@
|
||||||
|
|
||||||
#include "object.h"
|
#include "object.h"
|
||||||
#include "tree.h"
|
#include "tree.h"
|
||||||
|
#include "decorate.h"
|
||||||
|
|
||||||
struct commit_list {
|
struct commit_list {
|
||||||
struct commit *item;
|
struct commit *item;
|
||||||
|
@ -21,6 +22,13 @@ struct commit {
|
||||||
extern int save_commit_buffer;
|
extern int save_commit_buffer;
|
||||||
extern const char *commit_type;
|
extern const char *commit_type;
|
||||||
|
|
||||||
|
/* While we can decorate any object with a name, it's only used for commits.. */
|
||||||
|
extern struct decoration name_decoration;
|
||||||
|
struct name_decoration {
|
||||||
|
struct name_decoration *next;
|
||||||
|
char name[1];
|
||||||
|
};
|
||||||
|
|
||||||
struct commit *lookup_commit(const unsigned char *sha1);
|
struct commit *lookup_commit(const unsigned char *sha1);
|
||||||
struct commit *lookup_commit_reference(const unsigned char *sha1);
|
struct commit *lookup_commit_reference(const unsigned char *sha1);
|
||||||
struct commit *lookup_commit_reference_gently(const unsigned char *sha1,
|
struct commit *lookup_commit_reference_gently(const unsigned char *sha1,
|
||||||
|
|
21
log-tree.c
21
log-tree.c
|
@ -4,6 +4,8 @@
|
||||||
#include "log-tree.h"
|
#include "log-tree.h"
|
||||||
#include "reflog-walk.h"
|
#include "reflog-walk.h"
|
||||||
|
|
||||||
|
struct decoration name_decoration = { "object names" };
|
||||||
|
|
||||||
static void show_parents(struct commit *commit, int abbrev)
|
static void show_parents(struct commit *commit, int abbrev)
|
||||||
{
|
{
|
||||||
struct commit_list *p;
|
struct commit_list *p;
|
||||||
|
@ -13,6 +15,23 @@ static void show_parents(struct commit *commit, int abbrev)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void show_decorations(struct commit *commit)
|
||||||
|
{
|
||||||
|
const char *prefix;
|
||||||
|
struct name_decoration *decoration;
|
||||||
|
|
||||||
|
decoration = lookup_decoration(&name_decoration, &commit->object);
|
||||||
|
if (!decoration)
|
||||||
|
return;
|
||||||
|
prefix = " (";
|
||||||
|
while (decoration) {
|
||||||
|
printf("%s%s", prefix, decoration->name);
|
||||||
|
prefix = ", ";
|
||||||
|
decoration = decoration->next;
|
||||||
|
}
|
||||||
|
putchar(')');
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Search for "^[-A-Za-z]+: [^@]+@" pattern. It usually matches
|
* Search for "^[-A-Za-z]+: [^@]+@" pattern. It usually matches
|
||||||
* Signed-off-by: and Acked-by: lines.
|
* Signed-off-by: and Acked-by: lines.
|
||||||
|
@ -136,6 +155,7 @@ void show_log(struct rev_info *opt, const char *sep)
|
||||||
fputs(diff_unique_abbrev(commit->object.sha1, abbrev_commit), stdout);
|
fputs(diff_unique_abbrev(commit->object.sha1, abbrev_commit), stdout);
|
||||||
if (opt->parents)
|
if (opt->parents)
|
||||||
show_parents(commit, abbrev_commit);
|
show_parents(commit, abbrev_commit);
|
||||||
|
show_decorations(commit);
|
||||||
putchar(opt->diffopt.line_termination);
|
putchar(opt->diffopt.line_termination);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
@ -240,6 +260,7 @@ void show_log(struct rev_info *opt, const char *sep)
|
||||||
printf(" (from %s)",
|
printf(" (from %s)",
|
||||||
diff_unique_abbrev(parent->object.sha1,
|
diff_unique_abbrev(parent->object.sha1,
|
||||||
abbrev_commit));
|
abbrev_commit));
|
||||||
|
show_decorations(commit);
|
||||||
printf("%s",
|
printf("%s",
|
||||||
diff_get_color(opt->diffopt.color_diff, DIFF_RESET));
|
diff_get_color(opt->diffopt.color_diff, DIFF_RESET));
|
||||||
putchar(opt->commit_format == CMIT_FMT_ONELINE ? ' ' : '\n');
|
putchar(opt->commit_format == CMIT_FMT_ONELINE ? ' ' : '\n');
|
||||||
|
|
Loading…
Reference in New Issue