equal
deleted
inserted
replaced
1238 } |
1238 } |
1239 |
1239 |
1240 static int nt_partialmatch(indexObject *self, const char *node, |
1240 static int nt_partialmatch(indexObject *self, const char *node, |
1241 Py_ssize_t nodelen) |
1241 Py_ssize_t nodelen) |
1242 { |
1242 { |
1243 if (nt_init(self) == -1) |
|
1244 return -3; |
|
1245 if (nt_populate(self) == -1) |
|
1246 return -3; |
|
1247 |
|
1248 return nt_find(self, node, nodelen, 1); |
1243 return nt_find(self, node, nodelen, 1); |
1249 } |
1244 } |
1250 |
1245 |
1251 /* |
1246 /* |
1252 * Find the length of the shortest unique prefix of node. |
1247 * Find the length of the shortest unique prefix of node. |
1258 * rest: length of shortest prefix |
1253 * rest: length of shortest prefix |
1259 */ |
1254 */ |
1260 static int nt_shortest(indexObject *self, const char *node) |
1255 static int nt_shortest(indexObject *self, const char *node) |
1261 { |
1256 { |
1262 int level, off; |
1257 int level, off; |
1263 |
|
1264 if (nt_init(self) == -1) |
|
1265 return -3; |
|
1266 if (nt_populate(self) == -1) |
|
1267 return -3; |
|
1268 |
1258 |
1269 for (level = off = 0; level < 40; level++) { |
1259 for (level = off = 0; level < 40; level++) { |
1270 int k, v; |
1260 int k, v; |
1271 nodetree *n = &self->nt[off]; |
1261 nodetree *n = &self->nt[off]; |
1272 k = nt_level(node, level); |
1262 k = nt_level(node, level); |
1325 /* input contains non-hex characters */ |
1315 /* input contains non-hex characters */ |
1326 PyErr_Clear(); |
1316 PyErr_Clear(); |
1327 Py_RETURN_NONE; |
1317 Py_RETURN_NONE; |
1328 } |
1318 } |
1329 |
1319 |
|
1320 if (nt_init(self) == -1) |
|
1321 return NULL; |
|
1322 if (nt_populate(self) == -1) |
|
1323 return NULL; |
1330 rev = nt_partialmatch(self, node, nodelen); |
1324 rev = nt_partialmatch(self, node, nodelen); |
1331 |
1325 |
1332 switch (rev) { |
1326 switch (rev) { |
1333 case -4: |
1327 case -4: |
1334 raise_revlog_error(); |
1328 raise_revlog_error(); |
1335 case -3: |
|
1336 return NULL; |
1329 return NULL; |
1337 case -2: |
1330 case -2: |
1338 Py_RETURN_NONE; |
1331 Py_RETURN_NONE; |
1339 case -1: |
1332 case -1: |
1340 return PyBytes_FromStringAndSize(nullid, 20); |
1333 return PyBytes_FromStringAndSize(nullid, 20); |
1357 return NULL; |
1350 return NULL; |
1358 if (node_check(val, &node) == -1) |
1351 if (node_check(val, &node) == -1) |
1359 return NULL; |
1352 return NULL; |
1360 |
1353 |
1361 self->ntlookups++; |
1354 self->ntlookups++; |
|
1355 if (nt_init(self) == -1) |
|
1356 return NULL; |
|
1357 if (nt_populate(self) == -1) |
|
1358 return NULL; |
1362 length = nt_shortest(self, node); |
1359 length = nt_shortest(self, node); |
1363 if (length == -3) |
1360 if (length == -3) |
1364 return NULL; |
1361 return NULL; |
1365 if (length == -2) { |
1362 if (length == -2) { |
1366 raise_revlog_error(); |
1363 raise_revlog_error(); |