Merge branch 'jg/auto-initialize-notes-with-percent-n-in-format'

* jg/auto-initialize-notes-with-percent-n-in-format:
  t3301: add tests to use --format="%N"
  pretty: Initialize notes if %N is used
This commit is contained in:
Junio C Hamano 2010-04-18 21:31:29 -07:00
commit 779f9467eb
4 changed files with 64 additions and 5 deletions

View file

@ -36,6 +36,7 @@ static void cmd_log_init(int argc, const char **argv, const char *prefix,
{ {
int i; int i;
int decoration_style = 0; int decoration_style = 0;
struct userformat_want w;
rev->abbrev = DEFAULT_ABBREV; rev->abbrev = DEFAULT_ABBREV;
rev->commit_format = CMIT_FMT_DEFAULT; rev->commit_format = CMIT_FMT_DEFAULT;
@ -58,7 +59,10 @@ static void cmd_log_init(int argc, const char **argv, const char *prefix,
usage(builtin_log_usage); usage(builtin_log_usage);
argc = setup_revisions(argc, argv, rev, opt); argc = setup_revisions(argc, argv, rev, opt);
if (!rev->show_notes_given && !rev->pretty_given) memset(&w, 0, sizeof(w));
userformat_find_requirements(NULL, &w);
if (!rev->show_notes_given && (!rev->pretty_given || w.notes))
rev->show_notes = 1; rev->show_notes = 1;
if (rev->show_notes) if (rev->show_notes)
init_display_notes(&rev->notes_opt); init_display_notes(&rev->notes_opt);

View file

@ -74,11 +74,16 @@ struct pretty_print_context
struct reflog_walk_info *reflog_info; struct reflog_walk_info *reflog_info;
}; };
struct userformat_want {
unsigned notes:1;
};
extern int has_non_ascii(const char *text); extern int has_non_ascii(const char *text);
struct rev_info; /* in revision.h, it circularly uses enum cmit_fmt */ struct rev_info; /* in revision.h, it circularly uses enum cmit_fmt */
extern char *reencode_commit_message(const struct commit *commit, extern char *reencode_commit_message(const struct commit *commit,
const char **encoding_p); const char **encoding_p);
extern void get_commit_format(const char *arg, struct rev_info *); extern void get_commit_format(const char *arg, struct rev_info *);
extern void userformat_find_requirements(const char *fmt, struct userformat_want *w);
extern void format_commit_message(const struct commit *commit, extern void format_commit_message(const struct commit *commit,
const char *format, struct strbuf *sb, const char *format, struct strbuf *sb,
const struct pretty_print_context *context); const struct pretty_print_context *context);

View file

@ -775,10 +775,13 @@ static size_t format_commit_one(struct strbuf *sb, const char *placeholder,
} }
return 0; /* unknown %g placeholder */ return 0; /* unknown %g placeholder */
case 'N': case 'N':
format_display_notes(commit->object.sha1, sb, if (c->pretty_ctx->show_notes) {
git_log_output_encoding ? git_log_output_encoding format_display_notes(commit->object.sha1, sb,
: git_commit_encoding, 0); git_log_output_encoding ? git_log_output_encoding
return 1; : git_commit_encoding, 0);
return 1;
}
return 0;
} }
/* For the rest we have to parse the commit header. */ /* For the rest we have to parse the commit header. */
@ -855,6 +858,35 @@ static size_t format_commit_item(struct strbuf *sb, const char *placeholder,
return consumed + 1; return consumed + 1;
} }
static size_t userformat_want_item(struct strbuf *sb, const char *placeholder,
void *context)
{
struct userformat_want *w = context;
if (*placeholder == '+' || *placeholder == '-')
placeholder++;
switch (*placeholder) {
case 'N':
w->notes = 1;
break;
}
return 0;
}
void userformat_find_requirements(const char *fmt, struct userformat_want *w)
{
struct strbuf dummy = STRBUF_INIT;
if (!fmt) {
if (!user_format)
return;
fmt = user_format;
}
strbuf_expand(&dummy, user_format, userformat_want_item, w);
strbuf_release(&dummy);
}
void format_commit_message(const struct commit *commit, void format_commit_message(const struct commit *commit,
const char *format, struct strbuf *sb, const char *format, struct strbuf *sb,
const struct pretty_print_context *pretty_ctx) const struct pretty_print_context *pretty_ctx)

View file

@ -55,6 +55,15 @@ test_expect_success 'handle empty notes gracefully' '
git notes show ; test 1 = $? git notes show ; test 1 = $?
' '
test_expect_success 'show non-existent notes entry with %N' '
for l in A B
do
echo "$l"
done >expect &&
git show -s --format='A%n%NB' >output &&
test_cmp expect output
'
test_expect_success 'create notes' ' test_expect_success 'create notes' '
git config core.notesRef refs/notes/commits && git config core.notesRef refs/notes/commits &&
MSG=b4 git notes add && MSG=b4 git notes add &&
@ -65,6 +74,15 @@ test_expect_success 'create notes' '
test_must_fail git notes show HEAD^ test_must_fail git notes show HEAD^
' '
test_expect_success 'show notes entry with %N' '
for l in A b4 B
do
echo "$l"
done >expect &&
git show -s --format='A%n%NB' >output &&
test_cmp expect output
'
cat >expect <<EOF cat >expect <<EOF
d423f8c refs/notes/commits@{0}: notes: Notes added by 'git notes add' d423f8c refs/notes/commits@{0}: notes: Notes added by 'git notes add'
EOF EOF