Skip to content

Commit

Permalink
git-svn: don't attempt to minimize URLs by default
Browse files Browse the repository at this point in the history
For tracking branches and tags, git-svn prefers to connect
to the root of the repository or at least the level that
houses branches and tags as well as trunk.  However, users
that are accustomed to tracking a single directory have
no use for this feature.

As pointed out by Junio, users may not have permissions to
connect to connect to a higher-level path in the repository.

While the current minimize_url() function detects lack of
permissions to certain paths _after_ successful logins, it
cannot effectively determine if it is trying to access a
login-only portion of a repo when the user expects to
connect to a part where anonymous access is allowed.

For people used to the git-svnimport switches of
--trunk, --tags, --branches, they'll already pass the
repository root (or root+subdirectory), so minimize URL
isn't of too much use to them, either.

For people *not* used to git-svnimport, git-svn also
supports:

 git svn init --minimize-url \
  --trunk http://repository-root/foo/trunk \
  --branches http://repository-root/foo/branches \
  --tags http://repository-root/foo/tags

And this is where the new --minimize-url command-line switch
comes in to allow for this behavior to continue working.
  • Loading branch information
Eric Wong authored and Junio C Hamano committed May 13, 2007
1 parent 4c03c3e commit 4a1bb4c
Show file tree
Hide file tree
Showing 6 changed files with 19 additions and 16 deletions.
5 changes: 3 additions & 2 deletions git-svn.perl
Original file line number Diff line number Diff line change
Expand Up @@ -80,6 +80,7 @@ BEGIN
my %init_opts = ( 'template=s' => \$_template, 'shared:s' => \$_shared,
'trunk|T=s' => \$_trunk, 'tags|t=s' => \$_tags,
'branches|b=s' => \$_branches, 'prefix=s' => \$_prefix,
'minimize-url|m' => \$Git::SVN::_minimize_url,
'no-metadata' => sub { $icv{noMetadata} = 1 },
'use-svm-props' => sub { $icv{useSvmProps} = 1 },
'use-svnsync-props' => sub { $icv{useSvnsyncProps} = 1 },
Expand Down Expand Up @@ -820,7 +821,7 @@ package Git::SVN;
use warnings;
use vars qw/$default_repo_id $default_ref_id $_no_metadata $_follow_parent
$_repack $_repack_flags $_use_svm_props $_head
$_use_svnsync_props $no_reuse_existing/;
$_use_svnsync_props $no_reuse_existing $_minimize_url/;
use Carp qw/croak/;
use File::Path qw/mkpath/;
use File::Copy qw/copy/;
Expand Down Expand Up @@ -1037,7 +1038,7 @@ sub init_remote_config {
"[svn-remote \"$existing\"]\n";
}
$self->{repo_id} = $existing;
} else {
} elsif ($_minimize_url) {
my $min_url = Git::SVN::Ra->new($url)->minimize_url;
$existing = find_existing_remote($min_url, $r);
if ($existing) {
Expand Down
2 changes: 1 addition & 1 deletion t/t9100-git-svn-basic.sh
Original file line number Diff line number Diff line change
Expand Up @@ -229,7 +229,7 @@ test_expect_failure 'exit if init-ing a would clobber a URL' "

test_expect_success \
'init allows us to connect to another directory in the same repo' "
git-svn init -i bar $svnrepo/bar &&
git-svn init --minimize-url -i bar $svnrepo/bar &&
git config --get svn-remote.svn.fetch \
'^bar:refs/remotes/bar$' &&
git config --get svn-remote.svn.fetch \
Expand Down
13 changes: 7 additions & 6 deletions t/t9104-git-svn-follow-parent.sh
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,7 @@ test_expect_success 'initialize repo' "
"

test_expect_success 'init and fetch a moved directory' "
git-svn init -i thunk $svnrepo/thunk &&
git-svn init --minimize-url -i thunk $svnrepo/thunk &&
git-svn fetch -i thunk &&
test \"\`git-rev-parse --verify refs/remotes/thunk@2\`\" \
= \"\`git-rev-parse --verify refs/remotes/thunk~1\`\" &&
Expand Down Expand Up @@ -68,7 +68,8 @@ test_expect_success 'follow larger parent' "
echo hi > import/trunk/thunk/bump/thud/file &&
svn import -m 'import a larger parent' import $svnrepo/larger-parent &&
svn cp -m 'hi' $svnrepo/larger-parent $svnrepo/another-larger &&
git-svn init -i larger $svnrepo/another-larger/trunk/thunk/bump/thud &&
git-svn init --minimize-url -i larger \
$svnrepo/another-larger/trunk/thunk/bump/thud &&
git-svn fetch -i larger &&
git-rev-parse --verify refs/remotes/larger &&
git-rev-parse --verify \
Expand All @@ -90,14 +91,14 @@ test_expect_success 'follow higher-level parent' "
cd ..
svn mkdir -m 'new glob at top level' $svnrepo/glob &&
svn mv -m 'move blob down a level' $svnrepo/blob $svnrepo/glob/blob &&
git-svn init -i blob $svnrepo/glob/blob &&
git-svn init --minimize-url -i blob $svnrepo/glob/blob &&
git-svn fetch -i blob
"

test_expect_success 'follow deleted directory' "
svn mv -m 'bye!' $svnrepo/glob/blob/hi $svnrepo/glob/blob/bye &&
svn rm -m 'remove glob' $svnrepo/glob &&
git-svn init -i glob $svnrepo/glob &&
git-svn init --minimize-url -i glob $svnrepo/glob &&
git-svn fetch -i glob &&
test \"\`git cat-file blob refs/remotes/glob:blob/bye\`\" = hi &&
test \"\`git ls-tree refs/remotes/glob | wc -l \`\" -eq 1
Expand Down Expand Up @@ -127,7 +128,7 @@ test_expect_success 'follow-parent avoids deleting relevant info' "
poke native/t/c.t &&
svn commit -m 'reorg test' &&
cd .. &&
git-svn init -i r9270-t \
git-svn init --minimize-url -i r9270-t \
$svnrepo/r9270/trunk/subversion/bindings/swig/perl/native/t &&
git-svn fetch -i r9270-t &&
test \`git rev-list r9270-t | wc -l\` -eq 2 &&
Expand All @@ -137,7 +138,7 @@ test_expect_success 'follow-parent avoids deleting relevant info' "

test_expect_success "track initial change if it was only made to parent" "
svn cp -m 'wheee!' $svnrepo/r9270/trunk $svnrepo/r9270/drunk &&
git-svn init -i r9270-d \
git-svn init --minimize-url -i r9270-d \
$svnrepo/r9270/drunk/subversion/bindings/swig/perl/native/t &&
git-svn fetch -i r9270-d &&
test \`git rev-list r9270-d | wc -l\` -eq 3 &&
Expand Down
2 changes: 1 addition & 1 deletion t/t9105-git-svn-commit-diff.sh
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,7 @@ test_expect_success 'test the commit-diff command' "

test_expect_success 'commit-diff to a sub-directory (with git-svn config)' "
svn import -m 'sub-directory' import $svnrepo/subdir &&
git-svn init $svnrepo/subdir &&
git-svn init --minimize-url $svnrepo/subdir &&
git-svn fetch &&
git-svn commit-diff -r3 '$prev' '$head' &&
svn cat $svnrepo/subdir/readme > readme.2 &&
Expand Down
7 changes: 4 additions & 3 deletions t/t9110-git-svn-use-svm-props.sh
Original file line number Diff line number Diff line change
Expand Up @@ -9,9 +9,10 @@ test_description='git-svn useSvmProps test'

test_expect_success 'load svm repo' "
svnadmin load -q $rawsvnrepo < ../t9110/svm.dump &&
git-svn init -R arr -i bar $svnrepo/mirror/arr &&
git-svn init -R argh -i dir $svnrepo/mirror/argh &&
git-svn init -R argh -i e $svnrepo/mirror/argh/a/b/c/d/e &&
git-svn init --minimize-url -R arr -i bar $svnrepo/mirror/arr &&
git-svn init --minimize-url -R argh -i dir $svnrepo/mirror/argh &&
git-svn init --minimize-url -R argh -i e \
$svnrepo/mirror/argh/a/b/c/d/e &&
git-config svn.useSvmProps true &&
git-svn fetch --all
"
Expand Down
6 changes: 3 additions & 3 deletions t/t9111-git-svn-use-svnsync-props.sh
Original file line number Diff line number Diff line change
Expand Up @@ -9,9 +9,9 @@ test_description='git-svn useSvnsyncProps test'

test_expect_success 'load svnsync repo' "
svnadmin load -q $rawsvnrepo < ../t9111/svnsync.dump &&
git-svn init -R arr -i bar $svnrepo/bar &&
git-svn init -R argh -i dir $svnrepo/dir &&
git-svn init -R argh -i e $svnrepo/dir/a/b/c/d/e &&
git-svn init --minimize-url -R arr -i bar $svnrepo/bar &&
git-svn init --minimize-url -R argh -i dir $svnrepo/dir &&
git-svn init --minimize-url -R argh -i e $svnrepo/dir/a/b/c/d/e &&
git-config svn.useSvnsyncProps true &&
git-svn fetch --all
"
Expand Down

0 comments on commit 4a1bb4c

Please sign in to comment.