Mercurial > hg-allpaths
diff allpaths.py @ 0:6f92e4c814d1
Initial commit.
author | Ludovic Chabant <ludovic@chabant.com> |
---|---|
date | Tue, 19 Feb 2013 17:29:34 -0800 |
parents | |
children | f8703c9e2fb9 |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/allpaths.py Tue Feb 19 17:29:34 2013 -0800 @@ -0,0 +1,52 @@ +# allpaths.py - execute commands on multiple paths +# +# This software may be used and distributed according to the terms of +# the GNU General Public License version 2 or any later version. + +'''execute commands on multiple paths''' + +import mercurial.util +import mercurial.commands +from mercurial.i18n import _ + +push_flags = ['force', 'rev', 'bookmark', 'branch', 'new-branch'] + +def pushall(ui, repo, *args, **opts): + """execute a push command on multiple paths""" + # Filter options that should be passed on to `push`. + push_opts = {} + for key in opts: + if key in push_flags: + push_opts[key] = opts[key] + + # Get the paths to push to. + group = opts.get('group') + paths = ui.configitems(group) + if not paths: + raise mercurial.util.Abort(_('No paths defined in section %s') % group) + + # Push! + for path in paths: + try: + mercurial.commands.push(ui, repo, **push_opts) + except Exception as e: + if not opts.get('ignore_errors'): + raise + ui.warn(_('error pushing to %s: %s') % (path, e)) + + +cmdtable = { + "pushall": + ( + pushall, + [ + ('g', 'group', 'paths', _('use a named group of paths')), + ('', 'ignore-errors', None, _('continue execution despite errors')), + ('f', 'force', None, _('force push')), + ('r', 'rev', [], _('a changeset intended to be included in the destination'), _('REV')), + ('B', 'bookmark', [], _('bookmark to push'), _('BOOKMARK')), + ('b', 'branch', [], _('a specific branch you would like to push'), _('BRANCH')), + ('', 'new-branch', False, _('allow pushing a new branch')) + ], + _('[-g GROUP] [--ignore-errors] <push options>')) + }