Skip to content

Commit 4a1bb4c

Browse files
Eric WongJunio C Hamano
authored andcommitted
git-svn: don't attempt to minimize URLs by default
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.
1 parent 4c03c3e commit 4a1bb4c

6 files changed

+19
-16
lines changed

git-svn.perl

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -80,6 +80,7 @@ BEGIN
8080
my %init_opts = ( 'template=s' => \$_template, 'shared:s' => \$_shared,
8181
'trunk|T=s' => \$_trunk, 'tags|t=s' => \$_tags,
8282
'branches|b=s' => \$_branches, 'prefix=s' => \$_prefix,
83+
'minimize-url|m' => \$Git::SVN::_minimize_url,
8384
'no-metadata' => sub { $icv{noMetadata} = 1 },
8485
'use-svm-props' => sub { $icv{useSvmProps} = 1 },
8586
'use-svnsync-props' => sub { $icv{useSvnsyncProps} = 1 },
@@ -820,7 +821,7 @@ package Git::SVN;
820821
use warnings;
821822
use vars qw/$default_repo_id $default_ref_id $_no_metadata $_follow_parent
822823
$_repack $_repack_flags $_use_svm_props $_head
823-
$_use_svnsync_props $no_reuse_existing/;
824+
$_use_svnsync_props $no_reuse_existing $_minimize_url/;
824825
use Carp qw/croak/;
825826
use File::Path qw/mkpath/;
826827
use File::Copy qw/copy/;
@@ -1037,7 +1038,7 @@ sub init_remote_config {
10371038
"[svn-remote \"$existing\"]\n";
10381039
}
10391040
$self->{repo_id} = $existing;
1040-
} else {
1041+
} elsif ($_minimize_url) {
10411042
my $min_url = Git::SVN::Ra->new($url)->minimize_url;
10421043
$existing = find_existing_remote($min_url, $r);
10431044
if ($existing) {

t/t9100-git-svn-basic.sh

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -229,7 +229,7 @@ test_expect_failure 'exit if init-ing a would clobber a URL' "
229229

230230
test_expect_success \
231231
'init allows us to connect to another directory in the same repo' "
232-
git-svn init -i bar $svnrepo/bar &&
232+
git-svn init --minimize-url -i bar $svnrepo/bar &&
233233
git config --get svn-remote.svn.fetch \
234234
'^bar:refs/remotes/bar$' &&
235235
git config --get svn-remote.svn.fetch \

t/t9104-git-svn-follow-parent.sh

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@ test_expect_success 'initialize repo' "
2828
"
2929

3030
test_expect_success 'init and fetch a moved directory' "
31-
git-svn init -i thunk $svnrepo/thunk &&
31+
git-svn init --minimize-url -i thunk $svnrepo/thunk &&
3232
git-svn fetch -i thunk &&
3333
test \"\`git-rev-parse --verify refs/remotes/thunk@2\`\" \
3434
= \"\`git-rev-parse --verify refs/remotes/thunk~1\`\" &&
@@ -68,7 +68,8 @@ test_expect_success 'follow larger parent' "
6868
echo hi > import/trunk/thunk/bump/thud/file &&
6969
svn import -m 'import a larger parent' import $svnrepo/larger-parent &&
7070
svn cp -m 'hi' $svnrepo/larger-parent $svnrepo/another-larger &&
71-
git-svn init -i larger $svnrepo/another-larger/trunk/thunk/bump/thud &&
71+
git-svn init --minimize-url -i larger \
72+
$svnrepo/another-larger/trunk/thunk/bump/thud &&
7273
git-svn fetch -i larger &&
7374
git-rev-parse --verify refs/remotes/larger &&
7475
git-rev-parse --verify \
@@ -90,14 +91,14 @@ test_expect_success 'follow higher-level parent' "
9091
cd ..
9192
svn mkdir -m 'new glob at top level' $svnrepo/glob &&
9293
svn mv -m 'move blob down a level' $svnrepo/blob $svnrepo/glob/blob &&
93-
git-svn init -i blob $svnrepo/glob/blob &&
94+
git-svn init --minimize-url -i blob $svnrepo/glob/blob &&
9495
git-svn fetch -i blob
9596
"
9697

9798
test_expect_success 'follow deleted directory' "
9899
svn mv -m 'bye!' $svnrepo/glob/blob/hi $svnrepo/glob/blob/bye &&
99100
svn rm -m 'remove glob' $svnrepo/glob &&
100-
git-svn init -i glob $svnrepo/glob &&
101+
git-svn init --minimize-url -i glob $svnrepo/glob &&
101102
git-svn fetch -i glob &&
102103
test \"\`git cat-file blob refs/remotes/glob:blob/bye\`\" = hi &&
103104
test \"\`git ls-tree refs/remotes/glob | wc -l \`\" -eq 1
@@ -127,7 +128,7 @@ test_expect_success 'follow-parent avoids deleting relevant info' "
127128
poke native/t/c.t &&
128129
svn commit -m 'reorg test' &&
129130
cd .. &&
130-
git-svn init -i r9270-t \
131+
git-svn init --minimize-url -i r9270-t \
131132
$svnrepo/r9270/trunk/subversion/bindings/swig/perl/native/t &&
132133
git-svn fetch -i r9270-t &&
133134
test \`git rev-list r9270-t | wc -l\` -eq 2 &&
@@ -137,7 +138,7 @@ test_expect_success 'follow-parent avoids deleting relevant info' "
137138

138139
test_expect_success "track initial change if it was only made to parent" "
139140
svn cp -m 'wheee!' $svnrepo/r9270/trunk $svnrepo/r9270/drunk &&
140-
git-svn init -i r9270-d \
141+
git-svn init --minimize-url -i r9270-d \
141142
$svnrepo/r9270/drunk/subversion/bindings/swig/perl/native/t &&
142143
git-svn fetch -i r9270-d &&
143144
test \`git rev-list r9270-d | wc -l\` -eq 3 &&

t/t9105-git-svn-commit-diff.sh

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@ test_expect_success 'test the commit-diff command' "
3333

3434
test_expect_success 'commit-diff to a sub-directory (with git-svn config)' "
3535
svn import -m 'sub-directory' import $svnrepo/subdir &&
36-
git-svn init $svnrepo/subdir &&
36+
git-svn init --minimize-url $svnrepo/subdir &&
3737
git-svn fetch &&
3838
git-svn commit-diff -r3 '$prev' '$head' &&
3939
svn cat $svnrepo/subdir/readme > readme.2 &&

t/t9110-git-svn-use-svm-props.sh

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -9,9 +9,10 @@ test_description='git-svn useSvmProps test'
99

1010
test_expect_success 'load svm repo' "
1111
svnadmin load -q $rawsvnrepo < ../t9110/svm.dump &&
12-
git-svn init -R arr -i bar $svnrepo/mirror/arr &&
13-
git-svn init -R argh -i dir $svnrepo/mirror/argh &&
14-
git-svn init -R argh -i e $svnrepo/mirror/argh/a/b/c/d/e &&
12+
git-svn init --minimize-url -R arr -i bar $svnrepo/mirror/arr &&
13+
git-svn init --minimize-url -R argh -i dir $svnrepo/mirror/argh &&
14+
git-svn init --minimize-url -R argh -i e \
15+
$svnrepo/mirror/argh/a/b/c/d/e &&
1516
git-config svn.useSvmProps true &&
1617
git-svn fetch --all
1718
"

t/t9111-git-svn-use-svnsync-props.sh

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -9,9 +9,9 @@ test_description='git-svn useSvnsyncProps test'
99

1010
test_expect_success 'load svnsync repo' "
1111
svnadmin load -q $rawsvnrepo < ../t9111/svnsync.dump &&
12-
git-svn init -R arr -i bar $svnrepo/bar &&
13-
git-svn init -R argh -i dir $svnrepo/dir &&
14-
git-svn init -R argh -i e $svnrepo/dir/a/b/c/d/e &&
12+
git-svn init --minimize-url -R arr -i bar $svnrepo/bar &&
13+
git-svn init --minimize-url -R argh -i dir $svnrepo/dir &&
14+
git-svn init --minimize-url -R argh -i e $svnrepo/dir/a/b/c/d/e &&
1515
git-config svn.useSvnsyncProps true &&
1616
git-svn fetch --all
1717
"

0 commit comments

Comments
 (0)