[PATCH 3 of 5 RFC] obsstore: fast path to check if obsstore is empty
Yuya Nishihara
yuya at tcha.org
Wed Sep 23 00:48:04 CDT 2015
# HG changeset patch
# User Yuya Nishihara <yuya at tcha.org>
# Date 1442134861 -32400
# Sun Sep 13 18:01:01 2015 +0900
# Node ID 13a9dacedbbee19365ddd911020a74e8ba392f0e
# Parent 3e6c365f6630059e4c1ee4fbf7ce2aa557e1821f
obsstore: fast path to check if obsstore is empty
diff --git a/mercurial/obsolete.py b/mercurial/obsolete.py
--- a/mercurial/obsolete.py
+++ b/mercurial/obsolete.py
@@ -67,7 +67,7 @@ The header is followed by the markers. M
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 @@ class obsstore(object):
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,
More information about the Mercurial-devel
mailing list