git-commit-vandalism/git-resolve-script
Linus Torvalds 40d8cfe411 Trivial git script fixups
Fix permissions, and add trivial "reset" and "add" scripts.

The "reset" script just resets the index back to head, while the "add"
script is just a crutch for people used to do "cvs add".
2005-06-14 18:56:05 -07:00

62 lines
1.6 KiB
Bash
Executable File

#!/bin/sh
#
# Copyright (c) 2005 Linus Torvalds
#
# Resolve two trees.
#
head="$1"
merge="$2"
merge_repo="$3"
: ${GIT_DIR=.git}
: ${GIT_OBJECT_DIRECTORY="${SHA1_FILE_DIRECTORY-"$GIT_DIR/objects"}"}
rm -f "$GIT_DIR"/MERGE_HEAD "$GIT_DIR"/ORIG_HEAD
echo $head > "$GIT_DIR"/ORIG_HEAD
echo $merge > "$GIT_DIR"/MERGE_HEAD
#
# The remote name is just used for the message,
# but we do want it.
#
if [ "$merge_repo" == "" ]; then
echo "git-resolve-script <head> <remote> <merge-repo-name>"
exit 1
fi
common=$(git-merge-base $head $merge)
if [ -z "$common" ]; then
echo "Unable to find common commit between" $merge $head
exit 1
fi
if [ "$common" == "$merge" ]; then
echo "Already up-to-date. Yeeah!"
exit 0
fi
if [ "$common" == "$head" ]; then
echo "Updating from $head to $merge."
git-read-tree -u -m $head $merge || exit 1
echo $merge > "$GIT_DIR"/HEAD
git-diff-tree -p ORIG_HEAD HEAD | git-apply --stat
exit 0
fi
echo "Trying to merge $merge into $head"
git-read-tree -u -m $common $head $merge || exit 1
merge_msg="Merge $merge_repo"
result_tree=$(git-write-tree 2> /dev/null)
if [ $? -ne 0 ]; then
echo "Simple merge failed, trying Automatic merge"
git-merge-cache -o git-merge-one-file-script -a
if [ $? -ne 0 ]; then
echo "Automatic merge failed, fix up by hand"
exit 1
fi
result_tree=$(git-write-tree) || exit 1
fi
result_commit=$(echo "$merge_msg" | git-commit-tree $result_tree -p $head -p $merge)
echo "Committed merge $result_commit"
echo $result_commit > "$GIT_DIR"/HEAD
git-diff-tree -p $head $result_commit | git-apply --stat
rm $GIT_DIR/ORIG_HEAD $GIT_DIR/MERGE_HEAD