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 26shift 27 ref=$1 28# FIXME: It should return the tracking branch 29# Currently only works with the default mapping 30case"$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\([^:]*\):') 37case"$remote"in 38''| HEAD ) remote=HEAD ;; 39 heads/*) remote=${remote#heads/};; 40 refs/heads/*) remote=${remote#refs/heads/};; 41 refs/* | tags/* | remotes/* ) remote= 42esac 43[-n"$remote"] &&case"$repo"in 44 .) 45echo"refs/heads/$remote" 46;; 47*) 48echo"refs/remotes/$repo/$remote" 49;; 50esac 51esac 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-to=$remote/<branch>${branch_name#refs/heads/} 84" 85fi 86exit1 87}