git.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Junio C Hamano <junkio@cox.net>
To: "Martin Langhoff (CatalystIT)" <martin@catalyst.net.nz>
Cc: git@vger.kernel.org
Subject: [PATCH] git-fetch --tags: deal with tags with spaces in them.
Date: Mon, 10 Oct 2005 22:07:14 -0700	[thread overview]
Message-ID: <7virw4zlod.fsf_-_@assigned-by-dhcp.cox.net> (raw)
In-Reply-To: <7vzmpgznfj.fsf_-_@assigned-by-dhcp.cox.net> (Junio C. Hamano's message of "Mon, 10 Oct 2005 21:29:20 -0700")

"git-fetch --tags" can get confused with tags with spaces in their names,
it used to use shell IFS to split the list of tags and also used curl
which insists the URL to be escaped.  Fix it so it can work with Martin's
moodle repository http://locke.catalyst.net.nz/git/moodle.git/.

Signed-off-by: Junio C Hamano <junkio@cox.net>

---

    Junio C Hamano <junkio@cox.net> writes:

    >   But in general, we should avoid spaces in reference names.
    >   Scripts have problem with them.  For example, "git-fetch
    >   --tags" currently cannot handle it.  If people cared deeply
    >   enough maybe they can rewrite parts of it in Perl and send me
    >   a patch ;-).

    And as usual, I end up being "people", but I did not use
    Perl ;-).  Only lightly tested but it should fetch tags from
    your repository.  I did not want to keep slurping those 70MB
    and 16MB packs, so I cheated by creating a small repository
    with funky tag names locally while testing.

 git-fetch.sh |   21 +++++++++++++--------
 1 files changed, 13 insertions(+), 8 deletions(-)

applies-to: 5db8c58bc7403c7b076dea420133e6e890835e1a
c1a4b1dd71e23d877dfbf04a2ac8b1c238fc5eb4
diff --git a/git-fetch.sh b/git-fetch.sh
index d398866..b3f3782 100755
--- a/git-fetch.sh
+++ b/git-fetch.sh
@@ -5,6 +5,10 @@
 _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"
 
+LF='
+'
+IFS="$LF"
+
 tags=
 append=
 force=
@@ -170,11 +174,14 @@ esac
 reflist=$(get_remote_refs_for_fetch "$@")
 if test "$tags"
 then
-	taglist=$(git-ls-remote --tags "$remote" | awk '{ print "."$2":"$2 }')
+	taglist=$(git-ls-remote --tags "$remote" |
+		sed -e '
+			s/^[^	]*	//
+			s/.*/&:&/')
 	if test "$#" -gt 1
 	then
 		# remote URL plus explicit refspecs; we need to merge them.
-		reflist="$reflist $taglist"
+		reflist="$reflist$LF$taglist"
 	else
 		# No explicit refspecs; fetch tags only.
 		reflist=$taglist
@@ -183,7 +190,7 @@ fi
 
 for ref in $reflist
 do
-    refs="$refs $ref"
+    refs="$refs$LF$ref"
 
     # These are relative path from $GIT_DIR, typically starting at refs/
     # but may be HEAD
@@ -204,7 +211,7 @@ do
     remote_name=$(expr "$ref" : '\([^:]*\):')
     local_name=$(expr "$ref" : '[^:]*:\(.*\)')
 
-    rref="$rref $remote_name"
+    rref="$rref$LF$remote_name"
 
     # There are transports that can fetch only one head at a time...
     case "$remote" in
@@ -212,11 +219,9 @@ do
 	if [ -n "$GIT_SSL_NO_VERIFY" ]; then
 	    curl_extra_args="-k"
 	fi
-	head=$(curl -nsf $curl_extra_args "$remote/$remote_name") &&
-	expr "$head" : "$_x40\$" >/dev/null ||
-		die "Failed to fetch $remote_name from $remote"
 	echo >&2 Fetching "$remote_name from $remote" using http
-	git-http-fetch -v -a "$head" "$remote/" || exit
+	ref_name=`expr "$remote_name" : 'refs/\(.*\)'`
+	git-http-fetch -v -a "$ref_name" "$remote/" || exit
 	;;
     rsync://*)
 	TMP_HEAD="$GIT_DIR/TMP_HEAD"
---
0.99.8.GIT

  reply	other threads:[~2005-10-11  5:07 UTC|newest]

Thread overview: 21+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
     [not found] <46a038f90510062014l7f5740e0l77fc53b50f822e8f@mail.gmail.com>
     [not found] ` <46a038f90510082014i6b296f2bvbac56e25344cbdf2@mail.gmail.com>
2005-10-10  4:26   ` Strangely broken git repo Martin Langhoff (CatalystIT)
2005-10-10  9:00     ` Junio C Hamano
2005-10-10 14:54       ` Linus Torvalds
2005-10-10 15:21         ` Linus Torvalds
2005-10-10 18:19           ` Morten Welinder
2005-10-10 18:23             ` Linus Torvalds
2005-10-10 18:30             ` Johannes Schindelin
2005-10-11  4:29       ` Quote reference names while fetching with curl Junio C Hamano
2005-10-11  5:07         ` Junio C Hamano [this message]
2005-10-11  6:04           ` [PATCH] git-fetch --tags: deal with tags with spaces in them Junio C Hamano
2005-10-12  5:29             ` Junio C Hamano
2005-10-12  8:26               ` Petr Baudis
2005-10-12 15:36               ` H. Peter Anvin
2005-10-12 15:47                 ` H. Peter Anvin
2005-10-12 18:57                   ` Junio C Hamano
2005-10-12 18:10                 ` Junio C Hamano
2005-10-12 22:01                   ` [PATCH] git-check-ref-format: reject funny ref names Junio C Hamano
2005-10-12 22:01                   ` [PATCH] Refuse to create funny refs in clone-pack, git-fetch and receive-pack Junio C Hamano
2005-10-11 19:55           ` [PATCH] git-fetch --tags: deal with tags with spaces in them Matthias Urlichs
2005-10-12  3:26       ` Strangely broken git repo Nick Hengeveld
2005-10-12  4:22         ` Junio C Hamano

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=7virw4zlod.fsf_-_@assigned-by-dhcp.cox.net \
    --to=junkio@cox.net \
    --cc=git@vger.kernel.org \
    --cc=martin@catalyst.net.nz \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).