# HG changeset patch # User Martin von Zweigbergk # Date 1525496323 25200 # Node ID a91f31a1e2815c6fa065b9b501ddbbd02ebd2b73 # Parent 66dc9db6ed2c04e64354938344e2e15b9958e5e0 revlog: extract function for getting node from known-to-exist rev Many of the calls to index_node() (which converts a rev to a nodeid) are done with a rev that's know to exist. If the function fails, there's something really wrong and we should just abort. This was done in only one place. This patch starts by extracting that code to a function that we can reuse in later patches. Differential Revision: https://phab.mercurial-scm.org/D3456 diff -r 66dc9db6ed2c -r a91f31a1e281 mercurial/cext/revlog.c --- a/mercurial/cext/revlog.c Mon May 07 09:15:29 2018 -0700 +++ b/mercurial/cext/revlog.c Fri May 04 21:58:43 2018 -0700 @@ -248,6 +248,20 @@ return data ? data + 32 : NULL; } +/* + * Return the 20-byte SHA of the node corresponding to the given rev. The + * rev is assumed to be existing. If not, an exception is set. + */ +static const char *index_node_existing(indexObject *self, Py_ssize_t pos) +{ + const char *node = index_node(self, pos); + if (node == NULL) { + PyErr_Format(PyExc_IndexError, "could not access rev %d", + (int)pos); + } + return node; +} + static int nt_insert(indexObject *self, const char *node, int rev); static int node_check(PyObject *obj, char **node, Py_ssize_t *nodelen) @@ -1282,10 +1296,8 @@ return PyBytes_FromStringAndSize(nullid, 20); } - fullnode = index_node(self, rev); + fullnode = index_node_existing(self, rev); if (fullnode == NULL) { - PyErr_Format(PyExc_IndexError, - "could not access rev %d", rev); return NULL; } return PyBytes_FromStringAndSize(fullnode, 20);