diff options
author | Junio C Hamano <junkio@cox.net> | 2005-11-29 13:53:30 -0800 |
---|---|---|
committer | Junio C Hamano <junkio@cox.net> | 2005-11-29 14:18:27 -0800 |
commit | bf3e274873e56d7df25d60800c8d59a309e0d8c6 (patch) | |
tree | 5f88497d70e46deae510f545b37784e9172bea12 | |
parent | e1355547fd30b21fbdc3fe4e576759683777c4ce (diff) | |
download | git-bf3e274873e56d7df25d60800c8d59a309e0d8c6.tar.gz git-bf3e274873e56d7df25d60800c8d59a309e0d8c6.tar.xz |
applypatch: use "index" lines not "applies-to".
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>
-rwxr-xr-x | git-applypatch.sh | 37 |
1 files changed, 24 insertions, 13 deletions
diff --git a/git-applypatch.sh b/git-applypatch.sh index f0549960f..4c577eb83 100755 --- a/git-applypatch.sh +++ b/git-applypatch.sh @@ -120,26 +120,36 @@ git-apply --index "$PATCHFILE" || { 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 @@ -155,7 +165,8 @@ git-apply --index "$PATCHFILE" || { 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) && |