@@ -59,6 +59,7 @@ sub _req_svn {
59
59
use Getopt::Long qw/ :config gnu_getopt no_ignore_case auto_abbrev/ ;
60
60
use IPC::Open3;
61
61
use Git;
62
+ use Memoize; # core since 5.8.0, Jul 2002
62
63
63
64
BEGIN {
64
65
# import functions from Git into our packages, en masse
72
73
*{" ${package} ::$_ " } = \&{" Git::$_ " };
73
74
}
74
75
}
76
+ Memoize::memoize ' Git::config' ;
77
+ Memoize::memoize ' Git::config_bool' ;
75
78
}
76
79
77
80
my ($SVN );
@@ -528,7 +531,7 @@ sub cmd_dcommit {
528
531
$url = eval { command_oneline(' config' , ' --get' ,
529
532
" svn-remote.$gs ->{repo_id}.commiturl" ) };
530
533
if (!$url ) {
531
- $url = $gs -> full_url
534
+ $url = $gs -> full_pushurl
532
535
}
533
536
}
534
537
@@ -676,7 +679,7 @@ sub cmd_branch {
676
679
$head ||= ' HEAD' ;
677
680
678
681
my (undef , $rev , undef , $gs ) = working_head_info($head );
679
- my $src = $gs -> full_url ;
682
+ my $src = $gs -> full_pushurl ;
680
683
681
684
my $remote = Git::SVN::read_all_remotes()-> {$gs -> {repo_id }};
682
685
my $allglobs = $remote -> { $_tag ? ' tags' : ' branches' };
@@ -727,7 +730,7 @@ sub cmd_branch {
727
730
$url = eval { command_oneline(' config' , ' --get' ,
728
731
" svn-remote.$gs ->{repo_id}.commiturl" ) };
729
732
if (!$url ) {
730
- $url = $remote -> {url };
733
+ $url = $remote -> {pushurl } || $remote -> { url };
731
734
}
732
735
}
733
736
my $dst = join ' /' , $url , $lft , $branch_name , ($rgt || ());
@@ -1831,6 +1834,8 @@ sub read_all_remotes {
1831
1834
$r -> {$1 }-> {svm } = {};
1832
1835
} elsif (m ! ^(.+)\. url=\s *(.*)\s *$ ! ) {
1833
1836
$r -> {$1 }-> {url } = $2 ;
1837
+ } elsif (m ! ^(.+)\. pushurl=\s *(.*)\s *$ ! ) {
1838
+ $r -> {$1 }-> {pushurl } = $2 ;
1834
1839
} elsif (m ! ^(.+)\. (branches|tags)=$svn_refspec $ ! ) {
1835
1840
my ($remote , $t , $local_ref , $remote_ref ) =
1836
1841
($1 , $2 , $3 , $4 );
@@ -2068,6 +2073,8 @@ sub new {
2068
2073
$self -> {url } = command_oneline(' config' , ' --get' ,
2069
2074
" svn-remote.$repo_id .url" ) or
2070
2075
die " Failed to read \" svn-remote.$repo_id .url\" in config\n " ;
2076
+ $self -> {pushurl } = eval { command_oneline(' config' , ' --get' ,
2077
+ " svn-remote.$repo_id .pushurl" ) };
2071
2078
$self -> rebuild;
2072
2079
$self ;
2073
2080
}
@@ -2545,6 +2552,15 @@ sub full_url {
2545
2552
$self -> {url } . (length $self -> {path } ? ' /' . $self -> {path } : ' ' );
2546
2553
}
2547
2554
2555
+ sub full_pushurl {
2556
+ my ($self ) = @_ ;
2557
+ if ($self -> {pushurl }) {
2558
+ return $self -> {pushurl } . (length $self -> {path } ? ' /' .
2559
+ $self -> {path } : ' ' );
2560
+ } else {
2561
+ return $self -> full_url;
2562
+ }
2563
+ }
2548
2564
2549
2565
sub set_commit_header_env {
2550
2566
my ($log_entry ) = @_ ;
@@ -3197,6 +3213,8 @@ sub has_no_changes {
3197
3213
Memoize::unmemoize ' check_cherry_pick' ;
3198
3214
Memoize::unmemoize ' has_no_changes' ;
3199
3215
}
3216
+
3217
+ Memoize::memoize ' Git::SVN::repos_root' ;
3200
3218
}
3201
3219
3202
3220
END {
0 commit comments