# HG changeset patch # User Dirkjan Ochtman # Date 1245152027 -7200 # Node ID 80909328aef1d6d8343d6804182b35919f73fe81 # Parent d8f84daf744d621cadf800a3f49f2693b72b3cc9 move remaining cmdutils into util diff --git a/hgsubversion/__init__.py b/hgsubversion/__init__.py --- a/hgsubversion/__init__.py +++ b/hgsubversion/__init__.py @@ -34,7 +34,7 @@ demandimport.ignore.append('svn') from svn import core import svncommands -import cmdutil +import util import svnrepo import wrappers @@ -134,7 +134,7 @@ def reposetup(ui, repo): def _lookup(url): - if cmdutil.islocalrepo(url): + if util.islocalrepo(url): return svnrepo else: return hg._local(url) diff --git a/hgsubversion/cmdutil.py b/hgsubversion/cmdutil.py deleted file mode 100644 --- a/hgsubversion/cmdutil.py +++ /dev/null @@ -1,59 +0,0 @@ -#!/usr/bin/python -import re -import os -import urllib - -import util - - -b_re = re.compile(r'^\+\+\+ b\/([^\n]*)', re.MULTILINE) -a_re = re.compile(r'^--- a\/([^\n]*)', re.MULTILINE) -devnull_re = re.compile(r'^([-+]{3}) /dev/null', re.MULTILINE) -header_re = re.compile(r'^diff --git .* b\/(.*)', re.MULTILINE) -newfile_devnull_re = re.compile(r'^--- /dev/null\n\+\+\+ b/([^\n]*)', - re.MULTILINE) - - -def formatrev(rev): - if rev == -1: - return '\t(working copy)' - return '\t(revision %d)' % rev - - -def filterdiff(diff, oldrev, newrev): - diff = newfile_devnull_re.sub(r'--- \1\t(revision 0)' '\n' - r'+++ \1\t(working copy)', - diff) - oldrev = formatrev(oldrev) - newrev = formatrev(newrev) - diff = a_re.sub(r'--- \1'+ oldrev, diff) - diff = b_re.sub(r'+++ \1' + newrev, diff) - diff = devnull_re.sub(r'\1 /dev/null\t(working copy)', diff) - diff = header_re.sub(r'Index: \1' + '\n' + ('=' * 67), diff) - return diff - - -def parentrev(ui, repo, meta, hashes): - """Find the svn parent revision of the repo's dirstate. - """ - workingctx = repo.parents()[0] - outrev = util.outgoing_revisions(repo, hashes, workingctx.node()) - if outrev: - workingctx = repo[outrev[-1]].parents()[0] - return workingctx - - -def islocalrepo(url): - if not url.startswith('file:///'): - return False - if '#' in url.split('/')[-1]: # strip off #anchor - url = url[:url.rfind('#')] - path = url[len('file://'):] - path = urllib.url2pathname(path).replace(os.sep, '/') - while '/' in path: - if reduce(lambda x,y: x and y, - map(lambda p: os.path.exists(os.path.join(path, p)), - ('hooks', 'format', 'db', ))): - return True - path = path.rsplit('/', 1)[0] - return False diff --git a/hgsubversion/util.py b/hgsubversion/util.py --- a/hgsubversion/util.py +++ b/hgsubversion/util.py @@ -1,10 +1,65 @@ +import re import os +import urllib from mercurial import hg from mercurial import node from mercurial import util as hgutil +b_re = re.compile(r'^\+\+\+ b\/([^\n]*)', re.MULTILINE) +a_re = re.compile(r'^--- a\/([^\n]*)', re.MULTILINE) +devnull_re = re.compile(r'^([-+]{3}) /dev/null', re.MULTILINE) +header_re = re.compile(r'^diff --git .* b\/(.*)', re.MULTILINE) +newfile_devnull_re = re.compile(r'^--- /dev/null\n\+\+\+ b/([^\n]*)', + re.MULTILINE) + + +def formatrev(rev): + if rev == -1: + return '\t(working copy)' + return '\t(revision %d)' % rev + + +def filterdiff(diff, oldrev, newrev): + diff = newfile_devnull_re.sub(r'--- \1\t(revision 0)' '\n' + r'+++ \1\t(working copy)', + diff) + oldrev = formatrev(oldrev) + newrev = formatrev(newrev) + diff = a_re.sub(r'--- \1'+ oldrev, diff) + diff = b_re.sub(r'+++ \1' + newrev, diff) + diff = devnull_re.sub(r'\1 /dev/null\t(working copy)', diff) + diff = header_re.sub(r'Index: \1' + '\n' + ('=' * 67), diff) + return diff + + +def parentrev(ui, repo, meta, hashes): + """Find the svn parent revision of the repo's dirstate. + """ + workingctx = repo.parents()[0] + outrev = outgoing_revisions(repo, hashes, workingctx.node()) + if outrev: + workingctx = repo[outrev[-1]].parents()[0] + return workingctx + + +def islocalrepo(url): + if not url.startswith('file:///'): + return False + if '#' in url.split('/')[-1]: # strip off #anchor + url = url[:url.rfind('#')] + path = url[len('file://'):] + path = urllib.url2pathname(path).replace(os.sep, '/') + while '/' in path: + if reduce(lambda x,y: x and y, + map(lambda p: os.path.exists(os.path.join(path, p)), + ('hooks', 'format', 'db', ))): + return True + path = path.rsplit('/', 1)[0] + return False + + def getuserpass(opts): # DO NOT default the user to hg's getuser(). If you provide # *any* default username to Subversion, it won't use any remembered diff --git a/hgsubversion/utility_commands.py b/hgsubversion/utility_commands.py --- a/hgsubversion/utility_commands.py +++ b/hgsubversion/utility_commands.py @@ -4,7 +4,6 @@ from mercurial import util as hgutil import svnmeta import svnwrap -import cmdutil import util def genignore(ui, repo, hg_repo_path, force=False, **opts): @@ -20,7 +19,7 @@ def genignore(ui, repo, hg_repo_path, fo svn = svnwrap.SubversionRepo(url, user, passwd) meta = svnmeta.SVNMeta(repo, svn.uuid) hashes = meta.revmap.hashes() - parent = cmdutil.parentrev(ui, repo, meta, hashes) + parent = util.parentrev(ui, repo, meta, hashes) r, br = hashes[parent.node()] if br == None: branchpath = 'trunk' @@ -48,7 +47,7 @@ def info(ui, repo, hg_repo_path, **opts) svn = svnwrap.SubversionRepo(url, user, passwd) meta = svnmeta.SVNMeta(repo, svn.uuid) hashes = meta.revmap.hashes() - parent = cmdutil.parentrev(ui, repo, meta, hashes) + parent = util.parentrev(ui, repo, meta, hashes) pn = parent.node() if pn not in hashes: ui.status('Not a child of an svn revision.\n') diff --git a/hgsubversion/wrappers.py b/hgsubversion/wrappers.py --- a/hgsubversion/wrappers.py +++ b/hgsubversion/wrappers.py @@ -1,6 +1,6 @@ from hgext import rebase as hgrebase -from mercurial import cmdutil as hgcmdutil +from mercurial import cmdutil from mercurial import patch from mercurial import hg from mercurial import util as hgutil @@ -10,7 +10,6 @@ from mercurial import i18n from svn import core from svn import delta -import cmdutil import svnmeta import replay import pushmod @@ -37,10 +36,10 @@ def parents(orig, ui, repo, *args, **opt return orig(ui, repo, *args, **opts) meta = svnmeta.SVNMeta(repo) hashes = meta.revmap.hashes() - ha = cmdutil.parentrev(ui, repo, meta, hashes) + ha = util.parentrev(ui, repo, meta, hashes) if ha.node() == node.nullid: raise hgutil.Abort('No parent svn revision!') - displayer = hgcmdutil.show_changeset(ui, repo, opts, buffered=False) + displayer = cmdutil.show_changeset(ui, repo, opts, buffered=False) displayer.show(ha) return 0 @@ -95,7 +94,7 @@ def diff(orig, ui, repo, *args, **opts): if o_r: parent = repo[o_r[-1]].parents()[0] opts['rev'] = ['%s:.' % node.hex(parent.node()), ] - node1, node2 = hgcmdutil.revpair(repo, opts['rev']) + node1, node2 = cmdutil.revpair(repo, opts['rev']) baserev, _junk = hashes.get(node1, (-1, 'junk')) newrev, _junk = hashes.get(node2, (-1, 'junk')) it = patch.diff(repo, node1, node2, @@ -107,7 +106,7 @@ def diff(orig, ui, repo, *args, **opts): 'unified': True, 'text': False, })) - ui.write(cmdutil.filterdiff(''.join(it), baserev, newrev)) + ui.write(util.filterdiff(''.join(it), baserev, newrev)) def push(repo, dest, force, revs): """push revisions starting at a specified head back to Subversion. @@ -374,7 +373,7 @@ def clone(orig, ui, source, dest=None, * ui.setconfig(section, name, str(opts.pop(opt))) # this must be kept in sync with mercurial/commands.py - srcrepo, dstrepo = hg.clone(hgcmdutil.remoteui(ui, opts), source, dest, + srcrepo, dstrepo = hg.clone(cmdutil.remoteui(ui, opts), source, dest, pull=opts.get('pull'), stream=opts.get('uncompressed'), rev=opts.get('rev'),