Merge branch 'sd/stash-wo-user-name'
authorJunio C Hamano <gitster@pobox.com>
Thu, 3 Jan 2019 23:21:13 +0000 (15:21 -0800)
committerJunio C Hamano <gitster@pobox.com>
Fri, 4 Jan 2019 22:19:47 +0000 (14:19 -0800)
* sd/stash-wo-user-name:
stash: tolerate missing user identity

git-stash.sh
t/t3903-stash.sh
index 94793c1a913abf569ff9101d935c355b9eb27648..789ce2f41d4a3c6e88084412bcc2b7be6ae98526 100755 (executable)
@@ -55,6 +55,20 @@ untracked_files () {
        git ls-files -o $z $excl_opt -- "$@"
 }
 
+prepare_fallback_ident () {
+       if ! git -c user.useconfigonly=yes var GIT_COMMITTER_IDENT >/dev/null 2>&1
+       then
+               GIT_AUTHOR_NAME="git stash"
+               GIT_AUTHOR_EMAIL=git@stash
+               GIT_COMMITTER_NAME="git stash"
+               GIT_COMMITTER_EMAIL=git@stash
+               export GIT_AUTHOR_NAME
+               export GIT_AUTHOR_EMAIL
+               export GIT_COMMITTER_NAME
+               export GIT_COMMITTER_EMAIL
+       fi
+}
+
 clear_stash () {
        if test $# != 0
        then
@@ -67,6 +81,9 @@ clear_stash () {
 }
 
 create_stash () {
+
+       prepare_fallback_ident
+
        stash_msg=
        untracked=
        while test $# != 0
index cd216655b97b852eec963916e796d11d32eb976a..5f8272b6f94b513b250575c6e99e4f76d6b08e75 100755 (executable)
@@ -1096,4 +1096,32 @@ test_expect_success 'stash -- <subdir> works with binary files' '
        test_path_is_file subdir/untracked
 '
 
+test_expect_success 'stash works when user.name and user.email are not set' '
+       git reset &&
+       >1 &&
+       git add 1 &&
+       echo "$GIT_AUTHOR_NAME <$GIT_AUTHOR_EMAIL>" >expect &&
+       git stash &&
+       git show -s --format="%an <%ae>" refs/stash >actual &&
+       test_cmp expect actual &&
+       >2 &&
+       git add 2 &&
+       test_config user.useconfigonly true &&
+       test_config stash.usebuiltin true &&
+       (
+               sane_unset GIT_AUTHOR_NAME &&
+               sane_unset GIT_AUTHOR_EMAIL &&
+               sane_unset GIT_COMMITTER_NAME &&
+               sane_unset GIT_COMMITTER_EMAIL &&
+               test_unconfig user.email &&
+               test_unconfig user.name &&
+               test_must_fail git commit -m "should fail" &&
+               echo "git stash <git@stash>" >expect &&
+               >2 &&
+               git stash &&
+               git show -s --format="%an <%ae>" refs/stash >actual &&
+               test_cmp expect actual
+       )
+'
+
 test_done