Merge branch 'it/log-format-source'
Custom userformat "log --format" learned %S atom that stands for the tip the traversal reached the commit from, i.e. --source. * it/log-format-source: log: add %S option (like --source) to log --format
This commit is contained in:
commit
a562a11983
@ -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
|
||||
|
Loading…
Reference in New Issue
Block a user