Skip to content
Snippets Groups Projects
Select Git revision
  • v1.0rc3
  • passt default
  • master
  • pu
  • todo
  • next
  • maint
  • v2.8.0-rc1
  • v2.8.0-rc0
  • v2.7.2
  • v2.7.1
  • v2.7.0
  • v2.6.5
  • v2.7.0-rc3
  • v2.7.0-rc2
  • v2.7.0-rc1
  • v2.7.0-rc0
  • v2.6.4
  • v2.6.3
  • v2.6.2
  • v2.6.1
  • v2.3.10
  • v2.5.4
  • v2.4.10
  • v2.6.0
  • v2.6.0-rc3
  • v2.5.3
27 results

check-ref-format.c

Blame
  • git-octopus.sh 2.20 KiB
    #!/bin/sh
    #
    # Copyright (c) 2005 Junio C Hamano
    #
    # Resolve two or more trees recorded in $GIT_DIR/FETCH_HEAD.
    #
    . git-sh-setup || die "Not a git archive"
    
    usage () {
        die "usage: git octopus"
    }
    
    # Sanity check the heads early.
    while read SHA1 REPO
    do
    	test $(git-cat-file -t $SHA1) = "commit" ||
    		die "$REPO given to octopus is not a commit"
    done <"$GIT_DIR/FETCH_HEAD"
    
    head=$(git-rev-parse --verify HEAD) || exit
    
    git-update-index --refresh ||
    	die "Your working tree is dirty."
    test "$(git-diff-index --cached "$head")" = "" ||
    	die "Your working tree does not match HEAD."
    
    # MRC is the current "merge reference commit"
    # MRT is the current "merge result tree"
    
    MRC=$head PARENT="-p $head"
    MRT=$(git-write-tree)
    CNT=1 ;# counting our head
    NON_FF_MERGE=0
    while read SHA1 REPO
    do
    	common=$(git-merge-base $MRC $SHA1) ||
    		die "Unable to find common commit with $SHA1 from $REPO"
    
    	if test "$common" = $SHA1
    	then
    		echo "Already up-to-date: $REPO"
    		continue
    	fi
    
    	CNT=`expr $CNT + 1`
    	PARENT="$PARENT -p $SHA1"
    
    	if test "$common,$NON_FF_MERGE" = "$MRC,0"
    	then
    		# The first head being merged was a fast-forward.
    		# Advance MRC to the head being merged, and use that
    		# tree as the intermediate result of the merge.
    		# We still need to count this as part of the parent set.
    
    		echo "Fast forwarding to: $REPO"
    		git-read-tree -u -m $head $SHA1 || exit
    		MRC=$SHA1 MRT=$(git-write-tree)
    		continue
    	fi
    
    	NON_FF_MERGE=1
    
    	echo "Trying simple merge with $REPO"
    	git-read-tree -u -m $common $MRT $SHA1 || exit
    	next=$(git-write-tree 2>/dev/null)
    	if test $? -ne 0
    	then
    		echo "Simple merge did not work, trying automatic merge."
    		git-merge-index -o git-merge-one-file -a || {
    		git-read-tree --reset "$head"
    		git-checkout-index -f -q -u -a
    		die "Automatic merge failed; should not be doing Octopus"
    		}
    		next=$(git-write-tree 2>/dev/null)
    	fi
    	MRC=$common
    	MRT=$next
    done <"$GIT_DIR/FETCH_HEAD"
    
    # Just to be careful in case the user feeds nonsense to us.
    case "$CNT" in
    1)
    	echo "No changes."
    	exit 0 ;;
    esac
    result_commit=$(git-fmt-merge-msg <"$GIT_DIR/FETCH_HEAD" |
    		git-commit-tree $MRT $PARENT)
    echo "Committed merge $result_commit"
    git-update-ref HEAD $result_commit $head
    git-diff-tree -p $head $result_commit | git-apply --stat