зеркало из https://github.com/microsoft/git.git
log: add %S option (like --source) to log --format
Make it possible to write for example git log --format="%H,%S" where the %S at the end is a new placeholder that prints out the ref (tag/branch) for each commit. Using %d might seem like an alternative but it only shows the ref for the last commit in the branch. Signed-off-by: Issac Trotts <issactrotts@google.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
Родитель
ecbdaf0899
Коммит
ad6f028f06
|
@ -134,6 +134,8 @@ The placeholders are:
|
|||
- '%cI': committer date, strict ISO 8601 format
|
||||
- '%d': ref names, like the --decorate option of linkgit:git-log[1]
|
||||
- '%D': ref names without the " (", ")" wrapping.
|
||||
- '%S': ref name given on the command line by which the commit was reached
|
||||
(like `git log --source`), only works with `git log`
|
||||
- '%e': encoding
|
||||
- '%s': subject
|
||||
- '%f': sanitized subject line, suitable for a filename
|
||||
|
|
|
@ -203,7 +203,7 @@ static void cmd_log_init_finish(int argc, const char **argv, const char *prefix,
|
|||
rev->diffopt.filter || rev->diffopt.flags.follow_renames)
|
||||
rev->always_show_header = 0;
|
||||
|
||||
if (source) {
|
||||
if (source || w.source) {
|
||||
init_revision_sources(&revision_sources);
|
||||
rev->sources = &revision_sources;
|
||||
}
|
||||
|
|
|
@ -700,6 +700,7 @@ void show_log(struct rev_info *opt)
|
|||
ctx.color = opt->diffopt.use_color;
|
||||
ctx.expand_tabs_in_log = opt->expand_tabs_in_log;
|
||||
ctx.output_encoding = get_log_output_encoding();
|
||||
ctx.rev = opt;
|
||||
if (opt->from_ident.mail_begin && opt->from_ident.name_begin)
|
||||
ctx.from_ident = &opt->from_ident;
|
||||
if (opt->graph)
|
||||
|
|
12
pretty.c
12
pretty.c
|
@ -1084,6 +1084,7 @@ static size_t format_commit_one(struct strbuf *sb, /* in UTF-8 */
|
|||
struct commit_list *p;
|
||||
const char *arg;
|
||||
int ch;
|
||||
char **slot;
|
||||
|
||||
/* these are independent of the commit */
|
||||
switch (placeholder[0]) {
|
||||
|
@ -1194,6 +1195,14 @@ static size_t format_commit_one(struct strbuf *sb, /* in UTF-8 */
|
|||
load_ref_decorations(NULL, DECORATE_SHORT_REFS);
|
||||
format_decorations_extended(sb, commit, c->auto_color, "", ", ", "");
|
||||
return 1;
|
||||
case 'S': /* tag/branch like --source */
|
||||
if (!(c->pretty_ctx->rev && c->pretty_ctx->rev->sources))
|
||||
return 0;
|
||||
slot = revision_sources_at(c->pretty_ctx->rev->sources, commit);
|
||||
if (!(slot && *slot))
|
||||
return 0;
|
||||
strbuf_addstr(sb, *slot);
|
||||
return 1;
|
||||
case 'g': /* reflog info */
|
||||
switch(placeholder[1]) {
|
||||
case 'd': /* reflog selector */
|
||||
|
@ -1498,6 +1507,9 @@ static size_t userformat_want_item(struct strbuf *sb, const char *placeholder,
|
|||
case 'N':
|
||||
w->notes = 1;
|
||||
break;
|
||||
case 'S':
|
||||
w->source = 1;
|
||||
break;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
|
1
pretty.h
1
pretty.h
|
@ -60,6 +60,7 @@ static inline int cmit_fmt_is_mail(enum cmit_fmt fmt)
|
|||
|
||||
struct userformat_want {
|
||||
unsigned notes:1;
|
||||
unsigned source:1;
|
||||
};
|
||||
|
||||
/* Set the flag "w->notes" if there is placeholder %N in "fmt". */
|
||||
|
|
|
@ -621,4 +621,54 @@ test_expect_success 'trailer parsing not fooled by --- line' '
|
|||
test_cmp expect actual
|
||||
'
|
||||
|
||||
test_expect_success 'set up %S tests' '
|
||||
git checkout --orphan source-a &&
|
||||
test_commit one &&
|
||||
test_commit two &&
|
||||
git checkout -b source-b HEAD^ &&
|
||||
test_commit three
|
||||
'
|
||||
|
||||
test_expect_success 'log --format=%S paints branch names' '
|
||||
cat >expect <<-\EOF &&
|
||||
source-b
|
||||
source-a
|
||||
source-b
|
||||
EOF
|
||||
git log --format=%S source-a source-b >actual &&
|
||||
test_cmp expect actual
|
||||
'
|
||||
|
||||
test_expect_success 'log --format=%S paints tag names' '
|
||||
git tag -m tagged source-tag &&
|
||||
cat >expect <<-\EOF &&
|
||||
source-tag
|
||||
source-a
|
||||
source-tag
|
||||
EOF
|
||||
git log --format=%S source-tag source-a >actual &&
|
||||
test_cmp expect actual
|
||||
'
|
||||
|
||||
test_expect_success 'log --format=%S paints symmetric ranges' '
|
||||
cat >expect <<-\EOF &&
|
||||
source-b
|
||||
source-a
|
||||
EOF
|
||||
git log --format=%S source-a...source-b >actual &&
|
||||
test_cmp expect actual
|
||||
'
|
||||
|
||||
test_expect_success '%S in git log --format works with other placeholders (part 1)' '
|
||||
git log --format="source-b %h" source-b >expect &&
|
||||
git log --format="%S %h" source-b >actual &&
|
||||
test_cmp expect actual
|
||||
'
|
||||
|
||||
test_expect_success '%S in git log --format works with other placeholders (part 2)' '
|
||||
git log --format="%h source-b" source-b >expect &&
|
||||
git log --format="%h %S" source-b >actual &&
|
||||
test_cmp expect actual
|
||||
'
|
||||
|
||||
test_done
|
||||
|
|
|
@ -185,6 +185,10 @@ test_expect_success 'basic colors' '
|
|||
test_cmp expect actual
|
||||
'
|
||||
|
||||
test_expect_success '%S is not a placeholder for rev-list yet' '
|
||||
git rev-list --format="%S" -1 master | grep "%S"
|
||||
'
|
||||
|
||||
test_expect_success 'advanced colors' '
|
||||
cat >expect <<-EOF &&
|
||||
commit $head2
|
||||
|
|
Загрузка…
Ссылка в новой задаче