[PATCH 1 of 5] revset: have `min` and `max` method of smartset works when empty

pierre-yves.david at ens-lyon.org pierre-yves.david at ens-lyon.org
Fri Mar 21 18:28:04 UTC 2014


# HG changeset patch
# User Pierre-Yves David <pierre-yves.david at fb.com>
# Date 1395367234 25200
#      Thu Mar 20 19:00:34 2014 -0700
# Node ID ad232d545933fc511feaeceb85ba43c4cb1d5415
# Parent  170d6d591a7dbc09bfe1b509dfd8f39991e653a9
revset: have `min` and `max` method of smartset works when empty

When empty `baseset` and `lazyset` had crashing `min` and `max` methods. They
now return None when empty. Same as the other smart set do.

This is not easily testable now. But the following changeset use this one and
test it.

diff --git a/mercurial/revset.py b/mercurial/revset.py
--- a/mercurial/revset.py
+++ b/mercurial/revset.py
@@ -2208,14 +2208,18 @@ class baseset(list):
 
         This is part of the mandatory API for smartset."""
         self.sort(reverse=True)
 
     def min(self):
-        return min(self)
+        if self:
+            return min(self)
+        return None
 
     def max(self):
-        return max(self)
+        if self:
+            return max(self)
+        return None
 
     def set(self):
         """Returns a set or a smartset containing all the elements.
 
         The returned structure should be the fastest option for membership
@@ -2323,14 +2327,18 @@ class lazyset(object):
 
     def descending(self):
         self._subset.sort(reverse=True)
 
     def min(self):
-        return min(self)
+        if self:
+            return min(self)
+        return None
 
     def max(self):
-        return max(self)
+        if self:
+            return max(self)
+        return None
 
     def __contains__(self, x):
         c = self._cache
         if x not in c:
             c[x] = x in self._subset and self._condition(x)


More information about the Mercurial-devel mailing list