# HG changeset patch # User Dan Villiom Podlaski Christiansen # Date 1352025256 -3600 # Node ID 336f4bce479a68c4d2b6fec7d5511f184d207408 # Parent 21197f5ee9de8d60e6121d47a1cebb65fb13aa0e consolidate revision parsing Accept HEAD for --rev and --skiprevs as well as --startrev, and make the error message more closely mirror the regular Mercurial error message. diff --git a/hgsubversion/util.py b/hgsubversion/util.py --- a/hgsubversion/util.py +++ b/hgsubversion/util.py @@ -377,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.upper() == 'HEAD': + 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: