git-pull.shon commit gitweb: Allow search to be disabled from the config file. (6be9351)
   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
   7USAGE='[-n | --no-summary] [--no-commit] [-s strategy]... [<fetch-options>] <repo> <head>...'
   8LONG_USAGE='Fetch one or more remote refs and merge it/them into the current HEAD.'
   9. git-sh-setup
  10
  11strategy_args= no_summary= no_commit= squash=
  12while case "$#,$1" in 0) break ;; *,-*) ;; *) break ;; esac
  13do
  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 ;;
  18        --no-c|--no-co|--no-com|--no-comm|--no-commi|--no-commit)
  19                no_commit=--no-commit ;;
  20        --sq|--squ|--squa|--squas|--squash)
  21                squash=--squash ;;
  22        -s=*|--s=*|--st=*|--str=*|--stra=*|--strat=*|--strate=*|\
  23                --strateg=*|--strategy=*|\
  24        -s|--s|--st|--str|--stra|--strat|--strate|--strateg|--strategy)
  25                case "$#,$1" in
  26                *,*=*)
  27                        strategy=`expr "z$1" : 'z-[^=]*=\(.*\)'` ;;
  28                1,*)
  29                        usage ;;
  30                *)
  31                        strategy="$2"
  32                        shift ;;
  33                esac
  34                strategy_args="${strategy_args}-s $strategy "
  35                ;;
  36        -h|--h|--he|--hel|--help)
  37                usage
  38                ;;
  39        -*)
  40                # Pass thru anything that is meant for fetch.
  41                break
  42                ;;
  43        esac
  44        shift
  45done
  46
  47orig_head=$(git-rev-parse --verify HEAD 2>/dev/null)
  48git-fetch --update-head-ok --reflog-action=pull "$@" || exit 1
  49
  50curr_head=$(git-rev-parse --verify HEAD 2>/dev/null)
  51if test "$curr_head" != "$orig_head"
  52then
  53        # The fetch involved updating the current branch.
  54
  55        # The working tree and the index file is still based on the
  56        # $orig_head commit, but we are merging into $curr_head.
  57        # First update the working tree to match $curr_head.
  58
  59        echo >&2 "Warning: fetch updated the current branch head."
  60        echo >&2 "Warning: fast forwarding your working tree from"
  61        echo >&2 "Warning: commit $orig_head."
  62        git-update-index --refresh 2>/dev/null
  63        git-read-tree -u -m "$orig_head" "$curr_head" ||
  64                die 'Cannot fast-forward your working tree.
  65After making sure that you saved anything precious from
  66$ git diff '$orig_head'
  67output, run
  68$ git reset --hard
  69to recover.'
  70
  71fi
  72
  73merge_head=$(sed -e '/  not-for-merge   /d' \
  74        -e 's/  .*//' "$GIT_DIR"/FETCH_HEAD | \
  75        tr '\012' ' ')
  76
  77case "$merge_head" in
  78'')
  79        curr_branch=$(git-symbolic-ref HEAD | \
  80                sed -e 's|^refs/heads/||')
  81        echo >&2 "Warning: No merge candidate found because value of config option
  82         \"branch.${curr_branch}.merge\" does not match any remote branch fetched."
  83        echo >&2 "No changes."
  84        exit 0
  85        ;;
  86?*' '?*)
  87        if test -z "$orig_head"
  88        then
  89                echo >&2 "Cannot merge multiple branches into empty head"
  90                exit 1
  91        fi
  92        var=`git-repo-config --get pull.octopus`
  93        if test -n "$var"
  94        then
  95                strategy_default_args="-s $var"
  96        fi
  97        ;;
  98*)
  99        var=`git-repo-config --get pull.twohead`
 100        if test -n "$var"
 101        then
 102                strategy_default_args="-s $var"
 103        fi
 104        ;;
 105esac
 106
 107if test -z "$orig_head"
 108then
 109        git-update-ref -m "initial pull" HEAD $merge_head "" &&
 110        git-read-tree --reset -u HEAD || exit 1
 111        exit
 112fi
 113
 114case "$strategy_args" in
 115'')
 116        strategy_args=$strategy_default_args
 117        ;;
 118esac
 119
 120merge_name=$(git-fmt-merge-msg <"$GIT_DIR/FETCH_HEAD") || exit
 121git-merge "--reflog-action=pull $*" \
 122        $no_summary $no_commit $squash $strategy_args \
 123        "$merge_name" HEAD $merge_head