1#!/bin/sh 2 3# git-ls-remote could be called from outside a git managed repository; 4# this would fail in that case and would issue an error message. 5GIT_DIR=$(git rev-parse -q --git-dir)|| :; 6 7get_default_remote () { 8 curr_branch=$(git symbolic-ref -q HEAD) 9 curr_branch="${curr_branch#refs/heads/}" 10 origin=$(git config --get "branch.$curr_branch.remote") 11echo${origin:-origin} 12} 13 14get_remote_merge_branch () { 15case"$#"in 160|1) 17 origin="$1" 18 default=$(get_default_remote) 19test -z"$origin"&& origin=$default 20 curr_branch=$(git symbolic-ref -q HEAD)&& 21["$origin"="$default"] && 22echo$(git for-each-ref --format='%(upstream)'$curr_branch) 23 ;; 24 *) 25 repo=$1 26 shift 27 ref=$1 28 # FIXME: It should return the tracking branch 29 # Currently only works with the default mapping 30 case "$ref" in 31 +*) 32 ref=$(expr "z$ref" : 'z+\(.*\)') 33;; 34esac 35expr"z$ref":'z.*:'>/dev/null || ref="${ref}:" 36 remote=$(expr "z$ref" : 'z\([^:]*\):') 37 case "$remote" in 38 '' | HEAD ) remote=HEAD ;; 39 heads/*) remote=${remote#heads/};; 40 refs/heads/*) remote=${remote#refs/heads/};; 41 refs/* | tags/* | remotes/* ) remote= 42 esac 43 [ -n "$remote" ] && case "$repo" in 44 .) 45 echo "refs/heads/$remote" 46 ;; 47 *) 48 echo "refs/remotes/$repo/$remote" 49 ;; 50 esac 51 esac 52} 53 54error_on_missing_default_upstream () { 55 cmd="$1" 56 op_type="$2" 57 op_prep="$3" 58 example="$4" 59 branch_name=$(git symbolic-ref -q HEAD) 60 # If there's only one remote, use that in the suggestion 61 remote="<remote>" 62iftest$(git remote | wc -l)=1 63then 64 remote=$(git remote) 65fi 66 67iftest -z"$branch_name" 68then 69echo"You are not currently on a branch. Please specify which 70branch you want to$op_type$op_prep. See git-${cmd}(1) for details. 71 72$example 73" 74else 75echo"There is no tracking information for the current branch. 76Please specify which branch you want to$op_type$op_prep. 77See git-${cmd}(1) for details 78 79$example 80 81If you wish to set tracking information for this branch you can do so with: 82 83 git branch --set-upstream${branch_name#refs/heads/}$remote/<branch> 84" 85fi 86exit1 87}