diff hgext/uncommit.py @ 41859:bf22e370ae9a

uncommit: don't allow dirty working copy with PATH (issue5977) On a dirty PATH, uncommit was working without even setting the config `experimental.uncommitondirtydir` to `True`. Ideally, it should abort as it does for a dirty dir. This patch makes uncommit to require the config option `experimental.uncommitondirtydir` on a dirty PATH. Original patch to evolve extension authored by Dan Villiom Podlaski Christiansen: https://bitbucket.org/octobus/evolve-devel/pull-requests/8/bug-5977-uncommit-dirtiness/diff Differential Revision: https://phab.mercurial-scm.org/D5940
author Navaneeth Suresh <navaneeths1998@gmail.com>
date Tue, 12 Feb 2019 00:17:42 +0530
parents 1040d54eb7eb
children aa284d9a33ca
line wrap: on
line diff
--- a/hgext/uncommit.py	Tue Mar 05 09:51:57 2019 -0500
+++ b/hgext/uncommit.py	Tue Feb 12 00:17:42 2019 +0530
@@ -158,9 +158,12 @@
 
     with repo.wlock(), repo.lock():
 
-        if not pats and not repo.ui.configbool('experimental',
-                                               'uncommitondirtywdir'):
-            cmdutil.bailifchanged(repo)
+        m, a, r, d = repo.status()[:4]
+        isdirtypath = any(set(m + a + r + d) & set(pats))
+        if (not repo.ui.configbool('experimental', 'uncommitondirtywdir') and
+            (not pats or isdirtypath)):
+            cmdutil.bailifchanged(repo, hint=_('requires '
+                                'experimental.uncommitondirtywdir to uncommit'))
         old = repo['.']
         rewriteutil.precheck(repo, [old.rev()], 'uncommit')
         if len(old.parents()) > 1: