Skip to content

Commit

Permalink
ident: let callers omit name with fmt_indent
Browse files Browse the repository at this point in the history
Most callers want to see all of "$name <$email> $date", but
a few want only limited parts, omitting the date, or even
the name. We already have IDENT_NO_DATE to handle the date
part, but there's not a good option for getting just the
email. Callers have to done one of:

  1. Call ident_default_email; this does not respect
     environment variables, nor does it promise to trim
     whitespace or other crud from the result.

  2. Call git_{committer,author}_info; this returns the name
     and email, leaving the caller to parse out the wanted
     bits.

This patch adds IDENT_NO_NAME; it stops short of adding
IDENT_NO_EMAIL, as no callers want it (nor are likely to),
and it complicates the error handling of the function.

When no name is requested, the angle brackets (<>) around
the email address are also omitted.

Signed-off-by: Jeff King <peff@peff.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
  • Loading branch information
Jeff King authored and Junio C Hamano committed May 25, 2012
1 parent 359b27a commit c15e198
Show file tree
Hide file tree
Showing 2 changed files with 10 additions and 5 deletions.
1 change: 1 addition & 0 deletions cache.h
Original file line number Diff line number Diff line change
Expand Up @@ -889,6 +889,7 @@ enum date_mode parse_date_format(const char *format);

#define IDENT_ERROR_ON_NO_NAME 1
#define IDENT_NO_DATE 2
#define IDENT_NO_NAME 4
extern const char *git_author_info(int);
extern const char *git_committer_info(int);
extern const char *fmt_ident(const char *name, const char *email, const char *date_str, int);
Expand Down
14 changes: 9 additions & 5 deletions ident.c
Original file line number Diff line number Diff line change
Expand Up @@ -269,13 +269,14 @@ const char *fmt_ident(const char *name, const char *email,
char date[50];
int error_on_no_name = (flag & IDENT_ERROR_ON_NO_NAME);
int want_date = !(flag & IDENT_NO_DATE);
int want_name = !(flag & IDENT_NO_NAME);

if (!name)
if (want_name && !name)
name = ident_default_name();
if (!email)
email = ident_default_email();

if (!*name) {
if (want_name && !*name) {
struct passwd *pw;

if (error_on_no_name) {
Expand All @@ -297,10 +298,13 @@ const char *fmt_ident(const char *name, const char *email,
}

strbuf_reset(&ident);
strbuf_addstr_without_crud(&ident, name);
strbuf_addstr(&ident, " <");
if (want_name) {
strbuf_addstr_without_crud(&ident, name);
strbuf_addstr(&ident, " <");
}
strbuf_addstr_without_crud(&ident, email);
strbuf_addch(&ident, '>');
if (want_name)
strbuf_addch(&ident, '>');
if (want_date) {
strbuf_addch(&ident, ' ');
strbuf_addstr_without_crud(&ident, date);
Expand Down

0 comments on commit c15e198

Please sign in to comment.