Skip to content

Commit

Permalink
git-am: give better diagnostics when the patch does not apply during …
Browse files Browse the repository at this point in the history
…--3way

If the user tries to apply a patch that was hand-edited in such
a way that it does not apply to the original file recorded on
its "index" line anymore, we did detect the situation but did
not issue an error message that is specific enough.

Signed-off-by: Junio C Hamano <junkio@cox.net>
  • Loading branch information
Junio C Hamano committed Aug 13, 2006
1 parent 022f25e commit fd7bcfb
Showing 1 changed file with 19 additions and 9 deletions.
28 changes: 19 additions & 9 deletions git-am.sh
Original file line number Diff line number Diff line change
Expand Up @@ -45,26 +45,36 @@ go_next () {
this=$next
}

cannot_fallback () {
echo "$1"
echo "Cannot fall back to three-way merge."
exit 1
}

fall_back_3way () {
O_OBJECT=`cd "$GIT_OBJECT_DIRECTORY" && pwd`

rm -fr "$dotest"/patch-merge-*
mkdir "$dotest/patch-merge-tmp-dir"

# First see if the patch records the index info that we can use.
if git-apply -z --index-info "$dotest/patch" \
>"$dotest/patch-merge-index-info" 2>/dev/null &&
GIT_INDEX_FILE="$dotest/patch-merge-tmp-index" \
git-update-index -z --index-info <"$dotest/patch-merge-index-info" &&
GIT_INDEX_FILE="$dotest/patch-merge-tmp-index" \
git-write-tree >"$dotest/patch-merge-base+" &&
# index has the base tree now.
GIT_INDEX_FILE="$dotest/patch-merge-tmp-index" \
git-apply -z --index-info "$dotest/patch" \
>"$dotest/patch-merge-index-info" &&
GIT_INDEX_FILE="$dotest/patch-merge-tmp-index" \
git-update-index -z --index-info <"$dotest/patch-merge-index-info" &&
GIT_INDEX_FILE="$dotest/patch-merge-tmp-index" \
git-write-tree >"$dotest/patch-merge-base+" ||
cannot_fallback "Patch does not record usable index information."

echo Using index info to reconstruct a base tree...
if GIT_INDEX_FILE="$dotest/patch-merge-tmp-index" \
git-apply $binary --cached <"$dotest/patch"
then
echo Using index info to reconstruct a base tree...
mv "$dotest/patch-merge-base+" "$dotest/patch-merge-base"
mv "$dotest/patch-merge-tmp-index" "$dotest/patch-merge-index"
else
cannot_fallback "Did you hand edit your patch?
It does not apply to blobs recorded in its index."
fi

test -f "$dotest/patch-merge-index" &&
Expand Down

0 comments on commit fd7bcfb

Please sign in to comment.