diff options
author | Junio C Hamano <junkio@cox.net> | 2005-10-02 11:13:44 -0700 |
---|---|---|
committer | Junio C Hamano <junkio@cox.net> | 2005-10-02 11:13:44 -0700 |
commit | f9d72413bcbf33ced45f12e17ef156abd73963f6 (patch) | |
tree | 86dba3737d5e0b583d7438c927db9e95b632ab68 | |
parent | 23822a355de674f1d1321ad7e112f0fe40124aca (diff) | |
download | git-f9d72413bcbf33ced45f12e17ef156abd73963f6.tar.gz git-f9d72413bcbf33ced45f12e17ef156abd73963f6.tar.xz |
Handle really trivial case inside git-merge.
Using Linus' --trivial option, this handles really trivial case
inside git-merge itself, without using any strategy modules.
A 'really trivial case' is:
- we are merging one branch into the current branch;
- there is only one merge base between the branches;
- there is no file-level merge required.
Signed-off-by: Junio C Hamano <junkio@cox.net>
-rwxr-xr-x | git-merge.sh | 22 |
1 files changed, 21 insertions, 1 deletions
diff --git a/git-merge.sh b/git-merge.sh index 29e86c695..d12a2a93b 100755 --- a/git-merge.sh +++ b/git-merge.sh @@ -123,10 +123,30 @@ case "$#,$common" in dropsave exit 0 ;; -1,*) +1,?*"$LF"?*) # We are not doing octopus and not fast forward. Need a # real merge. ;; +1,*) + # We are not doing octopus, not fast forward, and have only + # one common. See if it is really trivial. + echo "Trying really trivial in-index merge..." + git-update-index --refresh 2>/dev/null + if git-read-tree --trivial -m -u $common $head "$1" && + result_tree=$(git-write-tree) + then + echo "Wonderful." + result_commit=$( + echo "$merge_msg" | + git-commit-tree $result_tree -p HEAD -p "$1" + ) || exit + git-update-ref HEAD $result_commit $head + summary $result_commit + dropsave + exit 0 + fi + echo "Nope." + ;; *) # An octopus. If we can reach all the remote we are up to date. up_to_date=t |