# HG changeset patch # User Augie Fackler # Date 1352669512 21600 # Node ID ea8ef4dd967e806ed3d12aa9b8347e3b49c4ccd4 # Parent 82bbb3428684f1f899d62b8424cf1a527c9e830a# Parent 9ffa1daf7b082b7de82f7f8fa284d0172dd6c7c5 Merge with stable. diff --git a/hgsubversion/svnmeta.py b/hgsubversion/svnmeta.py --- 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): diff --git a/hgsubversion/util.py b/hgsubversion/util.py --- 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) diff --git a/hgsubversion/wrappers.py b/hgsubversion/wrappers.py --- 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: