diff hgsubversion/wrappers.py @ 416:cd6317fe70be

invert the svnmeta/editor relationship
author Dirkjan Ochtman <dirkjan@ochtman.nl>
date Thu, 11 Jun 2009 18:49:52 +0200
parents b17b2969861c
children 92beeefeaf93
line wrap: on
line diff
--- a/hgsubversion/wrappers.py
+++ b/hgsubversion/wrappers.py
@@ -14,7 +14,7 @@ from svn import core
 from svn import delta
 
 import cmdutil
-import hg_delta_editor
+import svnmeta
 import stupid as stupidmod
 import svnwrap
 import util
@@ -36,9 +36,9 @@ def parents(orig, ui, repo, *args, **opt
     """
     if not opts.get('svn', False):
         return orig(ui, repo, *args, **opts)
-    hge = hg_delta_editor.HgChangeReceiver(repo)
-    hashes = hge.meta.revmap.hashes()
-    ha = cmdutil.parentrev(ui, repo, hge, hashes)
+    meta = svnmeta.SVNMeta(repo)
+    hashes = meta.revmap.hashes()
+    ha = cmdutil.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)
@@ -57,10 +57,10 @@ def incoming(orig, ui, repo, source='def
 
     user, passwd = util.getuserpass(opts)
     svn = svnwrap.SubversionRepo(other.svnurl, user, passwd)
-    hg_editor = hg_delta_editor.HgChangeReceiver(repo)
+    meta = svnmeta.SVNMeta(repo)
 
     ui.status('incoming changes from %s\n' % other.svnurl)
-    for r in svn.revisions(start=hg_editor.meta.revmap.seen):
+    for r in svn.revisions(start=meta.revmap.seen):
         ui.status('\n')
         for label, attr in revmeta:
             l1 = label + ':'
@@ -77,10 +77,10 @@ def outgoing(repo, dest=None, heads=None
 
     # split off #rev; TODO implement --revision/#rev support
     svnurl, revs, checkout = hg.parseurl(dest.svnurl, heads)
-    hge = hg_delta_editor.HgChangeReceiver(repo)
+    meta = svnmeta.SVNMeta(repo)
     parent = repo.parents()[0].node()
-    hashes = hge.meta.revmap.hashes()
-    return util.outgoing_revisions(repo.ui, repo, hge, hashes, parent)
+    hashes = meta.revmap.hashes()
+    return util.outgoing_revisions(repo, hashes, parent)
 
 
 def diff(orig, ui, repo, *args, **opts):
@@ -88,11 +88,11 @@ def diff(orig, ui, repo, *args, **opts):
     """
     if not opts.get('svn', False) or opts.get('change', None):
         return orig(ui, repo, *args, **opts)
-    hge = hg_delta_editor.HgChangeReceiver(repo)
-    hashes = hge.meta.revmap.hashes()
+    meta = svnmeta.SVNMeta(repo)
+    hashes = meta.revmap.hashes()
     if not opts.get('rev', None):
         parent = repo.parents()[0]
-        o_r = util.outgoing_revisions(ui, repo, hge, hashes, parent.node())
+        o_r = util.outgoing_revisions(repo, hashes, parent.node())
         if o_r:
             parent = repo[o_r[-1]].parents()[0]
         opts['rev'] = ['%s:.' % node.hex(parent.node()), ]
@@ -123,7 +123,7 @@ def push(repo, dest, force, revs):
     user = repo.ui.config('hgsubversion', 'username')
     passwd = repo.ui.config('hgsubversion', 'password')
     svn = svnwrap.SubversionRepo(svnurl, user, passwd)
-    hge = hg_delta_editor.HgChangeReceiver(repo, svn.uuid)
+    meta = svnmeta.SVNMeta(repo, svn.uuid)
 
     # Strategy:
     # 1. Find all outgoing commits from this head
@@ -132,8 +132,8 @@ def push(repo, dest, force, revs):
         return 1
     workingrev = repo.parents()[0]
     ui.status('searching for changes\n')
-    hashes = hge.meta.revmap.hashes()
-    outgoing = util.outgoing_revisions(ui, repo, hge, hashes, workingrev.node())
+    hashes = meta.revmap.hashes()
+    outgoing = util.outgoing_revisions(repo, hashes, workingrev.node())
     if not (outgoing and len(outgoing)):
         ui.status('no changes found\n')
         return 0
@@ -157,7 +157,7 @@ def push(repo, dest, force, revs):
         # 2. Commit oldest revision that needs to be pushed
         base_revision = hashes[base_n][0]
         try:
-            cmdutil.commit_from_rev(ui, repo, old_ctx, hge, svnurl,
+            cmdutil.commit_from_rev(ui, repo, old_ctx, meta, svnurl,
                                     base_revision, user, passwd)
         except cmdutil.NoFilesException:
             ui.warn("Could not push revision %s because it had no changes in svn.\n" %
@@ -183,7 +183,7 @@ def push(repo, dest, force, revs):
             # TODO: can we avoid calling our own rebase wrapper here?
             rebase(hgrebase.rebase, ui, repo, svn=True, svnextrafn=extrafn,
                    svnsourcerev=needs_transplant)
-            repo = hg.repository(ui, hge.meta.path)
+            repo = hg.repository(ui, meta.path)
             for child in repo[replacement.node()].children():
                 rebasesrc = node.bin(child.extra().get('rebase_source', node.hex(node.nullid)))
                 if rebasesrc in outgoing:
@@ -195,9 +195,9 @@ def push(repo, dest, force, revs):
                         if children:
                             child = children[0]
                         rebasesrc = node.bin(child.extra().get('rebase_source', node.hex(node.nullid)))
-        # TODO: stop constantly creating the HgChangeReceiver instances.
-        hge = hg_delta_editor.HgChangeReceiver(hge.repo, svn.uuid)
-        hashes = hge.meta.revmap.hashes()
+        # TODO: stop constantly creating the SVNMeta instances.
+        meta = svnmeta.SVNMeta(meta.repo, svn.uuid)
+        hashes = meta.revmap.hashes()
     util.swap_out_encoding(old_encoding)
     return 0
 
@@ -235,10 +235,10 @@ def pull(repo, source, heads=[], force=F
     user = repo.ui.config('hgsubversion', 'username')
     passwd = repo.ui.config('hgsubversion', 'password')
     svn = svnwrap.SubversionRepo(svn_url, user, passwd)
-    hg_editor = hg_delta_editor.HgChangeReceiver(repo, svn.uuid, svn.subdir)
+    meta = svnmeta.SVNMeta(repo, svn.uuid, svn.subdir)
 
-    start = max(hg_editor.meta.revmap.seen, skipto_rev)
-    initializing_repo = hg_editor.meta.revmap.seen <= 0
+    start = max(meta.revmap.seen, skipto_rev)
+    initializing_repo = meta.revmap.seen <= 0
     ui = repo.ui
 
     if initializing_repo and start > 0:
@@ -253,14 +253,14 @@ def pull(repo, source, heads=[], force=F
                 if (r.author is None and
                     r.message == 'This is an empty revision for padding.'):
                     continue
-                tbdelta = hg_editor.meta.update_branch_tag_map_for_rev(r)
+                tbdelta = meta.update_branch_tag_map_for_rev(r)
                 # got a 502? Try more than once!
                 tries = 0
                 converted = False
                 while not converted:
                     try:
                         util.describe_revision(ui, r)
-                        pullfuns[have_replay](ui, hg_editor, svn, r, tbdelta)
+                        pullfuns[have_replay](ui, meta, svn, r, tbdelta)
                         converted = True
                     except svnwrap.SubversionRepoCanNotReplay, e: #pragma: no cover
                         ui.status('%s\n' % e.message)
@@ -304,9 +304,9 @@ def rebase(orig, ui, repo, **opts):
         extra['branch'] = ctx.branch()
     extrafn = opts.get('svnextrafn', extrafn2)
     sourcerev = opts.get('svnsourcerev', repo.parents()[0].node())
-    hge = hg_delta_editor.HgChangeReceiver(repo)
-    hashes = hge.meta.revmap.hashes()
-    o_r = util.outgoing_revisions(ui, repo, hge, hashes, sourcerev=sourcerev)
+    meta = svnmeta.SVNMeta(repo)
+    hashes = meta.revmap.hashes()
+    o_r = util.outgoing_revisions(repo, hashes, sourcerev=sourcerev)
     if not o_r:
         ui.status('Nothing to rebase!\n')
         return 0