[PATCH] match: add match.ispartial()

Drew Gottlieb drgott at google.com
Fri May 15 22:44:06 UTC 2015


# HG changeset patch
# User Drew Gottlieb <drgott at google.com>
# Date 1431729806 25200
#      Fri May 15 15:43:26 2015 -0700
# Node ID fd530304121bd3c2fcbb23f5ec2052b47e24e0a7
# Parent  2f34746c27dfd9d4ff51c1f0081526438ded0c04
match: add match.ispartial()

match.ispartial() will return the opposite of match.always() in core, but this
function will be extensible by extensions to produce another result even
if match.always() will be untouched.

This will be useful for narrowhg, where ispartial() will return False even if
the match won't always match. This would happen in the case where the only
time the match function is False is when the path is outside of the narrow
spec.

diff --git a/mercurial/localrepo.py b/mercurial/localrepo.py
--- a/mercurial/localrepo.py
+++ b/mercurial/localrepo.py
@@ -1377,7 +1377,7 @@
             wctx = self[None]
             merge = len(wctx.parents()) > 1
 
-            if not force and merge and not match.always():
+            if not force and merge and match.ispartial():
                 raise util.Abort(_('cannot partially commit a merge '
                                    '(do not specify files or patterns)'))
 
diff --git a/mercurial/match.py b/mercurial/match.py
--- a/mercurial/match.py
+++ b/mercurial/match.py
@@ -186,6 +186,14 @@
         - optimization might be possible and necessary.'''
         return self._always
 
+    def ispartial(self):
+        '''True if the matcher won't always match.
+
+        Although it's just the inverse of _always in this implementation,
+        an extenion such as narrowhg might make it return something
+        slightly different.'''
+        return not self._always
+
     def isexact(self):
         return self.matchfn == self.exact
 


More information about the Mercurial-devel mailing list