Patchwork D4018: index: handle index[-1] as nullid more explicitly

login
register
mail settings
Submitter phabricator
Date Aug. 2, 2018, 4:40 a.m.
Message ID <07145eb4c37157f3515a13dfa2d5cd89@localhost.localdomain>
Download mbox | patch
Permalink /patch/33090/
State Not Applicable
Headers show

Comments

phabricator - Aug. 2, 2018, 4:40 a.m.
martinvonz updated this revision to Diff 9777.

REPOSITORY
  rHG Mercurial

CHANGES SINCE LAST UPDATE
  https://phab.mercurial-scm.org/D4018?vs=9718&id=9777

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

AFFECTED FILES
  mercurial/cext/revlog.c
  mercurial/pure/parsers.py

CHANGE DETAILS




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

Patch

diff --git a/mercurial/pure/parsers.py b/mercurial/pure/parsers.py
--- a/mercurial/pure/parsers.py
+++ b/mercurial/pure/parsers.py
@@ -55,9 +55,9 @@ 
         return i
 
     def __getitem__(self, i):
+        if i == -1 or i == len(self) - 1:
+            return (0, 0, 0, -1, -1, -1, -1, nullid)
         i = self._fix_index(i)
-        if i == len(self) - 1:
-            return (0, 0, 0, -1, -1, -1, -1, nullid)
         if i >= self._lgt:
             return self._extra[i - self._lgt]
         index = self._calculate_index(i)
diff --git a/mercurial/cext/revlog.c b/mercurial/cext/revlog.c
--- a/mercurial/cext/revlog.c
+++ b/mercurial/cext/revlog.c
@@ -158,19 +158,19 @@ 
 	Py_ssize_t length = index_length(self);
 	PyObject *entry;
 
+	if (pos == -1 || pos == length - 1) {
+		Py_INCREF(nullentry);
+		return nullentry;
+	}
+
 	if (pos < 0)
 		pos += length;
 
 	if (pos < 0 || pos >= length) {
 		PyErr_SetString(PyExc_IndexError, "revlog index out of range");
 		return NULL;
 	}
 
-	if (pos == length - 1) {
-		Py_INCREF(nullentry);
-		return nullentry;
-	}
-
 	if (pos >= self->length - 1) {
 		PyObject *obj;
 		obj = PyList_GET_ITEM(self->added, pos - self->length + 1);