diff svncommands.py @ 247:1272e87546ed

Move help, update into svncommands.
author Dirkjan Ochtman <dirkjan@ochtman.nl>
date Wed, 08 Apr 2009 18:59:50 +0200
parents 074f27c68818
children c3d5c4ae9c7c
line wrap: on
line diff
--- a/svncommands.py
+++ b/svncommands.py
@@ -16,6 +16,8 @@ import cmdutil
 import util
 import utility_commands
 
+from util import generate_help, svn_subcommands, register_subcommand
+
 
 def pull(ui, svn_url, hg_repo_path, skipto_rev=0, stupid=None,
          tag_locations='tags', authors=None, filemap=None, **opts):
@@ -329,3 +331,53 @@ def rebuildmeta(ui, repo, hg_repo_path, 
     tagsinfofile.close()
 rebuildmeta = util.register_subcommand('rebuildmeta')(rebuildmeta)
 rebuildmeta = util.command_needs_no_url(rebuildmeta)
+
+
+def help(ui, args=None, **opts):
+    """show help for a given subcommands or a help overview
+    """
+    if args:
+        subcommand = args[0]
+        if subcommand not in svn_subcommands:
+            candidates = []
+            for c in svn_subcommands:
+                if c.startswith(subcommand):
+                    candidates.append(c)
+            if len(candidates) == 1:
+                subcommand = candidates[0]
+            elif len(candidates) > 1:
+                ui.status('Ambiguous command. Could have been:\n%s\n' %
+                          ' '.join(candidates))
+                return
+        doc = svn_subcommands[subcommand].__doc__
+        if doc is None:
+            doc = "No documentation available for %s." % subcommand
+        ui.status(doc.strip(), '\n')
+        return
+    ui.status(generate_help())
+help = register_subcommand('help')(help)
+
+
+def update(ui, args, repo, clean=False, **opts):
+    """update to a specified Subversion revision number
+    """
+    assert len(args) == 1
+    rev = int(args[0])
+    path = os.path.join(repo.path, 'svn', 'rev_map')
+    answers = []
+    for k,v in util.parse_revmap(path).iteritems():
+        if k[0] == rev:
+            answers.append((v, k[1]))
+    if len(answers) == 1:
+        if clean:
+            return hg.clean(repo, answers[0][0])
+        return hg.update(repo, answers[0][0])
+    elif len(answers) == 0:
+        ui.status('Revision %s did not produce an hg revision.\n' % rev)
+        return 1
+    else:
+        ui.status('Ambiguous revision!\n')
+        ui.status('\n'.join(['%s on %s' % (node.hex(a[0]), a[1]) for a in
+                             answers]+['']))
+    return 1
+update = register_subcommand('up')(update)