diff options
author | Junio C Hamano <junkio@cox.net> | 2007-01-14 22:00:02 -0800 |
---|---|---|
committer | Junio C Hamano <junkio@cox.net> | 2007-01-14 22:00:34 -0800 |
commit | acb4441e0dabaaa666ecae11fdafc27c3691e763 (patch) | |
tree | 817c8d77b06c1561672221b90800de115b171bc0 | |
parent | Documentation: merge-output is not too verbose now. (diff) | |
download | tgif-acb4441e0dabaaa666ecae11fdafc27c3691e763.tar.xz |
Use merge-recursive in git-revert/git-cherry-pick
This makes revert and cherry-pick to use merge-recursive, to
allow them to notice renames. A pair of test scripts
demonstrate that an old change before a rename happened can be
applied (reverted) after a rename with cherry-pick (with revert).
Signed-off-by: Junio C Hamano <junkio@cox.net>
-rwxr-xr-x | git-revert.sh | 29 | ||||
-rwxr-xr-x | t/t3501-revert-cherry-pick.sh | 62 |
2 files changed, 74 insertions, 17 deletions
diff --git a/git-revert.sh b/git-revert.sh index 71cbcbc2b8..c74af99a51 100755 --- a/git-revert.sh +++ b/git-revert.sh @@ -151,32 +151,27 @@ esac >.msg # and $prev on top of us (when reverting), or the change between # $prev and $commit on top of us (when cherry-picking or replaying). -echo >&2 "First trying simple merge strategy to $me." -git-read-tree -m -u --aggressive $base $head $next && +git-merge-recursive $base -- $head $next && result=$(git-write-tree 2>/dev/null) || { - echo >&2 "Simple $me fails; trying Automatic $me." - git-merge-index -o git-merge-one-file -a || { - mv -f .msg "$GIT_DIR/MERGE_MSG" - { - echo ' + mv -f .msg "$GIT_DIR/MERGE_MSG" + { + echo ' Conflicts: ' git ls-files --unmerged | sed -e 's/^[^ ]* / /' | uniq - } >>"$GIT_DIR/MERGE_MSG" - echo >&2 "Automatic $me failed. After resolving the conflicts," - echo >&2 "mark the corrected paths with 'git-add <paths>'" - echo >&2 "and commit the result." - case "$me" in - cherry-pick) + } >>"$GIT_DIR/MERGE_MSG" + echo >&2 "Automatic $me failed. After resolving the conflicts," + echo >&2 "mark the corrected paths with 'git-add <paths>'" + echo >&2 "and commit the result." + case "$me" in + cherry-pick) echo >&2 "You may choose to use the following when making" echo >&2 "the commit:" echo >&2 "$set_author_env" - esac - exit 1 - } - result=$(git-write-tree) || exit + esac + exit 1 } echo >&2 "Finished one $me." diff --git a/t/t3501-revert-cherry-pick.sh b/t/t3501-revert-cherry-pick.sh new file mode 100755 index 0000000000..552af1c4d2 --- /dev/null +++ b/t/t3501-revert-cherry-pick.sh @@ -0,0 +1,62 @@ +#!/bin/sh + +test_description='test cherry-pick and revert with renames + + -- + + rename2: renames oops to opos + + rename1: renames oops to spoo + + added: adds extra line to oops + ++ initial: has lines in oops + +' + +. ./test-lib.sh + +test_expect_success setup ' + + for l in a b c d e f g h i j k l m n o + do + echo $l$l$l$l$l$l$l$l$l + done >oops && + + test_tick && + git add oops && + git commit -m initial && + git tag initial && + + test_tick && + echo "Add extra line at the end" >>oops && + git commit -a -m added && + git tag added && + + test_tick && + git mv oops spoo && + git commit -m rename1 && + git tag rename1 && + + test_tick && + git checkout -b side initial && + git mv oops opos && + git commit -m rename2 && + git tag rename2 +' + +test_expect_success 'cherry-pick after renaming branch' ' + + git checkout rename2 && + EDITOR=: VISUAL=: git cherry-pick added && + test -f opos && + grep "Add extra line at the end" opos + +' + +test_expect_success 'revert after renaming branch' ' + + git checkout rename1 && + EDITOR=: VISUAL=: git revert added && + test -f spoo && + ! grep "Add extra line at the end" spoo + +' + +test_done |