Re: [PATCH] git-svn: Make branch use correct svn-remote
Deskin Miller <deskinm@umich.edu> wrote:
Show 10 quoted lines
> The 'branch' subcommand incorrectly had the svn-remote to use hardcoded
> as 'svn', the default remote name. This meant that branches derived
> from other svn-remotes would try to use the branch and tag configuration
> for the 'svn' remote, potentially copying would-be branches to the wrong
> place in SVN, into the branch namespace for another project.
>
> Fix this by using the remote name extracted from the svn info for the
> specified git ref. Add a testcase for this behaviour.
>
> Signed-off-by: Deskin Miller <deskinm@umich.edu>
Looks alright to me, thanks Deskin.
Acked-by: Eric Wong <normalperson@yhbt.net>
Show 51 quoted lines
> ---
> Applies on v1.6.1-rc1. Apologies for not catching this when first
> writing testcases for the branch subcommand.
>
> Deskin Miller
>
> git-svn.perl | 2 +-
> t/t9128-git-svn-cmd-branch.sh | 17 +++++++++++++++++
> 2 files changed, 18 insertions(+), 1 deletions(-)
>
> diff --git a/git-svn.perl b/git-svn.perl
> index 914c707..e64e97b 100755
> --- a/git-svn.perl
> +++ b/git-svn.perl
> @@ -558,7 +558,7 @@ sub cmd_branch {
>
> my ($src, $rev, undef, $gs) = working_head_info($head);
>
> - my $remote = Git::SVN::read_all_remotes()->{svn};
> + my $remote = Git::SVN::read_all_remotes()->{$gs->{repo_id}};
> my $glob = $remote->{ $_tag ? 'tags' : 'branches' };
> my ($lft, $rgt) = @{ $glob->{path} }{qw/left right/};
> my $dst = join '/', $remote->{url}, $lft, $branch_name, ($rgt || ());
> diff --git a/t/t9128-git-svn-cmd-branch.sh b/t/t9128-git-svn-cmd-branch.sh
> index 47c4d4d..e2b6696 100755
> --- a/t/t9128-git-svn-cmd-branch.sh
> +++ b/t/t9128-git-svn-cmd-branch.sh
> @@ -56,4 +56,21 @@ test_expect_success 'git svn branch tests' '
> test_must_fail git svn tag tag1
> '
>
> +test_expect_success 'branch uses correct svn-remote' '
> + (svn co "$svnrepo" svn &&
> + cd svn &&
> + mkdir mirror &&
> + svn add mirror &&
> + svn copy trunk tags branches mirror/ &&
> + svn ci -m "made mirror" ) &&
> + rm -rf svn &&
> + git svn init -s -R mirror --prefix=mirror/ "$svnrepo"/mirror &&
> + git svn fetch -R mirror &&
> + git checkout mirror/trunk &&
> + base=$(git rev-parse HEAD:) &&
> + git svn branch -m "branch in mirror" d &&
> + test $base = $(git rev-parse remotes/mirror/d:) &&
> + test_must_fail git rev-parse remotes/d
> +'
> +
> test_done
> --
> 1.6.1.rc1