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