D4027: revlog: remove micro-optimization for looking up only nullid

martinvonz (Martin von Zweigbergk) phabricator at mercurial-scm.org
Wed Aug 1 19:01:43 UTC 2018


martinvonz created this revision.
Herald added a subscriber: mercurial-devel.
Herald added a reviewer: hg-reviewers.

REVISION SUMMARY
  index_find_node() would call nt_find() before initializing the node
  tree. nt_find() would then return -2 unless the requested revision was
  the null revision. I can't imagine what scenario that is optimizing
  for, and doing the initialization earlier makes the code simpler and
  easier to follow, so that's what this patch does.

REPOSITORY
  rHG Mercurial

REVISION DETAIL
  https://phab.mercurial-scm.org/D4027

AFFECTED FILES
  mercurial/cext/revlog.c

CHANGE DETAILS

diff --git a/mercurial/cext/revlog.c b/mercurial/cext/revlog.c
--- a/mercurial/cext/revlog.c
+++ b/mercurial/cext/revlog.c
@@ -994,9 +994,6 @@
 	if (nodelen == 20 && node[0] == '\0' && memcmp(node, nullid, 20) == 0)
 		return -1;
 
-	if (self->nt == NULL)
-		return -2;
-
 	if (hex)
 		maxlevel = nodelen > 40 ? 40 : (int)nodelen;
 	else
@@ -1133,14 +1130,14 @@
 {
 	int rev;
 
+	if (nt_init(self) == -1)
+		return -3;
+
 	self->ntlookups++;
 	rev = nt_find(self, node, nodelen, 0);
 	if (rev >= -1)
 		return rev;
 
-	if (nt_init(self) == -1)
-		return -3;
-
 	/*
 	 * For the first handful of lookups, we scan the entire index,
 	 * and cache only the matching nodes. This optimizes for cases



To: martinvonz, #hg-reviewers
Cc: mercurial-devel


More information about the Mercurial-devel mailing list