changeset 982:ea8ef4dd967e

Merge with stable.
author Augie Fackler <raf@durin42.com>
date Sun, 11 Nov 2012 15:31:52 -0600
parents 82bbb3428684 (current diff) 9ffa1daf7b08 (diff)
children 0ba09ecf5df2
files hgsubversion/wrappers.py
diffstat 3 files changed, 22 insertions(+), 20 deletions(-) [+]
line wrap: on
line diff
--- a/hgsubversion/svnmeta.py
+++ b/hgsubversion/svnmeta.py
@@ -48,13 +48,13 @@ class SVNMeta(object):
         self.revmap = maps.RevMap(repo)
 
         author_host = self.ui.config('hgsubversion', 'defaulthost', uuid)
-        authors = self.ui.config('hgsubversion', 'authormap')
+        authors = util.configpath(self.ui, 'authormap')
         tag_locations = self.ui.configlist('hgsubversion', 'tagpaths', ['tags'])
         self.usebranchnames = self.ui.configbool('hgsubversion',
                                                  'usebranchnames', True)
-        branchmap = self.ui.config('hgsubversion', 'branchmap')
-        tagmap = self.ui.config('hgsubversion', 'tagmap')
-        filemap = self.ui.config('hgsubversion', 'filemap')
+        branchmap = util.configpath(self.ui, 'branchmap')
+        tagmap = util.configpath(self.ui, 'tagmap')
+        filemap = util.configpath(self.ui, 'filemap')
 
         self.branches = {}
         if os.path.exists(self.branch_info_file):
--- a/hgsubversion/util.py
+++ b/hgsubversion/util.py
@@ -32,6 +32,9 @@ def formatrev(rev):
         return '\t(working copy)'
     return '\t(revision %d)' % rev
 
+def configpath(ui, name):
+    path = ui.config('hgsubversion', name)
+    return path and hgutil.expandpath(path)
 
 def filterdiff(diff, oldrev, newrev):
     diff = newfile_devnull_re.sub(r'--- \1\t(revision 0)' '\n'
@@ -374,3 +377,13 @@ def lrucachefunc(func, size):
             return cache[args]
 
     return f
+
+def parse_revnum(svnrepo, r):
+    try:
+        return int(r or 0)
+    except ValueError:
+        if isinstance(r, str) and r.lower() in ('head', 'tip'):
+            return svnrepo.last_changed_rev
+        else:
+            # TODO: use error.RepoLookupError when we drop 1.3?
+            raise hgutil.Abort("unknown Subversion revision %r" % r)
--- a/hgsubversion/wrappers.py
+++ b/hgsubversion/wrappers.py
@@ -307,12 +307,6 @@ def pull(repo, source, heads=[], force=F
     old_encoding = util.swap_out_encoding()
     total = None
     try:
-        try:
-            stopat_rev = int(checkout or 0)
-        except ValueError:
-            raise hgutil.Abort('unrecognised Subversion revision %s: '
-                               'only numbers work.' % checkout)
-
         have_replay = not repo.ui.configbool('hgsubversion', 'stupid')
         if not have_replay:
             repo.ui.note('fetching stupidly...\n')
@@ -320,6 +314,8 @@ def pull(repo, source, heads=[], force=F
         svn = source.svn
         meta = repo.svnmeta(svn.uuid, svn.subdir)
 
+        stopat_rev = util.parse_revnum(svn, checkout)
+
         layout = repo.ui.config('hgsubversion', 'layout', 'auto')
         if layout == 'auto':
             try:
@@ -349,11 +345,8 @@ def pull(repo, source, heads=[], force=F
 
         if start <= 0:
             # we are initializing a new repository
-            start = repo.ui.config('hgsubversion', 'startrev', 0)
-            if isinstance(start, str) and start.upper() == 'HEAD':
-                start = svn.last_changed_rev
-            else:
-                start = int(start)
+            start = util.parse_revnum(svn, repo.ui.config('hgsubversion',
+                                                          'startrev', 0))
 
             if start > 0:
                 if layout == 'standard':
@@ -369,11 +362,7 @@ def pull(repo, source, heads=[], force=F
                 start = 0
 
         skiprevs = repo.ui.configlist('hgsubversion', 'unsafeskip', '')
-        try:
-            skiprevs = set(map(int, skiprevs))
-        except ValueError:
-            raise hgutil.Abort('unrecognised Subversion revisions %r: '
-                               'only numbers work.' % checkout)
+        skiprevs = set(util.parse_revnum(svn, r) for r in skiprevs)
 
         oldrevisions = len(meta.revmap)
         if stopat_rev: