Mercurial > hg-stable
changeset 41759:1040d54eb7eb
uncommit: add config option to keep commit by default
We have a Google-internal extension that keeps track of "review units"
(like Phabricator reviews, or Gerrit's Change-Id). This information is
stored outside of the commit. It is updated with rewrites. Every now
and then we get reports from users who are confused because `hg
uncommit` lost track of their review. Keeping the empty commit by
default would reduce this confusion. It may also cause confusion about
the empty commit. This patch adds a config option that lets us easily
test both behaviors on our users.
Differential Revision: https://phab.mercurial-scm.org/D5970
author | Martin von Zweigbergk <martinvonz@google.com> |
---|---|
date | Fri, 15 Feb 2019 10:39:45 -0800 |
parents | f96988680afe |
children | 4ec0ce0fb929 |
files | hgext/uncommit.py tests/test-uncommit.t |
diffstat | 2 files changed, 34 insertions(+), 4 deletions(-) [+] |
line wrap: on
line diff
--- a/hgext/uncommit.py Thu Feb 14 15:17:54 2019 -0800 +++ b/hgext/uncommit.py Fri Feb 15 10:39:45 2019 -0800 @@ -44,6 +44,9 @@ configitem('experimental', 'uncommitondirtywdir', default=False, ) +configitem('experimental', 'uncommit.keep', + default=False, +) # Note for extension authors: ONLY specify testedwith = 'ships-with-hg-core' for # extensions which SHIP WITH MERCURIAL. Non-mainline extensions should @@ -136,7 +139,7 @@ ds.copy(src, dst) @command('uncommit', - [('', 'keep', False, _('allow an empty commit after uncommiting')), + [('', 'keep', None, _('allow an empty commit after uncommiting')), ] + commands.walkopts, _('[OPTION]... [FILE]...'), helpcategory=command.CATEGORY_CHANGE_MANAGEMENT) @@ -165,7 +168,12 @@ with repo.transaction('uncommit'): match = scmutil.match(old, pats, opts) - keepcommit = opts.get('keep') or pats + keepcommit = pats + if not keepcommit: + if opts.get('keep') is not None: + keepcommit = opts.get('keep') + else: + keepcommit = ui.configbool('experimental', 'uncommit.keep') newid = _commitfiltered(repo, old, match, keepcommit) if newid is None: ui.status(_("nothing to uncommit\n"))
--- a/tests/test-uncommit.t Thu Feb 14 15:17:54 2019 -0800 +++ b/tests/test-uncommit.t Fri Feb 15 10:39:45 2019 -0800 @@ -307,7 +307,7 @@ $ hg phase -r ".^" 12: public -Uncommit leaving an empty changeset +Uncommit with --keep or experimental.uncommit.keep leaves an empty changeset $ cd $TESTTMP $ hg init repo1 @@ -327,9 +327,31 @@ |/ o P FILES: P + $ cat >> .hg/hgrc <<EOF + > [experimental] + > uncommit.keep=True + > EOF + $ hg ci --amend + $ hg uncommit + note: keeping empty commit + $ hg log -G -T '{desc} FILES: {files}' + @ Q FILES: + | + | x Q FILES: Q + |/ + o P FILES: P + $ hg status A Q - + $ hg ci --amend + $ hg uncommit --no-keep + $ hg log -G -T '{desc} FILES: {files}' + x Q FILES: Q + | + @ P FILES: P + + $ hg status + A Q $ cd .. $ rm -rf repo1