summaryrefslogtreecommitdiff
path: root/perl/Git
diff options
context:
space:
mode:
authorMichael G. Schwern <schwern@pobox.com>2012-07-28 09:38:31 (GMT)
committerEric Wong <normalperson@yhbt.net>2012-08-02 21:45:26 (GMT)
commit3def8d088499b94919de36305ce710487a5e2bb0 (patch)
treee8ae667b109905e54e28eeec54fdb784fb6483ed /perl/Git
parent8169a3908c72ce08763516745d726d8a2ac51a36 (diff)
downloadgit-3def8d088499b94919de36305ce710487a5e2bb0.zip
git-3def8d088499b94919de36305ce710487a5e2bb0.tar.gz
git-3def8d088499b94919de36305ce710487a5e2bb0.tar.bz2
git-svn: path canonicalization uses SVN API
All tests pass with SVN 1.6. SVN 1.7 remains broken, not worrying about it yet. SVN changed its path canonicalization API between 1.6 and 1.7. http://svnbook.red-bean.com/en/1.6/svn.developer.usingapi.html#svn.developer.usingapi.urlpath http://svnbook.red-bean.com/en/1.7/svn.developer.usingapi.html#svn.developer.usingapi.urlpath The SVN API does not accept foo/.. but it also doesn't canonicalize it. We have to do it ourselves. [ew: commit title, fall back if SVN <= 1.6 fails to canonicalize] Signed-off-by: Eric Wong <normalperson@yhbt.net>
Diffstat (limited to 'perl/Git')
-rw-r--r--perl/Git/SVN/Utils.pm24
1 files changed, 24 insertions, 0 deletions
diff --git a/perl/Git/SVN/Utils.pm b/perl/Git/SVN/Utils.pm
index 17ba698..f0b1b53 100644
--- a/perl/Git/SVN/Utils.pm
+++ b/perl/Git/SVN/Utils.pm
@@ -86,6 +86,30 @@ sub _collapse_dotdot {
sub canonicalize_path {
+ my $path = shift;
+ my $rv;
+
+ # The 1.7 way to do it
+ if ( defined &SVN::_Core::svn_dirent_canonicalize ) {
+ $path = _collapse_dotdot($path);
+ $rv = SVN::_Core::svn_dirent_canonicalize($path);
+ }
+ # The 1.6 way to do it
+ # This can return undef on subversion-perl-1.4.2-2.el5 (CentOS 5.2)
+ elsif ( defined &SVN::_Core::svn_path_canonicalize ) {
+ $path = _collapse_dotdot($path);
+ $rv = SVN::_Core::svn_path_canonicalize($path);
+ }
+
+ return $rv if defined $rv;
+
+ # No SVN API canonicalization is available, or the SVN API
+ # didn't return a successful result, do it ourselves
+ return _canonicalize_path_ourselves($path);
+}
+
+
+sub _canonicalize_path_ourselves {
my ($path) = @_;
my $dot_slash_added = 0;
if (substr($path, 0, 1) ne "/") {