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