git-resolve-scripton commit Merge with gitk --parents change. (9d34c29)
   1#!/bin/sh
   2#
   3# Copyright (c) 2005 Linus Torvalds
   4#
   5# Resolve two trees.
   6#
   7. git-sh-setup-script || die "Not a git archive"
   8
   9head=$(git-rev-parse --verify "$1"^0) || exit
  10merge=$(git-rev-parse --verify "$2"^0) || exit
  11merge_msg="$3"
  12
  13dropheads() {
  14        rm -f -- "$GIT_DIR/MERGE_HEAD" \
  15                "$GIT_DIR/LAST_MERGE" || exit 1
  16}
  17
  18#
  19# The remote name is just used for the message,
  20# but we do want it.
  21#
  22if [ -z "$head" -o -z "$merge" -o -z "$merge_msg" ]; then
  23        die "git-resolve-script <head> <remote> <merge-message>"
  24fi
  25
  26dropheads
  27echo $head > "$GIT_DIR"/ORIG_HEAD
  28echo $merge > "$GIT_DIR"/LAST_MERGE
  29
  30common=$(git-merge-base $head $merge)
  31if [ -z "$common" ]; then
  32        die "Unable to find common commit between" $merge $head
  33fi
  34
  35if [ "$common" == "$merge" ]; then
  36        echo "Already up-to-date. Yeeah!"
  37        dropheads
  38        exit 0
  39fi
  40if [ "$common" == "$head" ]; then
  41        echo "Updating from $head to $merge."
  42        git-read-tree -u -m $head $merge || exit 1
  43        echo $merge > "$GIT_DIR"/HEAD
  44        git-diff-tree -p $head $merge | git-apply --stat
  45        dropheads
  46        exit 0
  47fi
  48echo "Trying to merge $merge into $head"
  49git-read-tree -u -m $common $head $merge || exit 1
  50result_tree=$(git-write-tree  2> /dev/null)
  51if [ $? -ne 0 ]; then
  52        echo "Simple merge failed, trying Automatic merge"
  53        git-merge-cache -o git-merge-one-file-script -a
  54        if [ $? -ne 0 ]; then
  55                echo $merge > "$GIT_DIR"/MERGE_HEAD
  56                die "Automatic merge failed, fix up by hand"
  57        fi
  58        result_tree=$(git-write-tree) || exit 1
  59fi
  60result_commit=$(echo "$merge_msg" | git-commit-tree $result_tree -p $head -p $merge)
  61echo "Committed merge $result_commit"
  62echo $result_commit > "$GIT_DIR"/HEAD
  63git-diff-tree -p $head $result_commit | git-apply --stat
  64dropheads