changeset 6850:c6bb8fae3bd2

convert: normalize paths sent to svn get_log (issue 1219)
author Patrick Mezard <pmezard@gmail.com>
date Sun, 27 Jul 2008 17:09:33 +0200
parents 59c40c60d8d8
children 6ec941b6003d
files hgext/convert/subversion.py
diffstat 1 files changed, 22 insertions(+), 15 deletions(-) [+]
line wrap: on
line diff
--- a/hgext/convert/subversion.py	Fri Jul 25 20:43:41 2008 +0200
+++ b/hgext/convert/subversion.py	Sun Jul 27 17:09:33 2008 +0200
@@ -130,18 +130,6 @@
             self._stdout.close()
             self._stdout = None
 
-def get_log(url, paths, start, end, limit=0, discover_changed_paths=True,
-                strict_node_history=False):
-    args = [url, paths, start, end, limit, discover_changed_paths,
-            strict_node_history]
-    arg = encodeargs(args)
-    hgexe = util.hgexecutable()
-    cmd = '%s debugsvnlog' % util.shellquote(hgexe)
-    stdin, stdout = os.popen2(cmd, 'b')
-    stdin.write(arg)
-    stdin.close()
-    return logstream(stdout)
-
 # SVN conversion code stolen from bzr-svn and tailor
 #
 # Subversion looks like a versioned filesystem, branches structures
@@ -394,7 +382,7 @@
         tagspath = self.tags
         start = svn.ra.get_latest_revnum(self.ra)
         try:
-            for entry in get_log(self.url, [self.tags], start, self.startrev):
+            for entry in self._getlog([self.tags], start, self.startrev):
                 origpaths, revnum, author, date, message = entry
                 copies = [(e.copyfrom_path, e.copyfrom_rev, p) for p, e
                           in origpaths.iteritems() if e.copyfrom_path]
@@ -490,7 +478,7 @@
         # stat() gives us the previous revision on this line of development, but
         # it might be in *another module*. Fetch the log and detect renames down
         # to the latest revision.
-        stream = get_log(self.url, [path], stop, dirent.created_rev)
+        stream = self._getlog([path], stop, dirent.created_rev)
         try:
             for entry in stream:
                 paths, revnum, author, date, message = entry
@@ -814,7 +802,7 @@
         try:
             firstcset = None
             lastonbranch = False
-            stream = get_log(self.url, [self.module], from_revnum, to_revnum)
+            stream = self._getlog([self.module], from_revnum, to_revnum)
             try:
                 for entry in stream:
                     paths, revnum, author, date, message = entry
@@ -912,6 +900,25 @@
         # to PROPFIND subversion errors
         return svn.ra.check_path(self.ra, path.strip('/'), revnum)
 
+    def _getlog(self, paths, start, end, limit=0, discover_changed_paths=True,
+                strict_node_history=False):
+        # Normalize path names, svn >= 1.5 only wants paths relative to
+        # supplied URL
+        relpaths = []
+        for p in paths:
+            if not p.startswith('/'):
+                p = self.module + '/' + p
+            relpaths.append(p.strip('/'))
+        args = [self.base, relpaths, start, end, limit, discover_changed_paths,
+                strict_node_history]
+        arg = encodeargs(args)
+        hgexe = util.hgexecutable()
+        cmd = '%s debugsvnlog' % util.shellquote(hgexe)
+        stdin, stdout = os.popen2(cmd, 'b')
+        stdin.write(arg)
+        stdin.close()
+        return logstream(stdout)
+
 pre_revprop_change = '''#!/bin/sh
 
 REPOS="$1"