obsstore: fast path to check if obsstore is empty
authorYuya Nishihara <yuya@tcha.org>
Sun, 13 Sep 2015 18:01:01 +0900
changeset 26310 61efe9ef6ad4
parent 26309 44918682093f
child 26311 60dd8e3977f0
obsstore: fast path to check if obsstore is empty
mercurial/obsolete.py
--- a/mercurial/obsolete.py	Sun Sep 13 17:52:37 2015 +0900
+++ b/mercurial/obsolete.py	Sun Sep 13 18:01:01 2015 +0900
@@ -67,7 +67,7 @@
 comment associated with each format for details.
 
 """
-import struct
+import errno, struct
 import util, base85, node, parsers
 import phases
 from i18n import _
@@ -531,6 +531,15 @@
         return len(self._all)
 
     def __nonzero__(self):
+        if not self._cached('_all'):
+            try:
+                return self.svfs.stat('obsstore').st_size > 1
+            except OSError as inst:
+                if inst.errno != errno.ENOENT:
+                    raise
+                # just build an empty _all list if no obsstore exists, which
+                # avoids further stat() syscalls
+                pass
         return bool(self._all)
 
     def create(self, transaction, prec, succs=(), flag=0, parents=None,