mirror of
https://github.com/git/git
synced 2024-08-27 11:39:22 +00:00
![Junio C Hamano](/assets/img/avatar_default.png)
This adds more cruft to diff --git header to record the blob SHA1 and the mode the patch/diff is intended to be applied against, to help the receiving end fall back on a three-way merge. The new header looks like this: diff --git a/apply.c b/apply.c index 7be5041..8366082 100644 --- a/apply.c +++ b/apply.c @@ -14,6 +14,7 @@ // files that are being modified, but doesn't apply the patch // --stat does just a diffstat, and doesn't actually apply +// --show-index-info shows the old and new index info for... ... Upon receiving such a patch, if the patch did not apply cleanly to the target tree, the recipient can try to find the matching old objects in her object database and create a temporary tree, apply the patch to that temporary tree, and attempt a 3-way merge between the patched temporary tree and the target tree using the original temporary tree as the common ancestor. The patch lifts the code to compute the hash for an on-filesystem object from update-index.c and makes it available to the diff output routine. Signed-off-by: Junio C Hamano <junkio@cox.net>
68 lines
1.5 KiB
Bash
Executable file
68 lines
1.5 KiB
Bash
Executable file
#!/bin/sh
|
|
#
|
|
# Copyright (c) 2005 Junio C Hamano
|
|
#
|
|
|
|
test_description='More rename detection tests.
|
|
|
|
The rename detection logic should be able to detect pure rename or
|
|
copy of symbolic links, but should not produce rename/copy followed
|
|
by an edit for them.
|
|
'
|
|
. ./test-lib.sh
|
|
. ../diff-lib.sh
|
|
|
|
test_expect_success \
|
|
'prepare reference tree' \
|
|
'echo xyzzy | tr -d '\\\\'012 >yomin &&
|
|
ln -s xyzzy frotz &&
|
|
git-update-index --add frotz yomin &&
|
|
tree=$(git-write-tree) &&
|
|
echo $tree'
|
|
|
|
test_expect_success \
|
|
'prepare work tree' \
|
|
'mv frotz rezrov &&
|
|
rm -f yomin &&
|
|
ln -s xyzzy nitfol &&
|
|
ln -s xzzzy bozbar &&
|
|
git-update-index --add --remove frotz rezrov nitfol bozbar yomin'
|
|
|
|
# tree has frotz pointing at xyzzy, and yomin that contains xyzzy to
|
|
# confuse things. work tree has rezrov (xyzzy) nitfol (xyzzy) and
|
|
# bozbar (xzzzy).
|
|
# rezrov and nitfol are rename/copy of frotz and bozbar should be
|
|
# a new creation.
|
|
|
|
GIT_DIFF_OPTS=--unified=0 git-diff-index -M -p $tree >current
|
|
cat >expected <<\EOF
|
|
diff --git a/bozbar b/bozbar
|
|
new file mode 120000
|
|
--- /dev/null
|
|
+++ b/bozbar
|
|
@@ -0,0 +1 @@
|
|
+xzzzy
|
|
\ No newline at end of file
|
|
diff --git a/frotz b/nitfol
|
|
similarity index 100%
|
|
copy from frotz
|
|
copy to nitfol
|
|
diff --git a/frotz b/rezrov
|
|
similarity index 100%
|
|
rename from frotz
|
|
rename to rezrov
|
|
diff --git a/yomin b/yomin
|
|
deleted file mode 100644
|
|
--- a/yomin
|
|
+++ /dev/null
|
|
@@ -1 +0,0 @@
|
|
-xyzzy
|
|
\ No newline at end of file
|
|
EOF
|
|
|
|
test_expect_success \
|
|
'validate diff output' \
|
|
'compare_diff_patch current expected'
|
|
|
|
test_done
|