Mercurial > hg
view hgext/amend.py @ 40036:acf5dbe39478
showstack: also handle SIGALRM
This is looking *very* handy when debugging mysterious hangs in a
test: you can wrap a hanging invocation in
`perl -e 'alarm shift @ARGV; exec @ARGV' 1`
for example, a hanging `hg pull` becomes
`perl -e 'alarm shift @ARGV; exec @ARGV' 1 hg pull`
where the `1` is the timeout in seconds before the process will be hit
with SIGALRM. After making that edit to the test file, you can then
use --extra-config-opt on run-tests.py to globaly enable showstack
during the test run, so you'll get full stack traces as you force your
hg to exit.
I wonder (but only a little, not enough to take action just yet) if we
should wire up some scaffolding in run-tests itself to automatically
wrap all commands in alarm(3) somehow to avoid hangs in the future?
Differential Revision: https://phab.mercurial-scm.org/D4870
author | Augie Fackler <augie@google.com> |
---|---|
date | Wed, 03 Oct 2018 16:03:16 -0400 |
parents | 3e549546a6e9 |
children | c303d65d2e34 |
line wrap: on
line source
# amend.py - provide the amend command # # Copyright 2017 Facebook, Inc. # # This software may be used and distributed according to the terms of the # GNU General Public License version 2 or any later version. """provide the amend command (EXPERIMENTAL) This extension provides an ``amend`` command that is similar to ``commit --amend`` but does not prompt an editor. """ from __future__ import absolute_import from mercurial.i18n import _ from mercurial import ( cmdutil, commands, error, pycompat, registrar, ) # Note for extension authors: ONLY specify testedwith = 'ships-with-hg-core' for # extensions which SHIP WITH MERCURIAL. Non-mainline extensions should # be specifying the version(s) of Mercurial they are tested with, or # leave the attribute unspecified. testedwith = 'ships-with-hg-core' cmdtable = {} command = registrar.command(cmdtable) @command('amend', [('A', 'addremove', None, _('mark new/missing files as added/removed before committing')), ('e', 'edit', None, _('invoke editor on commit messages')), ('i', 'interactive', None, _('use interactive mode')), ('n', 'note', '', _('store a note on the amend')), ] + cmdutil.walkopts + cmdutil.commitopts + cmdutil.commitopts2, _('[OPTION]... [FILE]...'), inferrepo=True) def amend(ui, repo, *pats, **opts): """amend the working copy parent with all or specified outstanding changes Similar to :hg:`commit --amend`, but reuse the commit message without invoking editor, unless ``--edit`` was set. See :hg:`help commit` for more details. """ opts = pycompat.byteskwargs(opts) if len(opts['note']) > 255: raise error.Abort(_("cannot store a note of more than 255 bytes")) with repo.wlock(), repo.lock(): if not opts.get('logfile'): opts['message'] = opts.get('message') or repo['.'].description() opts['amend'] = True return commands._docommit(ui, repo, *pats, **pycompat.strkwargs(opts))