Commit | Line | Data |
---|---|---|
67cc5c4e LT |
1 | #!/bin/sh |
2 | # | |
8ac069ac JH |
3 | # Copyright (c) 2005 Linus Torvalds |
4 | # | |
67cc5c4e LT |
5 | # Resolve two trees. |
6 | # | |
7 | head="$1" | |
8 | merge="$2" | |
9 | merge_repo="$3" | |
10 | ||
8ac069ac JH |
11 | : ${GIT_DIR=.git} |
12 | : ${GIT_OBJECT_DIRECTORY="${SHA1_FILE_DIRECTORY-"$GIT_DIR/objects"}"} | |
13 | ||
14 | rm -f "$GIT_DIR"/MERGE_HEAD "$GIT_DIR"/ORIG_HEAD | |
15 | echo $head > "$GIT_DIR"/ORIG_HEAD | |
16 | echo $merge > "$GIT_DIR"/MERGE_HEAD | |
67cc5c4e LT |
17 | |
18 | # | |
19 | # The remote name is just used for the message, | |
20 | # but we do want it. | |
21 | # | |
22 | if [ "$merge_repo" == "" ]; then | |
23 | echo "git-resolve-script <head> <remote> <merge-repo-name>" | |
24 | exit 1 | |
25 | fi | |
26 | ||
27 | common=$(git-merge-base $head $merge) | |
28 | if [ -z "$common" ]; then | |
29 | echo "Unable to find common commit between" $merge $head | |
30 | exit 1 | |
31 | fi | |
32 | ||
33 | if [ "$common" == "$merge" ]; then | |
34 | echo "Already up-to-date. Yeeah!" | |
35 | exit 0 | |
36 | fi | |
37 | if [ "$common" == "$head" ]; then | |
38 | echo "Updating from $head to $merge." | |
220a0b52 | 39 | git-read-tree -u -m $head $merge || exit 1 |
8ac069ac | 40 | echo $merge > "$GIT_DIR"/HEAD |
866b973b | 41 | git-diff-tree -p ORIG_HEAD HEAD | git-apply --stat |
67cc5c4e LT |
42 | exit 0 |
43 | fi | |
44 | echo "Trying to merge $merge into $head" | |
220a0b52 | 45 | git-read-tree -u -m $common $head $merge || exit 1 |
5b1ea09d | 46 | merge_msg="Merge $merge_repo" |
67cc5c4e LT |
47 | result_tree=$(git-write-tree 2> /dev/null) |
48 | if [ $? -ne 0 ]; then | |
49 | echo "Simple merge failed, trying Automatic merge" | |
e5b905c4 LT |
50 | git-merge-cache -o git-merge-one-file-script -a |
51 | if [ $? -ne 0 ]; then | |
52 | echo "Automatic merge failed, fix up by hand" | |
53 | exit 1 | |
54 | fi | |
67cc5c4e LT |
55 | result_tree=$(git-write-tree) || exit 1 |
56 | fi | |
d5a72fd6 | 57 | result_commit=$(echo "$merge_msg" | git-commit-tree $result_tree -p $head -p $merge) |
67cc5c4e | 58 | echo "Committed merge $result_commit" |
8ac069ac | 59 | echo $result_commit > "$GIT_DIR"/HEAD |
866b973b | 60 | git-diff-tree -p ORIG_HEAD HEAD | git-apply --stat |