SUBDIRECTORY_OK=Yes
. git-sh-setup
set_reflog_action "fetch $*"
+cd_to_toplevel ;# probably unnecessary...
-TOP=$(git-rev-parse --show-cdup)
-if test ! -z "$TOP"
-then
- cd "$TOP"
-fi
. git-parse-remote
_x40='[0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f]'
_x40="$_x40$_x40$_x40$_x40$_x40$_x40$_x40$_x40"
verbose=
update_head_ok=
exec=
-upload_pack=
keep=
shallow_depth=
while case "$#" in 0) break ;; esac
--upl|--uplo|--uploa|--upload|--upload-|--upload-p|\
--upload-pa|--upload-pac|--upload-pack)
shift
- exec="--exec=$1"
- upload_pack="-u $1"
+ exec="--upload-pack=$1"
+ ;;
+ --upl=*|--uplo=*|--uploa=*|--upload=*|\
+ --upload-=*|--upload-p=*|--upload-pa=*|--upload-pac=*|--upload-pack=*)
+ exec=--upload-pack=$(expr "z$1" : 'z-[^=]*=\(.*\)')
+ shift
;;
-f|--f|--fo|--for|--forc|--force)
force=t
set x $origin ; shift ;;
esac
+if test -z "$exec"
+then
+ # No command line override and we have configuration for the remote.
+ exec="--upload-pack=$(get_uploadpack $1)"
+fi
+
remote_nick="$1"
remote=$(get_remote_url "$@")
refs=
fi
# Global that is reused later
-ls_remote_result=$(git ls-remote $upload_pack "$remote") ||
+ls_remote_result=$(git ls-remote $exec "$remote") ||
die "Cannot get the repository state from $remote"
append_fetch_head () {
esac
}
-case "$update_head_ok" in
-'')
+# updating the current HEAD with git-fetch in a bare
+# repository is always fine.
+if test -z "$update_head_ok" && test $(is_bare_repository) = false
+then
orig_head=$(git-rev-parse --verify HEAD 2>/dev/null)
- ;;
+fi
+
+# Allow --notags from remote.$1.tagopt
+case "$tags$no_tags" in
+'')
+ case "$(git-config --get "remote.$1.tagopt")" in
+ --no-tags)
+ no_tags=t ;;
+ esac
esac
# If --tags (and later --heads or --all) is specified, then we are
then
taglist=`IFS=' ' &&
echo "$ls_remote_result" |
+ git-show-ref --exclude-existing=refs/tags/ |
while read sha1 name
do
- case "$sha1" in
- fail)
- exit 1
- esac
- case "$name" in
- *^*) continue ;;
- refs/tags/*) ;;
- *) continue ;;
- esac
- if git-check-ref-format "$name"
- then
- echo ".${name}:${name}"
- else
- echo >&2 "warning: tag ${name} ignored"
- fi
+ echo ".${name}:${name}"
done` || exit
if test "$#" -gt 1
then
curl_extra_args="-k"
fi
if [ -n "$GIT_CURL_FTP_NO_EPSV" -o \
- "`git-repo-config --bool http.noEPSV`" = true ]; then
+ "`git-config --bool http.noEPSV`" = true ]; then
noepsv_opt="--disable-epsv"
fi
( : subshell because we muck with IFS
IFS=" $LF"
(
+ if test -f "$remote" ; then
+ test -n "$shallow_depth" &&
+ die "shallow clone with bundle is not supported"
+ git-bundle unbundle "$remote" $rref ||
+ echo failed "$remote"
+ else
git-fetch-pack --thin $exec $keep $shallow_depth "$remote" $rref ||
echo failed "$remote"
+ fi
) |
(
trap '