1#!/bin/sh 2# 3# Copyright (c) 2005 Junio C Hamano 4# 5# Fetch one or more remote refs and merge it/them into the current HEAD. 6 7. git-sh-setup|| die "Not a git archive" 8 9usage () { 10echo>&2"usage:$0"' [-n] [--no-commit] [--no-summary] [--help] 11 [-s strategy]... 12 [<fetch-options>] 13 <repo> <head>... 14 15Fetch one or more remote refs and merge it/them into the current HEAD. 16' 17exit1 18} 19 20strategy_args= no_summary= no_commit= 21while case"$#,$1"in0)break;; *,-*) ;; *)break;;esac 22do 23case"$1"in 24-n|--n|--no|--no-|--no-s|--no-su|--no-sum|--no-summ|\ 25--no-summa|--no-summar|--no-summary) 26 no_summary=-n;; 27--no-c|--no-co|--no-com|--no-comm|--no-commi|--no-commit) 28 no_commit=--no-commit;; 29-s=*|--s=*|--st=*|--str=*|--stra=*|--strat=*|--strate=*|\ 30--strateg=*|--strategy=*|\ 31-s|--s|--st|--str|--stra|--strat|--strate|--strateg|--strategy) 32case"$#,$1"in 33*,*=*) 34 strategy=`expr "$1" : '-[^=]*=\(.*\)'`;; 351,*) 36 usage ;; 37*) 38 strategy="$2" 39shift;; 40esac 41 strategy_args="${strategy_args}-s$strategy" 42;; 43-h|--h|--he|--hel|--help) 44 usage 45;; 46-*) 47# Pass thru anything that is meant for fetch. 48break 49;; 50esac 51shift 52done 53 54orig_head=$(git-rev-parse --verify HEAD)|| die "Pulling into a black hole?" 55git-fetch --update-head-ok"$@"||exit1 56 57curr_head=$(git-rev-parse --verify HEAD) 58iftest"$curr_head"!="$orig_head" 59then 60# The fetch involved updating the current branch. 61 62# The working tree and the index file is still based on the 63# $orig_head commit, but we are merging into $curr_head. 64# First update the working tree to match $curr_head. 65 66echo>&2"Warning: fetch updated the current branch head." 67echo>&2"Warning: fast forwarding your working tree." 68 git-read-tree -u -m"$orig_head""$curr_head"|| 69 die "You need to first update your working tree." 70fi 71 72merge_head=$(sed-e'/ not-for-merge /d' \ 73-e's/ .*//'"$GIT_DIR"/FETCH_HEAD | \ 74tr'\012'' ') 75 76case"$merge_head"in 77'') 78echo>&2"No changes." 79exit0 80;; 81?*' '?*) 82 var=`git-var -l | sed -ne 's/^pull\.octopus=/-s /p'` 83iftest''="$var" 84then 85 strategy_default_args='-s octopus' 86else 87 strategy_default_args=$var 88fi 89;; 90*) 91 var=`git-var -l | sed -ne 's/^pull\.twohead=/-s /p'` 92iftest''="$var" 93then 94 strategy_default_args='-s recursive' 95else 96 strategy_default_args=$var 97fi 98;; 99esac 100 101case"$strategy_args"in 102'') 103 strategy_args=$strategy_default_args 104;; 105esac 106 107merge_name=$(git-fmt-merge-msg <"$GIT_DIR/FETCH_HEAD") 108git-merge$no_summary $no_commit $strategy_args"$merge_name" HEAD $merge_head