diff options
author | Eric Wong <normalperson@yhbt.net> | 2009-07-20 02:06:24 -0700 |
---|---|---|
committer | Eric Wong <normalperson@yhbt.net> | 2009-07-22 23:45:29 -0700 |
commit | 4aacaeb3dc82bb6479e70e120053dc27a399460e (patch) | |
tree | c6c4f11b5117d58587d612866b8bf87b625d126c /t/t9142-git-svn-shallow-clone.sh | |
parent | 0ad8ff2cd185e84fd49dd961370411e379681f10 (diff) | |
download | git-4aacaeb3dc82bb6479e70e120053dc27a399460e.tar.gz |
git svn: fix shallow clone when upstream revision is too new
Thanks to Ka-Hing Cheung for the initial bug report and patch:
> 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>
Diffstat (limited to 't/t9142-git-svn-shallow-clone.sh')
-rwxr-xr-x | t/t9142-git-svn-shallow-clone.sh | 30 |
1 files changed, 30 insertions, 0 deletions
diff --git a/t/t9142-git-svn-shallow-clone.sh b/t/t9142-git-svn-shallow-clone.sh new file mode 100755 index 0000000000..fd5ad49471 --- /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 |