Merge branch 'jn/maint-amend-missing-name'
* jn/maint-amend-missing-name: commit --amend: cope with missing display name
This commit is contained in:
commit
de8c359786
@ -462,15 +462,21 @@ static void determine_author_info(void)
|
|||||||
if (!a)
|
if (!a)
|
||||||
die("invalid commit: %s", use_message);
|
die("invalid commit: %s", use_message);
|
||||||
|
|
||||||
lb = strstr(a + 8, " <");
|
lb = strchrnul(a + strlen("\nauthor "), '<');
|
||||||
rb = strstr(a + 8, "> ");
|
rb = strchrnul(lb, '>');
|
||||||
eol = strchr(a + 8, '\n');
|
eol = strchrnul(rb, '\n');
|
||||||
if (!lb || !rb || !eol)
|
if (!*lb || !*rb || !*eol)
|
||||||
die("invalid commit: %s", use_message);
|
die("invalid commit: %s", use_message);
|
||||||
|
|
||||||
name = xstrndup(a + 8, lb - (a + 8));
|
if (lb == a + strlen("\nauthor "))
|
||||||
email = xstrndup(lb + 2, rb - (lb + 2));
|
/* \nauthor <foo@example.com> */
|
||||||
date = xstrndup(rb + 2, eol - (rb + 2));
|
name = xcalloc(1, 1);
|
||||||
|
else
|
||||||
|
name = xmemdupz(a + strlen("\nauthor "),
|
||||||
|
(lb - strlen(" ") -
|
||||||
|
(a + strlen("\nauthor "))));
|
||||||
|
email = xmemdupz(lb + strlen("<"), rb - (lb + strlen("<")));
|
||||||
|
date = xmemdupz(rb + strlen("> "), eol - (rb + strlen("> ")));
|
||||||
}
|
}
|
||||||
|
|
||||||
if (force_author) {
|
if (force_author) {
|
||||||
|
@ -83,6 +83,52 @@ test_expect_success '--amend option copies authorship' '
|
|||||||
test_cmp expect actual
|
test_cmp expect actual
|
||||||
'
|
'
|
||||||
|
|
||||||
|
sha1_file() {
|
||||||
|
echo "$*" | sed "s#..#.git/objects/&/#"
|
||||||
|
}
|
||||||
|
remove_object() {
|
||||||
|
rm -f $(sha1_file "$*")
|
||||||
|
}
|
||||||
|
no_reflog() {
|
||||||
|
cp .git/config .git/config.saved &&
|
||||||
|
echo "[core] logallrefupdates = false" >>.git/config &&
|
||||||
|
test_when_finished "mv -f .git/config.saved .git/config" &&
|
||||||
|
|
||||||
|
if test -e .git/logs
|
||||||
|
then
|
||||||
|
mv .git/logs . &&
|
||||||
|
test_when_finished "mv logs .git/"
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
test_expect_success '--amend option with empty author' '
|
||||||
|
git cat-file commit Initial >tmp &&
|
||||||
|
sed "s/author [^<]* </author </" tmp >empty-author &&
|
||||||
|
no_reflog &&
|
||||||
|
sha=$(git hash-object -t commit -w empty-author) &&
|
||||||
|
test_when_finished "remove_object $sha" &&
|
||||||
|
git checkout $sha &&
|
||||||
|
test_when_finished "git checkout Initial" &&
|
||||||
|
echo "Empty author test" >>foo &&
|
||||||
|
test_tick &&
|
||||||
|
! git commit -a -m "empty author" --amend 2>err &&
|
||||||
|
grep "empty ident" err
|
||||||
|
'
|
||||||
|
|
||||||
|
test_expect_success '--amend option with missing author' '
|
||||||
|
git cat-file commit Initial >tmp &&
|
||||||
|
sed "s/author [^<]* </author </" tmp >malformed &&
|
||||||
|
no_reflog &&
|
||||||
|
sha=$(git hash-object -t commit -w malformed) &&
|
||||||
|
test_when_finished "remove_object $sha" &&
|
||||||
|
git checkout $sha &&
|
||||||
|
test_when_finished "git checkout Initial" &&
|
||||||
|
echo "Missing author test" >>foo &&
|
||||||
|
test_tick &&
|
||||||
|
! git commit -a -m "malformed author" --amend 2>err &&
|
||||||
|
grep "empty ident" err
|
||||||
|
'
|
||||||
|
|
||||||
test_expect_success '--reset-author makes the commit ours even with --amend option' '
|
test_expect_success '--reset-author makes the commit ours even with --amend option' '
|
||||||
git checkout Initial &&
|
git checkout Initial &&
|
||||||
echo "Test 6" >>foo &&
|
echo "Test 6" >>foo &&
|
||||||
|
Loading…
Reference in New Issue
Block a user