зеркало из https://github.com/microsoft/git.git
git commit --author=$name: look $name up in existing commits
This allows "git commit --author=$name" to accept a name that is not in the required "A U Thor <author@example.xz>" format, and use that to look up an author name that matches from existing commits. When using this feature, it is the user's responsibility to give a name that uniquely matches the name s/he wants, as the logic returns the name from the first matching commit. Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
Родитель
53d1589ff6
Коммит
146ea068a0
|
@ -75,8 +75,10 @@ OPTIONS
|
||||||
read the message from the standard input.
|
read the message from the standard input.
|
||||||
|
|
||||||
--author=<author>::
|
--author=<author>::
|
||||||
Override the author name used in the commit. Use
|
Override the author name used in the commit. You can use the
|
||||||
`A U Thor <author@example.com>` format.
|
standard `A U Thor <author@example.com>` format. Otherwise,
|
||||||
|
an existing commit that matches the given string and its author
|
||||||
|
name is used.
|
||||||
|
|
||||||
-m <msg>::
|
-m <msg>::
|
||||||
--message=<msg>::
|
--message=<msg>::
|
||||||
|
|
|
@ -710,6 +710,31 @@ static int message_is_empty(struct strbuf *sb, int start)
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static const char *find_author_by_nickname(const char *name)
|
||||||
|
{
|
||||||
|
struct rev_info revs;
|
||||||
|
struct commit *commit;
|
||||||
|
struct strbuf buf = STRBUF_INIT;
|
||||||
|
const char *av[20];
|
||||||
|
int ac = 0;
|
||||||
|
|
||||||
|
init_revisions(&revs, NULL);
|
||||||
|
strbuf_addf(&buf, "--author=%s", name);
|
||||||
|
av[++ac] = "--all";
|
||||||
|
av[++ac] = "-i";
|
||||||
|
av[++ac] = buf.buf;
|
||||||
|
av[++ac] = NULL;
|
||||||
|
setup_revisions(ac, av, &revs, NULL);
|
||||||
|
prepare_revision_walk(&revs);
|
||||||
|
commit = get_revision(&revs);
|
||||||
|
if (commit) {
|
||||||
|
strbuf_release(&buf);
|
||||||
|
format_commit_message(commit, "%an <%ae>", &buf, DATE_NORMAL);
|
||||||
|
return strbuf_detach(&buf, NULL);
|
||||||
|
}
|
||||||
|
die("No existing author found with '%s'", name);
|
||||||
|
}
|
||||||
|
|
||||||
static int parse_and_validate_options(int argc, const char *argv[],
|
static int parse_and_validate_options(int argc, const char *argv[],
|
||||||
const char * const usage[],
|
const char * const usage[],
|
||||||
const char *prefix)
|
const char *prefix)
|
||||||
|
@ -720,6 +745,9 @@ static int parse_and_validate_options(int argc, const char *argv[],
|
||||||
logfile = parse_options_fix_filename(prefix, logfile);
|
logfile = parse_options_fix_filename(prefix, logfile);
|
||||||
template_file = parse_options_fix_filename(prefix, template_file);
|
template_file = parse_options_fix_filename(prefix, template_file);
|
||||||
|
|
||||||
|
if (force_author && !strchr(force_author, '>'))
|
||||||
|
force_author = find_author_by_nickname(force_author);
|
||||||
|
|
||||||
if (logfile || message.len || use_message)
|
if (logfile || message.len || use_message)
|
||||||
use_editor = 0;
|
use_editor = 0;
|
||||||
if (edit_flag)
|
if (edit_flag)
|
||||||
|
|
Загрузка…
Ссылка в новой задаче