mirror of
https://github.com/git/git
synced 2024-10-30 04:01:21 +00:00
ae2b0f1518
Now all the users of this script detect its exit status and die, complaining that it is outside git repository. So move the code that dies from all callers to git-sh-setup script. Signed-off-by: Junio C Hamano <junkio@cox.net>
108 lines
2.5 KiB
Bash
Executable file
108 lines
2.5 KiB
Bash
Executable file
#!/bin/sh
|
|
#
|
|
# Copyright (c) 2005 Junio C Hamano
|
|
#
|
|
# Fetch one or more remote refs and merge it/them into the current HEAD.
|
|
|
|
. git-sh-setup
|
|
|
|
usage () {
|
|
echo >&2 "usage: $0"' [-n] [--no-commit] [--no-summary] [--help]
|
|
[-s strategy]...
|
|
[<fetch-options>]
|
|
<repo> <head>...
|
|
|
|
Fetch one or more remote refs and merge it/them into the current HEAD.
|
|
'
|
|
exit 1
|
|
}
|
|
|
|
strategy_args= no_summary= no_commit=
|
|
while case "$#,$1" in 0) break ;; *,-*) ;; *) break ;; esac
|
|
do
|
|
case "$1" in
|
|
-n|--n|--no|--no-|--no-s|--no-su|--no-sum|--no-summ|\
|
|
--no-summa|--no-summar|--no-summary)
|
|
no_summary=-n ;;
|
|
--no-c|--no-co|--no-com|--no-comm|--no-commi|--no-commit)
|
|
no_commit=--no-commit ;;
|
|
-s=*|--s=*|--st=*|--str=*|--stra=*|--strat=*|--strate=*|\
|
|
--strateg=*|--strategy=*|\
|
|
-s|--s|--st|--str|--stra|--strat|--strate|--strateg|--strategy)
|
|
case "$#,$1" in
|
|
*,*=*)
|
|
strategy=`expr "$1" : '-[^=]*=\(.*\)'` ;;
|
|
1,*)
|
|
usage ;;
|
|
*)
|
|
strategy="$2"
|
|
shift ;;
|
|
esac
|
|
strategy_args="${strategy_args}-s $strategy "
|
|
;;
|
|
-h|--h|--he|--hel|--help)
|
|
usage
|
|
;;
|
|
-*)
|
|
# Pass thru anything that is meant for fetch.
|
|
break
|
|
;;
|
|
esac
|
|
shift
|
|
done
|
|
|
|
orig_head=$(git-rev-parse --verify HEAD) || die "Pulling into a black hole?"
|
|
git-fetch --update-head-ok "$@" || exit 1
|
|
|
|
curr_head=$(git-rev-parse --verify HEAD)
|
|
if test "$curr_head" != "$orig_head"
|
|
then
|
|
# The fetch involved updating the current branch.
|
|
|
|
# The working tree and the index file is still based on the
|
|
# $orig_head commit, but we are merging into $curr_head.
|
|
# First update the working tree to match $curr_head.
|
|
|
|
echo >&2 "Warning: fetch updated the current branch head."
|
|
echo >&2 "Warning: fast forwarding your working tree."
|
|
git-read-tree -u -m "$orig_head" "$curr_head" ||
|
|
die "You need to first update your working tree."
|
|
fi
|
|
|
|
merge_head=$(sed -e '/ not-for-merge /d' \
|
|
-e 's/ .*//' "$GIT_DIR"/FETCH_HEAD | \
|
|
tr '\012' ' ')
|
|
|
|
case "$merge_head" in
|
|
'')
|
|
echo >&2 "No changes."
|
|
exit 0
|
|
;;
|
|
?*' '?*)
|
|
var=`git-var -l | sed -ne 's/^pull\.octopus=/-s /p'`
|
|
if test '' = "$var"
|
|
then
|
|
strategy_default_args='-s octopus'
|
|
else
|
|
strategy_default_args=$var
|
|
fi
|
|
;;
|
|
*)
|
|
var=`git-var -l | sed -ne 's/^pull\.twohead=/-s /p'`
|
|
if test '' = "$var"
|
|
then
|
|
strategy_default_args='-s recursive'
|
|
else
|
|
strategy_default_args=$var
|
|
fi
|
|
;;
|
|
esac
|
|
|
|
case "$strategy_args" in
|
|
'')
|
|
strategy_args=$strategy_default_args
|
|
;;
|
|
esac
|
|
|
|
merge_name=$(git-fmt-merge-msg <"$GIT_DIR/FETCH_HEAD")
|
|
git-merge $no_summary $no_commit $strategy_args "$merge_name" HEAD $merge_head
|