Skip to content

Commit

Permalink
Merge branch 'jk/warn-author-committer-after-commit'
Browse files Browse the repository at this point in the history
* jk/warn-author-committer-after-commit:
  user_ident_sufficiently_given(): refactor the logic to be usable from elsewhere
  commit.c::print_summary: do not release the format string too early
  commit: allow suppression of implicit identity advice
  commit: show interesting ident information in summary
  strbuf: add strbuf_addbuf_percentquote
  strbuf_expand: convert "%%" to "%"

Conflicts:
	builtin-commit.c
	ident.c
  • Loading branch information
Junio C Hamano committed Jan 20, 2010
2 parents 15a873d + 1a89306 commit 0877510
Show file tree
Hide file tree
Showing 11 changed files with 88 additions and 5 deletions.
4 changes: 4 additions & 0 deletions Documentation/config.txt
Original file line number Diff line number Diff line change
Expand Up @@ -130,6 +130,10 @@ advice.*::
Advice shown when linkgit:git-merge[1] refuses to
merge to avoid overwritting local changes.
Default: true.
implicitIdentity::
Advice on how to set your identity configuration when
your information is guessed from the system username and
domain name. Default: true.
--

core.fileMode::
Expand Down
1 change: 1 addition & 0 deletions Documentation/pretty-formats.txt
Original file line number Diff line number Diff line change
Expand Up @@ -134,6 +134,7 @@ The placeholders are:
- '%C(...)': color specification, as described in color.branch.* config option
- '%m': left, right or boundary mark
- '%n': newline
- '%%': a raw '%'
- '%x00': print a byte from a hex code
- '%w([<w>[,<i1>[,<i2>]]])': switch line wrapping, like the -w option of
linkgit:git-shortlog[1].
Expand Down
11 changes: 11 additions & 0 deletions Documentation/technical/api-strbuf.txt
Original file line number Diff line number Diff line change
Expand Up @@ -199,6 +199,10 @@ character if the letter `n` appears after a `%`. The function returns
the length of the placeholder recognized and `strbuf_expand()` skips
over it.
+
The format `%%` is automatically expanded to a single `%` as a quoting
mechanism; callers do not need to handle the `%` placeholder themselves,
and the callback function will not be invoked for this placeholder.
+
All other characters (non-percent and not skipped ones) are copied
verbatim to the strbuf. If the callback returned zero, meaning that the
placeholder is unknown, then the percent sign is copied, too.
Expand All @@ -214,6 +218,13 @@ which can be used by the programmer of the callback as she sees fit.
placeholder and replacement string. The array needs to be
terminated by an entry with placeholder set to NULL.

`strbuf_addbuf_percentquote`::

Append the contents of one strbuf to another, quoting any
percent signs ("%") into double-percents ("%%") in the
destination. This is useful for literal data to be fed to either
strbuf_expand or to the *printf family of functions.

`strbuf_addf`::

Add a formatted string to the buffer.
Expand Down
2 changes: 2 additions & 0 deletions advice.c
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
int advice_push_nonfastforward = 1;
int advice_status_hints = 1;
int advice_commit_before_merge = 1;
int advice_implicit_identity = 1;

static struct {
const char *name;
Expand All @@ -11,6 +12,7 @@ static struct {
{ "pushnonfastforward", &advice_push_nonfastforward },
{ "statushints", &advice_status_hints },
{ "commitbeforemerge", &advice_commit_before_merge },
{ "implicitidentity", &advice_implicit_identity },
};

int git_default_advice_config(const char *var, const char *value)
Expand Down
1 change: 1 addition & 0 deletions advice.h
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@
extern int advice_push_nonfastforward;
extern int advice_status_hints;
extern int advice_commit_before_merge;
extern int advice_implicit_identity;

int git_default_advice_config(const char *var, const char *value);

Expand Down
42 changes: 39 additions & 3 deletions builtin-commit.c
Original file line number Diff line number Diff line change
Expand Up @@ -36,7 +36,20 @@ static const char * const builtin_status_usage[] = {
NULL
};

static const char implicit_ident_advice[] =
"Your name and email address were configured automatically based\n"
"on your username and hostname. Please check that they are accurate.\n"
"You can suppress this message by setting them explicitly:\n"
"\n"
" git config --global user.name Your Name\n"
" git config --global user.email you@example.com\n"
"\n"
"If the identity used for this commit is wrong, you can fix it with:\n"
"\n"
" git commit --amend --author='Your Name <you@example.com>'\n";

static unsigned char head_sha1[20];

static char *use_message_buffer;
static const char commit_editmsg[] = "COMMIT_EDITMSG";
static struct lock_file index_lock; /* real index */
Expand Down Expand Up @@ -1055,16 +1068,38 @@ static void print_summary(const char *prefix, const unsigned char *sha1)
{
struct rev_info rev;
struct commit *commit;
static const char *format = "format:%h] %s";
struct strbuf format = STRBUF_INIT;
unsigned char junk_sha1[20];
const char *head = resolve_ref("HEAD", junk_sha1, 0, NULL);
struct pretty_print_context pctx = {0};
struct strbuf author_ident = STRBUF_INIT;
struct strbuf committer_ident = STRBUF_INIT;

commit = lookup_commit(sha1);
if (!commit)
die("couldn't look up newly created commit");
if (!commit || parse_commit(commit))
die("could not parse newly created commit");

strbuf_addstr(&format, "format:%h] %s");

format_commit_message(commit, "%an <%ae>", &author_ident, &pctx);
format_commit_message(commit, "%cn <%ce>", &committer_ident, &pctx);
if (strbuf_cmp(&author_ident, &committer_ident)) {
strbuf_addstr(&format, "\n Author: ");
strbuf_addbuf_percentquote(&format, &author_ident);
}
if (!user_ident_sufficiently_given()) {
strbuf_addstr(&format, "\n Committer: ");
strbuf_addbuf_percentquote(&format, &committer_ident);
if (advice_implicit_identity) {
strbuf_addch(&format, '\n');
strbuf_addstr(&format, implicit_ident_advice);
}
}
strbuf_release(&author_ident);
strbuf_release(&committer_ident);

init_revisions(&rev, prefix);
setup_revisions(0, NULL, &rev, NULL);

Expand All @@ -1075,7 +1110,7 @@ static void print_summary(const char *prefix, const unsigned char *sha1)

rev.verbose_header = 1;
rev.show_root_diff = 1;
get_commit_format(format, &rev);
get_commit_format(format.buf, &rev);
rev.always_show_header = 0;
rev.diffopt.detect_rename = 1;
rev.diffopt.rename_limit = 100;
Expand All @@ -1094,10 +1129,11 @@ static void print_summary(const char *prefix, const unsigned char *sha1)
struct pretty_print_context ctx = {0};
struct strbuf buf = STRBUF_INIT;
ctx.date_mode = DATE_NORMAL;
format_commit_message(commit, format + 7, &buf, &ctx);
format_commit_message(commit, format.buf + 7, &buf, &ctx);
printf("%s\n", buf.buf);
strbuf_release(&buf);
}
strbuf_release(&format);
}

static int git_commit_config(const char *k, const char *v, void *cb)
Expand Down
1 change: 0 additions & 1 deletion daemon.c
Original file line number Diff line number Diff line change
Expand Up @@ -147,7 +147,6 @@ static char *path_ok(char *directory)
{ "IP", ip_address },
{ "P", tcp_port },
{ "D", directory },
{ "%", "%" },
{ NULL }
};

Expand Down
17 changes: 17 additions & 0 deletions strbuf.c
Original file line number Diff line number Diff line change
Expand Up @@ -220,6 +220,12 @@ void strbuf_expand(struct strbuf *sb, const char *format, expand_fn_t fn,
break;
format = percent + 1;

if (*format == '%') {
strbuf_addch(sb, '%');
format++;
continue;
}

consumed = fn(sb, format, context);
if (consumed)
format += consumed;
Expand All @@ -244,6 +250,17 @@ size_t strbuf_expand_dict_cb(struct strbuf *sb, const char *placeholder,
return 0;
}

void strbuf_addbuf_percentquote(struct strbuf *dst, const struct strbuf *src)
{
int i, len = src->len;

for (i = 0; i < len; i++) {
if (src->buf[i] == '%')
strbuf_addch(dst, '%');
strbuf_addch(dst, src->buf[i]);
}
}

size_t strbuf_fread(struct strbuf *sb, size_t size, FILE *f)
{
size_t res;
Expand Down
1 change: 1 addition & 0 deletions strbuf.h
Original file line number Diff line number Diff line change
Expand Up @@ -115,6 +115,7 @@ struct strbuf_expand_dict_entry {
const char *value;
};
extern size_t strbuf_expand_dict_cb(struct strbuf *sb, const char *placeholder, void *context);
extern void strbuf_addbuf_percentquote(struct strbuf *dst, const struct strbuf *src);

__attribute__((format (printf,2,3)))
extern void strbuf_addf(struct strbuf *sb, const char *fmt, ...);
Expand Down
7 changes: 7 additions & 0 deletions t/t6006-rev-list-format.sh
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,13 @@ test_cmp expect.$1 output.$1
"
}

test_format percent %%h <<'EOF'
commit 131a310eb913d107dd3c09a65d1651175898735d
%h
commit 86c75cfd708a0e5868dc876ed5b8bb66c80b4873
%h
EOF

test_format hash %H%n%h <<'EOF'
commit 131a310eb913d107dd3c09a65d1651175898735d
131a310eb913d107dd3c09a65d1651175898735d
Expand Down
6 changes: 5 additions & 1 deletion t/t7501-commit.sh
Original file line number Diff line number Diff line change
Expand Up @@ -117,7 +117,11 @@ test_expect_success \
test_expect_success \
"overriding author from command line" \
"echo 'gak' >file && \
git commit -m 'author' --author 'Rubber Duck <rduck@convoy.org>' -a"
git commit -m 'author' --author 'Rubber Duck <rduck@convoy.org>' -a >output 2>&1"

test_expect_success \
"commit --author output mentions author" \
"grep Rubber.Duck output"

test_expect_success PERL \
"interactive add" \
Expand Down

0 comments on commit 0877510

Please sign in to comment.