diff mercurial_all_paths.py @ 73:d262139732f7

Fixed to work against mercurial >= 4.1 (which requires using @command decorator for commands). (internally using mercurial_extension_utils to define command portably)
author Marcin Kasperski <Marcin.Kasperski@mekk.waw.pl>
date Thu, 18 May 2017 17:36:19 +0200
parents 95b5ba2cd363
children 03cc0603800e
line wrap: on
line diff
--- a/mercurial_all_paths.py	Thu May 18 17:35:36 2017 +0200
+++ b/mercurial_all_paths.py	Thu May 18 17:36:19 2017 +0200
@@ -12,6 +12,34 @@
 import mercurial.cmdutil
 from mercurial.i18n import _
 
+
+def import_meu():
+    """Importing mercurial_extension_utils so it can be found also outside
+    Python PATH (support for TortoiseHG/Win and similar setups)"""
+    try:
+        import mercurial_extension_utils
+    except ImportError:
+        my_dir = os.path.dirname(__file__)
+        sys.path.extend([
+            # In the same dir (manual or site-packages after pip)
+            my_dir,
+            # Developer clone
+            os.path.join(os.path.dirname(my_dir), "extension_utils"),
+            # Side clone
+            os.path.join(os.path.dirname(my_dir), "mercurial-extension_utils"),
+        ])
+        try:
+            import mercurial_extension_utils
+        except ImportError:
+            raise util.Abort(_("""Can not import mercurial_extension_utils.
+Please install this module in Python path.
+See Installation chapter in https://bitbucket.org/Mekk/mercurial-dynamic_username/ for details
+(and for info about TortoiseHG on Windows, or other bundled Python)."""))
+    return mercurial_extension_utils
+
+meu = import_meu()
+
+
 # pylint:disable=invalid-name,broad-except,line-too-long
 
 def _find_all_paths(ui, skip_ignored=False, sort_by_priority=False):
@@ -38,7 +66,7 @@
                 prior_val[item] = idx
             higher = len(prior)
             paths.sort(key = lambda it: prior_val.get(it[0], higher))
-        
+
     return paths
 
 def _find_paths(ui, group=None):
@@ -63,7 +91,7 @@
                 paths.append((item, all_paths[item]))
         if not paths:
             raise mercurial.util.Abort(_('None of the paths from group %s is defined in this repository') % group)
-            
+
         return paths
 
     # „Legacy” syntax, used also for all paths
@@ -71,7 +99,7 @@
     if not paths:
         raise mercurial.util.Abort(_('No paths defined in section %s') % group)
     return paths
-       
+
 
 def _iter_over_paths(command, ui, repo, add_sep, **opts):
     """execute given command on multiple paths"""
@@ -104,24 +132,11 @@
                 ui.warn(_('error handling %s: %s\n') % (alias, e))
                 sep = '\n'
 
-def pushall(ui, repo, **opts):
-    """execute push on multiple paths"""
-    _iter_over_paths(mercurial.commands.push, ui, repo, True, **opts)
 
-
-def pullall(ui, repo, **opts):
-    """execute pull on multiple paths"""
-    _iter_over_paths(mercurial.commands.pull, ui, repo, True, **opts)
-
-
-def incomingall(ui, repo, **opts):
-    """execute incoming on multiple paths"""
-    _iter_over_paths(mercurial.commands.incoming, ui, repo, False, **opts)
-
-
-def outgoingall(ui, repo, **opts):
-    """execute outgoing on multiple paths"""
-    _iter_over_paths(mercurial.commands.outgoing, ui, repo, False, **opts)
+EXT_OPTS = [
+    ('g', 'group', '', _('use a named group instead of all paths')),
+    ('', 'ignore-errors', None, _('continue execution despite errors')),
+]
 
 
 def _original_options(cmdname):
@@ -130,30 +145,41 @@
     return spec[1]
 
 
-EXT_OPTS = [
-    ('g', 'group', '', _('use a named group instead of all paths')),
-    ('', 'ignore-errors', None, _('continue execution despite errors')),
-]
+cmdtable = {}
+command = meu.command(cmdtable)
+
+
+@command("pushall",
+         EXT_OPTS + _original_options('push'),
+         _('[-g GROUP] [--ignore-errors] <push options>'))
+def pushall(ui, repo, **opts):
+    """execute push on multiple paths"""
+    _iter_over_paths(mercurial.commands.push, ui, repo, True, **opts)
+
+
+@command("pullall",
+         EXT_OPTS + _original_options('pull'),
+         _('[-g GROUP] [--ignore-errors] <pull options>'))
+def pullall(ui, repo, **opts):
+    """execute pull on multiple paths"""
+    _iter_over_paths(mercurial.commands.pull, ui, repo, True, **opts)
 
-cmdtable = {
-    "pushall": (
-        pushall,
-        EXT_OPTS + _original_options('push'),
-        _('[-g GROUP] [--ignore-errors] <push options>')),
-    "pullall": (
-        pullall,
-        EXT_OPTS + _original_options('pull'),
-        _('[-g GROUP] [--ignore-errors] <pull options>')),
-    # For incoming and outgoing -g is taken (--git diff format)
-    "incomingall": (
-        incomingall,
-        EXT_OPTS + _original_options('incoming'),
-        _('[--group GROUP] [--ignore-errors] <incoming options>')),
-    "outgoingall": (
-        outgoingall,
-        EXT_OPTS + _original_options('outgoing'),
-        _('[--group GROUP] [--ignore-errors] <outgoing options>')),
-}
+
+@command("incomingall",
+         EXT_OPTS + _original_options('incoming'),
+         _('[--group GROUP] [--ignore-errors] <incoming options>'))
+def incomingall(ui, repo, **opts):
+    """execute incoming on multiple paths"""
+    _iter_over_paths(mercurial.commands.incoming, ui, repo, False, **opts)
+
 
-testedwith = '2.7 2.9 3.0 3.3 3.6 3.7 3.8 4.0'
+@command("outgoingall",
+         EXT_OPTS + _original_options('outgoing'),
+         _('[--group GROUP] [--ignore-errors] <outgoing options>'))
+def outgoingall(ui, repo, **opts):
+    """execute outgoing on multiple paths"""
+    _iter_over_paths(mercurial.commands.outgoing, ui, repo, False, **opts)
+
+
+testedwith = '2.7 2.9 3.0 3.3 3.6 3.7 3.8 4.0 4.1 4.2'
 buglink = 'https://bitbucket.org/Mekk/mercurial-all_paths/issues'