@@ -59,6 +59,7 @@ sub _req_svn {
5959use Getopt::Long qw/ :config gnu_getopt no_ignore_case auto_abbrev/ ;
6060use IPC::Open3;
6161use Git;
62+ use Memoize; # core since 5.8.0, Jul 2002
6263
6364BEGIN {
6465 # import functions from Git into our packages, en masse
7273 *{" ${package} ::$_ " } = \&{" Git::$_ " };
7374 }
7475 }
76+ Memoize::memoize ' Git::config' ;
77+ Memoize::memoize ' Git::config_bool' ;
7578}
7679
7780my ($SVN );
@@ -528,7 +531,7 @@ sub cmd_dcommit {
528531 $url = eval { command_oneline(' config' , ' --get' ,
529532 " svn-remote.$gs ->{repo_id}.commiturl" ) };
530533 if (!$url ) {
531- $url = $gs -> full_url
534+ $url = $gs -> full_pushurl
532535 }
533536 }
534537
@@ -676,7 +679,7 @@ sub cmd_branch {
676679 $head ||= ' HEAD' ;
677680
678681 my (undef , $rev , undef , $gs ) = working_head_info($head );
679- my $src = $gs -> full_url ;
682+ my $src = $gs -> full_pushurl ;
680683
681684 my $remote = Git::SVN::read_all_remotes()-> {$gs -> {repo_id }};
682685 my $allglobs = $remote -> { $_tag ? ' tags' : ' branches' };
@@ -727,7 +730,7 @@ sub cmd_branch {
727730 $url = eval { command_oneline(' config' , ' --get' ,
728731 " svn-remote.$gs ->{repo_id}.commiturl" ) };
729732 if (!$url ) {
730- $url = $remote -> {url };
733+ $url = $remote -> {pushurl } || $remote -> { url };
731734 }
732735 }
733736 my $dst = join ' /' , $url , $lft , $branch_name , ($rgt || ());
@@ -1831,6 +1834,8 @@ sub read_all_remotes {
18311834 $r -> {$1 }-> {svm } = {};
18321835 } elsif (m ! ^(.+)\. url=\s *(.*)\s *$ ! ) {
18331836 $r -> {$1 }-> {url } = $2 ;
1837+ } elsif (m ! ^(.+)\. pushurl=\s *(.*)\s *$ ! ) {
1838+ $r -> {$1 }-> {pushurl } = $2 ;
18341839 } elsif (m ! ^(.+)\. (branches|tags)=$svn_refspec $ ! ) {
18351840 my ($remote , $t , $local_ref , $remote_ref ) =
18361841 ($1 , $2 , $3 , $4 );
@@ -2068,6 +2073,8 @@ sub new {
20682073 $self -> {url } = command_oneline(' config' , ' --get' ,
20692074 " svn-remote.$repo_id .url" ) or
20702075 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" ) };
20712078 $self -> rebuild;
20722079 $self ;
20732080}
@@ -2545,6 +2552,15 @@ sub full_url {
25452552 $self -> {url } . (length $self -> {path } ? ' /' . $self -> {path } : ' ' );
25462553}
25472554
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+ }
25482564
25492565sub set_commit_header_env {
25502566 my ($log_entry ) = @_ ;
@@ -3197,6 +3213,8 @@ sub has_no_changes {
31973213 Memoize::unmemoize ' check_cherry_pick' ;
31983214 Memoize::unmemoize ' has_no_changes' ;
31993215 }
3216+
3217+ Memoize::memoize ' Git::SVN::repos_root' ;
32003218}
32013219
32023220END {
0 commit comments