Browse Source

Merge branch 'ph/stash-rerere'

"git stash" internally used "git merge-recursive" backend, which did
not trigger "rerere" upon conflicts unlike other mergy operations.

* ph/stash-rerere:
  stash: invoke rerere in case of conflict
  test: git-stash conflict sets up rerere
maint
Junio C Hamano 12 years ago
parent
commit
799beac153
  1. 1
      git-stash.sh
  2. 38
      t/t7610-mergetool.sh

1
git-stash.sh

@ -469,6 +469,7 @@ apply_stash () { @@ -469,6 +469,7 @@ apply_stash () {
else
# Merge conflict; keep the exit status from merge-recursive
status=$?
git rerere
if test -n "$INDEX_OPTION"
then
gettextln "Index was not unstashed." >&2

38
t/t7610-mergetool.sh

@ -55,6 +55,16 @@ test_expect_success 'setup' ' @@ -55,6 +55,16 @@ test_expect_success 'setup' '
git rm file12 &&
git commit -m "branch1 changes" &&

git checkout -b stash1 master &&
echo stash1 change file11 >file11 &&
git add file11 &&
git commit -m "stash1 changes" &&

git checkout -b stash2 master &&
echo stash2 change file11 >file11 &&
git add file11 &&
git commit -m "stash2 changes" &&

git checkout master &&
git submodule update -N &&
echo master updated >file1 &&
@ -193,7 +203,35 @@ test_expect_success 'mergetool skips resolved paths when rerere is active' ' @@ -193,7 +203,35 @@ test_expect_success 'mergetool skips resolved paths when rerere is active' '
git reset --hard
'

test_expect_success 'conflicted stash sets up rerere' '
git config rerere.enabled true &&
git checkout stash1 &&
echo "Conflicting stash content" >file11 &&
git stash &&

git checkout --detach stash2 &&
test_must_fail git stash apply &&

test -n "$(git ls-files -u)" &&
conflicts="$(git rerere remaining)" &&
test "$conflicts" = "file11" &&
output="$(git mergetool --no-prompt)" &&
test "$output" != "No files need merging" &&

git commit -am "save the stash resolution" &&

git reset --hard stash2 &&
test_must_fail git stash apply &&

test -n "$(git ls-files -u)" &&
conflicts="$(git rerere remaining)" &&
test -z "$conflicts" &&
output="$(git mergetool --no-prompt)" &&
test "$output" = "No files need merging"
'

test_expect_success 'mergetool takes partial path' '
git reset --hard
git config rerere.enabled false &&
git checkout -b test12 branch1 &&
git submodule update -N &&

Loading…
Cancel
Save