git/list[1] front-page[2] threads[3] people[4] search[5] about
 

[PATCH] git svn: fix shallow clone when upstream revision is too new

From
EWEric Wong <normalperson@yhbt.net>
Date
Jul 23, 2009, 06:43 UTC
Message-ID
<20090723064357.GA19062@dcvr.yhbt.net>
In-Reply-To
<20090720055514.GA3229@dcvr.yhbt.net>
Thanks to Ka-Hing Cheung for the initial bug report and patch:
Show 8 quoted lines
> git-svn uses $ra->get_latest_revnum to find out the latest
> revision, but that can be problematic, because get_latest_revnum
> returns the latest revnum in the entire repository, not
> restricted by whatever URL you used to construct $ra. So if you
> do git svn clone -r HEAD svn://blah/blah/trunk, it won't work if
> the latest checkin is in one of the branches (it will try to
> fetch a rev that doesn't exist in trunk, making the clone
> useless).

Relying on SVN::Core::INVALID_REVNUM (-1) as the "start" argument to SVN::Ra::get_log() proved unreliable with http(s) URLs so the result of SVN::Ra::get_latest_revnum() is used as the "start" argument instead.

Signed-off-by: Eric Wong <normalperson@yhbt.net>
---
 Junio: Pushed out to git://git.bogomips.org/git-svn several
 days ago, I thought I had sent this email days ago but
 I had to leave in a hurry and never sent it.
 git-svn.perl                     |    1 +
 t/t9142-git-svn-shallow-clone.sh |   30 ++++++++++++++++++++++++++++++
 2 files changed, 31 insertions(+), 0 deletions(-)
 create mode 100755 t/t9142-git-svn-shallow-clone.sh
diff --git a/git-svn.perl b/git-svn.perl
index 43c86e8..9369acc 100755
--- a/git-svn.perl
+++ b/git-svn.perl
@@ -1647,6 +1647,7 @@ sub fetch_all {
 	my $ra = Git::SVN::Ra->new($url);
 	my $uuid = $ra->get_uuid;
 	my $head = $ra->get_latest_revnum;
+	$ra->get_log("", $head, 0, 1, 0, 1, sub { $head = $_[1] });
 	my $base = defined $fetch ? $head : 0;
 
 	# read the max revs for wildcard expansion (branches/*, tags/*)
diff --git a/t/t9142-git-svn-shallow-clone.sh b/t/t9142-git-svn-shallow-clone.sh
new file mode 100755
index 0000000..fd5ad49
--- /dev/null
+++ b/t/t9142-git-svn-shallow-clone.sh
@@ -0,0 +1,30 @@
+#!/bin/sh
+#
+# Copyright (c) 2009 Eric Wong
+#
+
+test_description='git svn shallow clone'
+. ./lib-git-svn.sh
+
+test_expect_success 'setup test repository' '
+	svn_cmd mkdir -m "create standard layout" \
+	  "$svnrepo"/trunk "$svnrepo"/branches "$svnrepo"/tags &&
+	svn_cmd cp -m "branch off trunk" \
+	  "$svnrepo"/trunk "$svnrepo"/branches/a &&
+	svn_cmd co "$svnrepo"/branches/a &&
+	(
+		cd a &&
+		> foo &&
+		svn_cmd add foo &&
+		svn_cmd commit -m "add foo"
+	)
+'
+
+start_httpd
+
+test_expect_success 'clone trunk with "-r HEAD"' '
+	git svn clone -r HEAD "$svnrepo/trunk" g &&
+	( cd g && git rev-parse --symbolic --verify HEAD )
+'
+
+test_done
-- 
Eric Wong
Previous: Eric WongNext: Eric Wong
Message 3 of 5 in “git svn clone -r HEAD”
  1. Ka-Hing CheungJul 16, 2009
  2. Eric WongJul 20, 2009
  3. git svn: fix shallow clone when upstream revision is too newEric Wong, Jul 23, 2009
  4. Eric WongJul 23, 2009
  5. Eric WongJul 23, 2009

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.