D5970: uncommit: add config option to keep commit by default
martinvonz (Martin von Zweigbergk)
phabricator at mercurial-scm.org
Fri Feb 15 19:13:05 UTC 2019
martinvonz created this revision.
Herald added a subscriber: mercurial-devel.
Herald added a reviewer: hg-reviewers.
REVISION SUMMARY
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.
REPOSITORY
rHG Mercurial
REVISION DETAIL
https://phab.mercurial-scm.org/D5970
AFFECTED FILES
hgext/uncommit.py
tests/test-uncommit.t
CHANGE DETAILS
diff --git a/tests/test-uncommit.t b/tests/test-uncommit.t
--- a/tests/test-uncommit.t
+++ b/tests/test-uncommit.t
@@ -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
+ all files uncommitted, the commit is now empty
+ $ 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
diff --git a/hgext/uncommit.py b/hgext/uncommit.py
--- a/hgext/uncommit.py
+++ b/hgext/uncommit.py
@@ -45,6 +45,10 @@
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
# be specifying the version(s) of Mercurial they are tested with, or
@@ -136,7 +140,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 +169,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"))
To: martinvonz, #hg-reviewers
Cc: mercurial-devel
More information about the Mercurial-devel
mailing list