Linus Torvalds | 839a7a0 | 2005-04-18 12:15:10 -0700 | [diff] [blame] | 1 | #!/bin/sh |
| 2 | # |
Junio C Hamano | 521003f | 2005-08-22 21:57:59 -0700 | [diff] [blame] | 3 | # Copyright (c) 2005 Junio C Hamano |
| 4 | # |
| 5 | # Fetch one or more remote refs and merge it/them into the current HEAD. |
| 6 | |
freku045@student.liu.se | 806f36d | 2005-12-13 23:30:31 +0100 | [diff] [blame] | 7 | USAGE='[-n | --no-summary] [--no-commit] [-s strategy]... [<fetch-options>] <repo> <head>...' |
| 8 | LONG_USAGE='Fetch one or more remote refs and merge it/them into the current HEAD.' |
Junio C Hamano | ae2b0f1 | 2005-11-24 00:12:11 -0800 | [diff] [blame] | 9 | . git-sh-setup |
Junio C Hamano | b10ac50 | 2005-08-25 18:15:32 -0700 | [diff] [blame] | 10 | |
Junio C Hamano | 123ee3c | 2005-11-01 19:30:11 -0800 | [diff] [blame] | 11 | strategy_args= no_summary= no_commit= |
Junio C Hamano | 60fb5b2 | 2005-09-25 19:43:51 -0700 | [diff] [blame] | 12 | while case "$#,$1" in 0) break ;; *,-*) ;; *) break ;; esac |
| 13 | do |
| 14 | case "$1" in |
| 15 | -n|--n|--no|--no-|--no-s|--no-su|--no-sum|--no-summ|\ |
| 16 | --no-summa|--no-summar|--no-summary) |
| 17 | no_summary=-n ;; |
Junio C Hamano | 123ee3c | 2005-11-01 19:30:11 -0800 | [diff] [blame] | 18 | --no-c|--no-co|--no-com|--no-comm|--no-commi|--no-commit) |
| 19 | no_commit=--no-commit ;; |
Junio C Hamano | 60fb5b2 | 2005-09-25 19:43:51 -0700 | [diff] [blame] | 20 | -s=*|--s=*|--st=*|--str=*|--stra=*|--strat=*|--strate=*|\ |
| 21 | --strateg=*|--strategy=*|\ |
| 22 | -s|--s|--st|--str|--stra|--strat|--strate|--strateg|--strategy) |
| 23 | case "$#,$1" in |
| 24 | *,*=*) |
| 25 | strategy=`expr "$1" : '-[^=]*=\(.*\)'` ;; |
| 26 | 1,*) |
| 27 | usage ;; |
| 28 | *) |
| 29 | strategy="$2" |
| 30 | shift ;; |
| 31 | esac |
| 32 | strategy_args="${strategy_args}-s $strategy " |
| 33 | ;; |
Jon Loeliger | 93d69d8 | 2005-11-06 23:30:56 -0600 | [diff] [blame] | 34 | -h|--h|--he|--hel|--help) |
| 35 | usage |
| 36 | ;; |
Junio C Hamano | 60fb5b2 | 2005-09-25 19:43:51 -0700 | [diff] [blame] | 37 | -*) |
Junio C Hamano | 619e5a0 | 2005-10-03 15:45:44 -0700 | [diff] [blame] | 38 | # Pass thru anything that is meant for fetch. |
| 39 | break |
Junio C Hamano | 60fb5b2 | 2005-09-25 19:43:51 -0700 | [diff] [blame] | 40 | ;; |
| 41 | esac |
| 42 | shift |
| 43 | done |
| 44 | |
Junio C Hamano | bf7960e | 2005-09-27 18:14:27 -0700 | [diff] [blame] | 45 | orig_head=$(git-rev-parse --verify HEAD) || die "Pulling into a black hole?" |
Junio C Hamano | 215a7ad | 2005-09-07 17:26:23 -0700 | [diff] [blame] | 46 | git-fetch --update-head-ok "$@" || exit 1 |
Junio C Hamano | b10ac50 | 2005-08-25 18:15:32 -0700 | [diff] [blame] | 47 | |
Junio C Hamano | bf7960e | 2005-09-27 18:14:27 -0700 | [diff] [blame] | 48 | curr_head=$(git-rev-parse --verify HEAD) |
Junio C Hamano | b10ac50 | 2005-08-25 18:15:32 -0700 | [diff] [blame] | 49 | if test "$curr_head" != "$orig_head" |
| 50 | then |
| 51 | # The fetch involved updating the current branch. |
| 52 | |
| 53 | # The working tree and the index file is still based on the |
| 54 | # $orig_head commit, but we are merging into $curr_head. |
| 55 | # First update the working tree to match $curr_head. |
| 56 | |
| 57 | echo >&2 "Warning: fetch updated the current branch head." |
Junio C Hamano | cf46e7b | 2006-03-22 01:09:43 -0800 | [diff] [blame] | 58 | echo >&2 "Warning: fast forwarding your working tree from" |
| 59 | echo >&2 "Warning: $orig_head commit." |
| 60 | git-update-index --refresh 2>/dev/null |
Junio C Hamano | b10ac50 | 2005-08-25 18:15:32 -0700 | [diff] [blame] | 61 | git-read-tree -u -m "$orig_head" "$curr_head" || |
Junio C Hamano | 8323124 | 2006-03-22 01:57:11 -0800 | [diff] [blame] | 62 | die 'Cannot fast-forward your working tree. |
| 63 | After making sure that you saved anything precious from |
| 64 | $ git diff '$orig_head' |
| 65 | output, run |
| 66 | $ git reset --hard |
| 67 | to recover.' |
| 68 | |
Junio C Hamano | b10ac50 | 2005-08-25 18:15:32 -0700 | [diff] [blame] | 69 | fi |
| 70 | |
Junio C Hamano | 05dd8e2 | 2005-09-25 22:54:23 -0700 | [diff] [blame] | 71 | merge_head=$(sed -e '/ not-for-merge /d' \ |
| 72 | -e 's/ .*//' "$GIT_DIR"/FETCH_HEAD | \ |
| 73 | tr '\012' ' ') |
Junio C Hamano | e0bfc81 | 2005-08-20 02:57:26 -0700 | [diff] [blame] | 74 | |
| 75 | case "$merge_head" in |
Junio C Hamano | 521003f | 2005-08-22 21:57:59 -0700 | [diff] [blame] | 76 | '') |
| 77 | echo >&2 "No changes." |
| 78 | exit 0 |
| 79 | ;; |
Junio C Hamano | 60fb5b2 | 2005-09-25 19:43:51 -0700 | [diff] [blame] | 80 | ?*' '?*) |
Junio C Hamano | f5ef535 | 2006-03-18 02:07:59 -0800 | [diff] [blame] | 81 | var=`git-repo-config --get pull.octopus` |
Mark Hollomon | c8e2db0 | 2006-03-15 22:51:41 +0000 | [diff] [blame] | 82 | if test -n "$var" |
Junio C Hamano | a1c2929 | 2005-11-08 02:00:31 -0800 | [diff] [blame] | 83 | then |
Junio C Hamano | 4890f62 | 2006-02-11 12:39:11 -0800 | [diff] [blame] | 84 | strategy_default_args="-s $var" |
Junio C Hamano | a1c2929 | 2005-11-08 02:00:31 -0800 | [diff] [blame] | 85 | fi |
Junio C Hamano | 60fb5b2 | 2005-09-25 19:43:51 -0700 | [diff] [blame] | 86 | ;; |
| 87 | *) |
Junio C Hamano | f5ef535 | 2006-03-18 02:07:59 -0800 | [diff] [blame] | 88 | var=`git-repo-config --get pull.twohead` |
Mark Hollomon | c8e2db0 | 2006-03-15 22:51:41 +0000 | [diff] [blame] | 89 | if test -n "$var" |
| 90 | then |
Junio C Hamano | 4890f62 | 2006-02-11 12:39:11 -0800 | [diff] [blame] | 91 | strategy_default_args="-s $var" |
Junio C Hamano | a1c2929 | 2005-11-08 02:00:31 -0800 | [diff] [blame] | 92 | fi |
Junio C Hamano | 60fb5b2 | 2005-09-25 19:43:51 -0700 | [diff] [blame] | 93 | ;; |
| 94 | esac |
| 95 | |
| 96 | case "$strategy_args" in |
| 97 | '') |
| 98 | strategy_args=$strategy_default_args |
Junio C Hamano | acfadcf | 2005-09-21 14:01:56 -0700 | [diff] [blame] | 99 | ;; |
Junio C Hamano | e0bfc81 | 2005-08-20 02:57:26 -0700 | [diff] [blame] | 100 | esac |
| 101 | |
Junio C Hamano | c8b48ba | 2005-09-22 00:55:22 -0700 | [diff] [blame] | 102 | merge_name=$(git-fmt-merge-msg <"$GIT_DIR/FETCH_HEAD") |
Junio C Hamano | 123ee3c | 2005-11-01 19:30:11 -0800 | [diff] [blame] | 103 | git-merge $no_summary $no_commit $strategy_args "$merge_name" HEAD $merge_head |