git-fetch-pack: really do not ask for funny refs
[git.git] / git-fetch.sh
index 6586e77..b46b3e5 100755 (executable)
@@ -1,6 +1,8 @@
 #!/bin/sh
 #
-. git-sh-setup || die "Not a git archive"
+
+USAGE='<fetch-options> <repository> <refspec>...'
+. git-sh-setup
 . 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"
@@ -34,6 +36,9 @@ do
        -v|--verbose)
                verbose=Yes
                ;;
+       -*)
+               usage
+               ;;
        *)
                break
                ;;
@@ -183,11 +188,20 @@ esac
 reflist=$(get_remote_refs_for_fetch "$@")
 if test "$tags"
 then
-       taglist=$(git-ls-remote --tags "$remote" |
-               sed -e '
-                       /\^/d
-                       s/^[^   ]*      //
-                       s/.*/&:&/')
+       taglist=$(IFS=" " &&
+                 git-ls-remote --tags "$remote" |
+                 while read sha1 name
+                 do
+                       case "$name" in
+                       (*^*) continue ;;
+                       esac
+                       if git-check-ref-format "$name"
+                       then
+                           echo ".${name}:${name}"
+                       else
+                           echo >&2 "warning: tag ${name} ignored"
+                       fi
+                 done)
        if test "$#" -gt 1
        then
                # remote URL plus explicit refspecs; we need to merge them.