From: Junio C Hamano Date: Mon, 12 Mar 2012 22:43:06 +0000 (-0700) Subject: Merge branch 'jc/am-3-nonstandard-popt' into maint X-Git-Tag: v1.7.9.4~4 X-Git-Url: https://git.lorimer.id.au/gitweb.git/diff_plain/b91a13bbdca0095b1dc9ffb06bcb5caf4aab56b6?ds=inline;hp=-c Merge branch 'jc/am-3-nonstandard-popt' into maint The code to synthesize the fake ancestor tree used by 3-way merge fallback in "git am" was not prepared to read a patch created with a non-standard -p value. * jc/am-3-nonstandard-popt: test: "am -3" can accept non-standard -p am -3: allow nonstandard -p option --- b91a13bbdca0095b1dc9ffb06bcb5caf4aab56b6 diff --combined git-am.sh index f43a75b04b,d5d168fc51..cb833e217a --- a/git-am.sh +++ b/git-am.sh @@@ -127,15 -127,18 +127,18 @@@ fall_back_3way () mkdir "$dotest/patch-merge-tmp-dir" # First see if the patch records the index info that we can use. - git apply --build-fake-ancestor "$dotest/patch-merge-tmp-index" \ - "$dotest/patch" && + cmd="git apply $git_apply_opt --build-fake-ancestor" && + cmd="$cmd "'"$dotest/patch-merge-tmp-index" "$dotest/patch"' && + eval "$cmd" && GIT_INDEX_FILE="$dotest/patch-merge-tmp-index" \ git write-tree >"$dotest/patch-merge-base+" || cannot_fallback "$(gettext "Repository lacks necessary blobs to fall back on 3-way merge.")" say Using index info to reconstruct a base tree... - if GIT_INDEX_FILE="$dotest/patch-merge-tmp-index" \ - git apply --cached <"$dotest/patch" + + cmd='GIT_INDEX_FILE="$dotest/patch-merge-tmp-index"' + cmd="$cmd git apply --cached $git_apply_opt"' <"$dotest/patch"' + if eval "$cmd" then mv "$dotest/patch-merge-base+" "$dotest/patch-merge-base" mv "$dotest/patch-merge-tmp-index" "$dotest/patch-merge-index" @@@ -201,7 -204,7 +204,7 @@@ check_patch_format () l1= while test -z "$l1" do - read l1 + read l1 || break done read l2 read l3 diff --combined t/t4150-am.sh index 00d669a3c9,e1d381c43b..658354a6ce --- a/t/t4150-am.sh +++ b/t/t4150-am.sh @@@ -123,6 -123,7 +123,7 @@@ test_expect_success setup git commit -m "added another file" && git format-patch --stdout master >lorem-move.patch && + git format-patch --no-prefix --stdout master >lorem-zero.patch && git checkout -b rename && git mv file renamed && @@@ -136,7 -137,7 +137,7 @@@ git format-patch -M --stdout lorem^ >rename-add.patch && # reset time - unset test_tick && + sane_unset test_tick && test_tick ' @@@ -276,6 -277,20 +277,20 @@@ test_expect_success 'am -3 falls back t git diff --exit-code lorem ' + test_expect_success 'am -3 -p0 can read --no-prefix patch' ' + rm -fr .git/rebase-apply && + git reset --hard && + git checkout -b lorem3 master2 && + sed -n -e "3,\$p" msg >file && + head -n 9 msg >>file && + git add file && + test_tick && + git commit -m "copied stuff" && + git am -3 -p0 lorem-zero.patch && + ! test -d .git/rebase-apply && + git diff --exit-code lorem + ' + test_expect_success 'am can rename a file' ' grep "^rename from" rename.patch && rm -fr .git/rebase-apply && @@@ -495,14 -510,4 +510,14 @@@ test_expect_success 'am -q is quiet' ! test -s output.out ' +test_expect_success 'am empty-file does not infloop' ' + rm -fr .git/rebase-apply && + git reset --hard && + touch empty-file && + test_tick && + { git am empty-file > actual 2>&1 && false || :; } && + echo Patch format detection failed. >expected && + test_cmp expected actual +' + test_done