зеркало из https://github.com/microsoft/git.git
Merge branch 'em/commit-claim'
This commit is contained in:
Коммит
c142465c07
|
@ -9,7 +9,7 @@ SYNOPSIS
|
|||
--------
|
||||
[verse]
|
||||
'git commit' [-a | --interactive] [-s] [-v] [-u<mode>] [--amend] [--dry-run]
|
||||
[(-c | -C) <commit>] [-F <file> | -m <msg>]
|
||||
[(-c | -C) <commit>] [-F <file> | -m <msg>] [--reset-author]
|
||||
[--allow-empty] [--no-verify] [-e] [--author=<author>]
|
||||
[--cleanup=<mode>] [--] [[-i | -o ]<file>...]
|
||||
|
||||
|
@ -69,6 +69,11 @@ OPTIONS
|
|||
Like '-C', but with '-c' the editor is invoked, so that
|
||||
the user can further edit the commit message.
|
||||
|
||||
--reset-author::
|
||||
When used with -C/-c/--amend options, declare that the
|
||||
authorship of the resulting commit now belongs of the committer.
|
||||
This also renews the author timestamp.
|
||||
|
||||
-F <file>::
|
||||
--file=<file>::
|
||||
Take the commit message from the given file. Use '-' to
|
||||
|
|
|
@ -51,7 +51,7 @@ static const char *template_file;
|
|||
static char *edit_message, *use_message;
|
||||
static char *author_name, *author_email, *author_date;
|
||||
static int all, edit_flag, also, interactive, only, amend, signoff;
|
||||
static int quiet, verbose, no_verify, allow_empty, dry_run;
|
||||
static int quiet, verbose, no_verify, allow_empty, dry_run, renew_authorship;
|
||||
static char *untracked_files_arg;
|
||||
/*
|
||||
* The default commit message cleanup mode will remove the lines
|
||||
|
@ -91,8 +91,9 @@ static struct option builtin_commit_options[] = {
|
|||
OPT_FILENAME('F', "file", &logfile, "read log from file"),
|
||||
OPT_STRING(0, "author", &force_author, "AUTHOR", "override author for commit"),
|
||||
OPT_CALLBACK('m', "message", &message, "MESSAGE", "specify commit message", opt_parse_m),
|
||||
OPT_STRING('c', "reedit-message", &edit_message, "COMMIT", "reuse and edit message from specified commit "),
|
||||
OPT_STRING('c', "reedit-message", &edit_message, "COMMIT", "reuse and edit message from specified commit"),
|
||||
OPT_STRING('C', "reuse-message", &use_message, "COMMIT", "reuse message from specified commit"),
|
||||
OPT_BOOLEAN(0, "reset-author", &renew_authorship, "the commit is authored by me now (used with -C-c/--amend)"),
|
||||
OPT_BOOLEAN('s', "signoff", &signoff, "add Signed-off-by:"),
|
||||
OPT_FILENAME('t', "template", &template_file, "use specified template file"),
|
||||
OPT_BOOLEAN('e', "edit", &edit_flag, "force edit of commit"),
|
||||
|
@ -381,7 +382,7 @@ static void determine_author_info(void)
|
|||
email = getenv("GIT_AUTHOR_EMAIL");
|
||||
date = getenv("GIT_AUTHOR_DATE");
|
||||
|
||||
if (use_message) {
|
||||
if (use_message && !renew_authorship) {
|
||||
const char *a, *lb, *rb, *eol;
|
||||
|
||||
a = strstr(use_message_buffer, "\nauthor ");
|
||||
|
@ -747,6 +748,9 @@ static int parse_and_validate_options(int argc, const char *argv[],
|
|||
if (force_author && !strchr(force_author, '>'))
|
||||
force_author = find_author_by_nickname(force_author);
|
||||
|
||||
if (force_author && renew_authorship)
|
||||
die("Using both --reset-author and --author does not make sense");
|
||||
|
||||
if (logfile || message.len || use_message)
|
||||
use_editor = 0;
|
||||
if (edit_flag)
|
||||
|
@ -780,6 +784,8 @@ static int parse_and_validate_options(int argc, const char *argv[],
|
|||
use_message = edit_message;
|
||||
if (amend && !use_message)
|
||||
use_message = "HEAD";
|
||||
if (!use_message && renew_authorship)
|
||||
die("--reset-author can be used only with -C, -c or --amend.");
|
||||
if (use_message) {
|
||||
unsigned char sha1[20];
|
||||
static char utf8[] = "UTF-8";
|
||||
|
|
|
@ -0,0 +1,114 @@
|
|||
#!/bin/sh
|
||||
#
|
||||
# Copyright (c) 2009 Erick Mattos
|
||||
#
|
||||
|
||||
test_description='git commit --reset-author'
|
||||
|
||||
. ./test-lib.sh
|
||||
|
||||
author_header () {
|
||||
git cat-file commit "$1" |
|
||||
sed -n -e '/^$/q' -e '/^author /p'
|
||||
}
|
||||
|
||||
message_body () {
|
||||
git cat-file commit "$1" |
|
||||
sed -e '1,/^$/d'
|
||||
}
|
||||
|
||||
test_expect_success '-C option copies authorship and message' '
|
||||
echo "Initial" >foo &&
|
||||
git add foo &&
|
||||
test_tick &&
|
||||
git commit -m "Initial Commit" --author Frigate\ \<flying@over.world\> &&
|
||||
git tag Initial &&
|
||||
echo "Test 1" >>foo &&
|
||||
test_tick &&
|
||||
git commit -a -C Initial &&
|
||||
author_header Initial >expect &&
|
||||
author_header HEAD >actual &&
|
||||
test_cmp expect actual &&
|
||||
|
||||
message_body Initial >expect &&
|
||||
message_body HEAD >actual &&
|
||||
test_cmp expect actual
|
||||
'
|
||||
|
||||
test_expect_success '-C option copies only the message with --reset-author' '
|
||||
echo "Test 2" >>foo &&
|
||||
test_tick &&
|
||||
git commit -a -C Initial --reset-author &&
|
||||
echo "author $GIT_AUTHOR_NAME <$GIT_AUTHOR_EMAIL> $GIT_AUTHOR_DATE" >expect &&
|
||||
author_header HEAD >actual
|
||||
test_cmp expect actual &&
|
||||
|
||||
message_body Initial >expect &&
|
||||
message_body HEAD >actual &&
|
||||
test_cmp expect actual
|
||||
'
|
||||
|
||||
test_expect_success '-c option copies authorship and message' '
|
||||
echo "Test 3" >>foo &&
|
||||
test_tick &&
|
||||
EDITOR=: VISUAL=: git commit -a -c Initial &&
|
||||
author_header Initial >expect &&
|
||||
author_header HEAD >actual &&
|
||||
test_cmp expect actual
|
||||
'
|
||||
|
||||
test_expect_success '-c option copies only the message with --reset-author' '
|
||||
echo "Test 4" >>foo &&
|
||||
test_tick &&
|
||||
EDITOR=: VISUAL=: git commit -a -c Initial --reset-author &&
|
||||
echo "author $GIT_AUTHOR_NAME <$GIT_AUTHOR_EMAIL> $GIT_AUTHOR_DATE" >expect &&
|
||||
author_header HEAD >actual &&
|
||||
test_cmp expect actual &&
|
||||
|
||||
message_body Initial >expect &&
|
||||
message_body HEAD >actual &&
|
||||
test_cmp expect actual
|
||||
'
|
||||
|
||||
test_expect_success '--amend option copies authorship' '
|
||||
git checkout Initial &&
|
||||
echo "Test 5" >>foo &&
|
||||
test_tick &&
|
||||
git commit -a --amend -m "amend test" &&
|
||||
author_header Initial >expect &&
|
||||
author_header HEAD >actual &&
|
||||
|
||||
echo "amend test" >expect &&
|
||||
message_body HEAD >actual &&
|
||||
test_cmp expect actual
|
||||
'
|
||||
|
||||
test_expect_success '--reset-author makes the commit ours even with --amend option' '
|
||||
git checkout Initial &&
|
||||
echo "Test 6" >>foo &&
|
||||
test_tick &&
|
||||
git commit -a --reset-author -m "Changed again" --amend &&
|
||||
echo "author $GIT_AUTHOR_NAME <$GIT_AUTHOR_EMAIL> $GIT_AUTHOR_DATE" >expect &&
|
||||
author_header HEAD >actual &&
|
||||
test_cmp expect actual &&
|
||||
|
||||
echo "Changed again" >expect &&
|
||||
message_body HEAD >actual &&
|
||||
test_cmp expect actual
|
||||
'
|
||||
|
||||
test_expect_success '--reset-author and --author are mutually exclusive' '
|
||||
git checkout Initial &&
|
||||
echo "Test 7" >>foo &&
|
||||
test_tick &&
|
||||
test_must_fail git commit -a --reset-author --author="Xyzzy <frotz@nitfol.xz>"
|
||||
'
|
||||
|
||||
test_expect_success '--reset-author should be rejected without -c/-C/--amend' '
|
||||
git checkout Initial &&
|
||||
echo "Test 7" >>foo &&
|
||||
test_tick &&
|
||||
test_must_fail git commit -a --reset-author -m done
|
||||
'
|
||||
|
||||
test_done
|
Загрузка…
Ссылка в новой задаче