summary | shortlog | log | commit | commitdiff | tree
raw | patch | inline | side by side (parent: e135554)
raw | patch | inline | side by side (parent: e135554)
author | Junio C Hamano <junkio@cox.net> | |
Tue, 29 Nov 2005 21:53:30 +0000 (13:53 -0800) | ||
committer | Junio C Hamano <junkio@cox.net> | |
Tue, 29 Nov 2005 22:18:27 +0000 (14:18 -0800) |
This matches the 3-way fallback used by applypatch to use
per-blob "index" lines, not "applies-to" tree object name, to
match what git-am does.
Signed-off-by: Junio C Hamano <junkio@cox.net>
per-blob "index" lines, not "applies-to" tree object name, to
match what git-am does.
Signed-off-by: Junio C Hamano <junkio@cox.net>
git-applypatch.sh | patch | blob | history |
diff --git a/git-applypatch.sh b/git-applypatch.sh
index f0549960fbd706f06fff5b2c602450917505a1ad..4c577eb835b877dd0766edbc5a603ee4e3db049a 100755 (executable)
--- a/git-applypatch.sh
+++ b/git-applypatch.sh
O_OBJECT=`cd "$GIT_OBJECT_DIRECTORY" && pwd`
rm -fr .patch-merge-*
+ if git-apply -z --index-info "$PATCHFILE" \
+ >.patch-merge-index-info 2>/dev/null &&
+ GIT_INDEX_FILE=.patch-merge-tmp-index \
+ git-update-index -z --index-info <.patch-merge-index-info &&
+ GIT_INDEX_FILE=.patch-merge-tmp-index \
+ git-write-tree >.patch-merge-tmp-base &&
+ (
+ mkdir .patch-merge-tmp-dir &&
+ cd .patch-merge-tmp-dir &&
+ GIT_INDEX_FILE="../.patch-merge-tmp-index" \
+ GIT_OBJECT_DIRECTORY="$O_OBJECT" \
+ git-apply $binary --index
+ ) <"$PATCHFILE"
+ then
+ echo Using index info to reconstruct a base tree...
+ mv .patch-merge-tmp-base .patch-merge-base
+ mv .patch-merge-tmp-index .patch-merge-index
+ else
(
N=10
- # if the patch records the base tree...
- sed -ne '
- /^diff /q
- /^applies-to: \([0-9a-f]*\)$/{
- s//\1/p
- q
- }
- ' "$PATCHFILE"
-
- # or hoping the patch is against our recent commits...
+ # Otherwise, try nearby trees that can be used to apply the
+ # patch.
git-rev-list --max-count=$N HEAD
# or hoping the patch is against known tags...
git-ls-remote --tags .
) |
- while read base junk
- do
+ while read base junk
+ do
# Try it if we have it as a tree.
git-cat-file tree "$base" >/dev/null 2>&1 || continue
mv ../.patch-merge-tmp-index ../.patch-merge-index &&
echo "$base" >../.patch-merge-base
) <"$PATCHFILE" 2>/dev/null && break
- done
+ done
+ fi
test -f .patch-merge-index &&
his_tree=$(GIT_INDEX_FILE=.patch-merge-index git-write-tree) &&