mkdir "$dotest/patch-merge-tmp-dir"
# First see if the patch records the index info that we can use.
- if git-apply --show-index-info "$dotest/patch" \
+ 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 --index-info <"$dotest/patch-merge-index-info" &&
+ 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.
echo "$sign" >"$dotest/sign"
echo "$utf8" >"$dotest/utf8"
echo "$keep" >"$dotest/keep"
- echo "$threeway" >"$dotest/3way"
echo 1 >"$dotest/next"
fi
else
SIGNOFF=
fi
-threeway=$(cat "$dotest/3way")
last=`cat "$dotest/last"`
this=`cat "$dotest/next"`
GIT_AUTHOR_EMAIL="$(sed -n '/^Email/ s/Email: //p' "$dotest/info")"
GIT_AUTHOR_DATE="$(sed -n '/^Date/ s/Date: //p' "$dotest/info")"
SUBJECT="$(sed -n '/^Subject/ s/Subject: //p' "$dotest/info")"
+ export GIT_AUTHOR_NAME GIT_AUTHOR_EMAIL GIT_AUTHOR_DATE
case "$keep_subject" in -k) SUBJECT="[PATCH] $SUBJECT" ;; esac
if test '' != "$SIGNOFF"
if test "$interactive" = t
then
+ test -t 0 ||
+ die "cannot be interactive without stdin connected to a terminal."
action=again
while test "$action" = again
do
git-apply --index "$dotest/patch"; apply_status=$?
if test $apply_status = 1 && test "$threeway" = t
then
- (fall_back_3way) || stop_here $this
-
- # Applying the patch to an earlier tree and merging the
- # result may have produced the same tree as ours.
- if test '' = "$(git-diff-index --cached --name-only -z HEAD)"
+ if (fall_back_3way)
then
- echo No changes -- Patch already applied.
- go_next
- continue
+ # Applying the patch to an earlier tree and merging the
+ # result may have produced the same tree as ours.
+ changed="$(git-diff-index --cached --name-only -z HEAD)"
+ if test '' = "$changed"
+ then
+ echo No changes -- Patch already applied.
+ go_next
+ continue
+ fi
+ # clear apply_status -- we have successfully merged.
+ apply_status=0
fi
fi
if test $apply_status != 0