projects
/
git.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
A Perforce importer for git.
[git.git]
/
git-parse-remote.sh
diff --git
a/git-parse-remote.sh
b/git-parse-remote.sh
index
a9db0cd
..
187f088
100755
(executable)
--- a/
git-parse-remote.sh
+++ b/
git-parse-remote.sh
@@
-1,14
+1,19
@@
#!/bin/sh
#!/bin/sh
-. git-sh-setup || die "Not a git archive"
+# git-ls-remote could be called from outside a git managed repository;
+# this would fail in that case and would issue an error message.
+GIT_DIR=$(git-rev-parse --git-dir 2>/dev/null) || :;
get_data_source () {
case "$1" in
*/*)
# Not so fast. This could be the partial URL shorthand...
get_data_source () {
case "$1" in
*/*)
# Not so fast. This could be the partial URL shorthand...
- token=$(expr "$1" : '\([^/]*\)/')
- remainder=$(expr "$1" : '[^/]*/\(.*\)')
- if test -f "$GIT_DIR/branches/$token"
+ token=$(expr "z$1" : 'z\([^/]*\)/')
+ remainder=$(expr "z$1" : 'z[^/]*/\(.*\)')
+ if test "$(git-repo-config --get "remote.$token.url")"
+ then
+ echo config-partial
+ elif test -f "$GIT_DIR/branches/$token"
then
echo branches-partial
else
then
echo branches-partial
else
@@
-16,7
+21,10
@@
get_data_source () {
fi
;;
*)
fi
;;
*)
- if test -f "$GIT_DIR/remotes/$1"
+ if test "$(git-repo-config --get "remote.$1.url")"
+ then
+ echo config
+ elif test -f "$GIT_DIR/remotes/$1"
then
echo remotes
elif test -f "$GIT_DIR/branches/$1"
then
echo remotes
elif test -f "$GIT_DIR/branches/$1"
@@
-33,6
+41,15
@@
get_remote_url () {
case "$data_source" in
'')
echo "$1" ;;
case "$data_source" in
'')
echo "$1" ;;
+ config-partial)
+ token=$(expr "z$1" : 'z\([^/]*\)/')
+ remainder=$(expr "z$1" : 'z[^/]*/\(.*\)')
+ url=$(git-repo-config --get "remote.$token.url")
+ echo "$url/$remainder"
+ ;;
+ config)
+ git-repo-config --get "remote.$1.url"
+ ;;
remotes)
sed -ne '/^URL: */{
s///p
remotes)
sed -ne '/^URL: */{
s///p
@@
-41,8
+58,8
@@
get_remote_url () {
branches)
sed -e 's/#.*//' "$GIT_DIR/branches/$1" ;;
branches-partial)
branches)
sed -e 's/#.*//' "$GIT_DIR/branches/$1" ;;
branches-partial)
- token=$(expr "
$1" : '
\([^/]*\)/')
- remainder=$(expr "
$1" : '
[^/]*/\(.*\)')
+ token=$(expr "
z$1" : 'z
\([^/]*\)/')
+ remainder=$(expr "
z$1" : 'z
[^/]*/\(.*\)')
url=$(sed -e 's/#.*//' "$GIT_DIR/branches/$token")
echo "$url/$remainder"
;;
url=$(sed -e 's/#.*//' "$GIT_DIR/branches/$token")
echo "$url/$remainder"
;;
@@
-54,8
+71,10
@@
get_remote_url () {
get_remote_default_refs_for_push () {
data_source=$(get_data_source "$1")
case "$data_source" in
get_remote_default_refs_for_push () {
data_source=$(get_data_source "$1")
case "$data_source" in
- '' | branches | branches-partial)
+ '' |
config-partial |
branches | branches-partial)
;; # no default push mapping, just send matching refs.
;; # no default push mapping, just send matching refs.
+ config)
+ git-repo-config --get-all "remote.$1.push" ;;
remotes)
sed -ne '/^Push: */{
s///p
remotes)
sed -ne '/^Push: */{
s///p
@@
-65,33
+84,43
@@
get_remote_default_refs_for_push () {
esac
}
esac
}
-# Subroutine to canonicalize remote:local notation
+# Subroutine to canonicalize remote:local notation
.
canon_refs_list_for_fetch () {
canon_refs_list_for_fetch () {
+ # Leave only the first one alone; add prefix . to the rest
+ # to prevent the secondary branches to be merged by default.
+ dot_prefix=
for ref
do
force=
case "$ref" in
+*)
for ref
do
force=
case "$ref" in
+*)
- ref=$(expr "
$ref" : '\
+\(.*\)')
+ ref=$(expr "
z$ref" : 'z
+\(.*\)')
force=+
;;
esac
force=+
;;
esac
- expr "
$ref" : '
.*:' >/dev/null || ref="${ref}:"
- remote=$(expr "
$ref" : '
\([^:]*\):')
- local=$(expr "
$ref" : '
[^:]*:\(.*\)')
+ expr "
z$ref" : 'z
.*:' >/dev/null || ref="${ref}:"
+ remote=$(expr "
z$ref" : 'z
\([^:]*\):')
+ local=$(expr "
z$ref" : 'z
[^:]*:\(.*\)')
case "$remote" in
'') remote=HEAD ;;
case "$remote" in
'') remote=HEAD ;;
- refs/heads/* | refs/tags/*) ;;
- heads/* | tags/* ) remote="refs/$remote" ;;
+ refs/heads/* | refs/tags/*
| refs/remotes/*
) ;;
+ heads/* | tags/*
| remotes/*
) remote="refs/$remote" ;;
*) remote="refs/heads/$remote" ;;
esac
case "$local" in
'') local= ;;
*) remote="refs/heads/$remote" ;;
esac
case "$local" in
'') local= ;;
- refs/heads/* | refs/tags/*) ;;
- heads/* | tags/* ) local="refs/$local" ;;
+ refs/heads/* | refs/tags/*
| refs/remotes/*
) ;;
+ heads/* | tags/*
| remotes/*
) local="refs/$local" ;;
*) local="refs/heads/$local" ;;
esac
*) local="refs/heads/$local" ;;
esac
- echo "${force}${remote}:${local}"
+
+ if local_ref_name=$(expr "z$local" : 'zrefs/\(.*\)')
+ then
+ git-check-ref-format "$local_ref_name" ||
+ die "* refusing to create funny ref '$local_ref_name' locally"
+ fi
+ echo "${dot_prefix}${force}${remote}:${local}"
+ dot_prefix=.
done
}
done
}
@@
-99,14
+128,20
@@
canon_refs_list_for_fetch () {
get_remote_default_refs_for_fetch () {
data_source=$(get_data_source "$1")
case "$data_source" in
get_remote_default_refs_for_fetch () {
data_source=$(get_data_source "$1")
case "$data_source" in
- '' | branches-partial)
+ '' |
config-partial |
branches-partial)
echo "HEAD:" ;;
echo "HEAD:" ;;
+ config)
+ canon_refs_list_for_fetch \
+ $(git-repo-config --get-all "remote.$1.fetch") ;;
branches)
remote_branch=$(sed -ne '/#/s/.*#//p' "$GIT_DIR/branches/$1")
case "$remote_branch" in '') remote_branch=master ;; esac
echo "refs/heads/${remote_branch}:refs/heads/$1"
;;
remotes)
branches)
remote_branch=$(sed -ne '/#/s/.*#//p' "$GIT_DIR/branches/$1")
case "$remote_branch" in '') remote_branch=master ;; esac
echo "refs/heads/${remote_branch}:refs/heads/$1"
;;
remotes)
+ # This prefixes the second and later default refspecs
+ # with a '.', to signal git-fetch to mark them
+ # not-for-merge.
canon_refs_list_for_fetch $(sed -ne '/^Pull: */{
s///p
}' "$GIT_DIR/remotes/$1")
canon_refs_list_for_fetch $(sed -ne '/^Pull: */{
s///p
}' "$GIT_DIR/remotes/$1")
@@
-156,7
+191,7
@@
get_remote_refs_for_fetch () {
resolve_alternates () {
# original URL (xxx.git)
resolve_alternates () {
# original URL (xxx.git)
- top_=`expr "
$1" : '
\([^:]*:/*[^/]*\)/'`
+ top_=`expr "
z$1" : 'z
\([^:]*:/*[^/]*\)/'`
while read path
do
case "$path" in
while read path
do
case "$path" in