Show More
@@ -1194,7 +1194,7 b' static inline void index_get_parents(ind' | |||
|
1194 | 1194 | |
|
1195 | 1195 | static PyObject *index_headrevs(indexObject *self, PyObject *args) |
|
1196 | 1196 | { |
|
1197 |
Py_ssize_t i, |
|
|
1197 | Py_ssize_t i, j, len; | |
|
1198 | 1198 | char *nothead = NULL; |
|
1199 | 1199 | PyObject *heads = NULL; |
|
1200 | 1200 | PyObject *filter = NULL; |
@@ -1237,9 +1237,9 b' static PyObject *index_headrevs(indexObj' | |||
|
1237 | 1237 | if (nothead == NULL) |
|
1238 | 1238 | goto bail; |
|
1239 | 1239 | |
|
1240 |
for (i = 0; i < |
|
|
1241 | const char *data; | |
|
1242 | int parent_1, parent_2, isfiltered; | |
|
1240 | for (i = 0; i < len; i++) { | |
|
1241 | int isfiltered; | |
|
1242 | int parents[2]; | |
|
1243 | 1243 | |
|
1244 | 1244 | isfiltered = check_filter(filter, i); |
|
1245 | 1245 | if (isfiltered == -1) { |
@@ -1253,49 +1253,11 b' static PyObject *index_headrevs(indexObj' | |||
|
1253 | 1253 | continue; |
|
1254 | 1254 | } |
|
1255 | 1255 | |
|
1256 |
|
|
|
1257 | parent_1 = getbe32(data + 24); | |
|
1258 | parent_2 = getbe32(data + 28); | |
|
1259 | ||
|
1260 | if (parent_1 >= 0) | |
|
1261 | nothead[parent_1] = 1; | |
|
1262 | if (parent_2 >= 0) | |
|
1263 | nothead[parent_2] = 1; | |
|
1264 | } | |
|
1265 | ||
|
1266 | addlen = self->added ? PyList_GET_SIZE(self->added) : 0; | |
|
1267 | ||
|
1268 | for (i = 0; i < addlen; i++) { | |
|
1269 | PyObject *rev = PyList_GET_ITEM(self->added, i); | |
|
1270 | PyObject *p1 = PyTuple_GET_ITEM(rev, 5); | |
|
1271 | PyObject *p2 = PyTuple_GET_ITEM(rev, 6); | |
|
1272 | long parent_1, parent_2; | |
|
1273 | int isfiltered; | |
|
1274 | ||
|
1275 | if (!PyInt_Check(p1) || !PyInt_Check(p2)) { | |
|
1276 | PyErr_SetString(PyExc_TypeError, | |
|
1277 | "revlog parents are invalid"); | |
|
1278 | goto bail; | |
|
1256 | index_get_parents(self, i, parents); | |
|
1257 | for (j = 0; j < 2; j++) { | |
|
1258 | if (parents[j] >= 0) | |
|
1259 | nothead[parents[j]] = 1; | |
|
1279 | 1260 | } |
|
1280 | ||
|
1281 | isfiltered = check_filter(filter, i); | |
|
1282 | if (isfiltered == -1) { | |
|
1283 | PyErr_SetString(PyExc_TypeError, | |
|
1284 | "unable to check filter"); | |
|
1285 | goto bail; | |
|
1286 | } | |
|
1287 | ||
|
1288 | if (isfiltered) { | |
|
1289 | nothead[i] = 1; | |
|
1290 | continue; | |
|
1291 | } | |
|
1292 | ||
|
1293 | parent_1 = PyInt_AS_LONG(p1); | |
|
1294 | parent_2 = PyInt_AS_LONG(p2); | |
|
1295 | if (parent_1 >= 0) | |
|
1296 | nothead[parent_1] = 1; | |
|
1297 | if (parent_2 >= 0) | |
|
1298 | nothead[parent_2] = 1; | |
|
1299 | 1261 | } |
|
1300 | 1262 | |
|
1301 | 1263 | for (i = 0; i < len; i++) { |
@@ -886,3 +886,33 b' Test issue 4506' | |||
|
886 | 886 | |
|
887 | 887 | #endif |
|
888 | 888 | |
|
889 | Test heads computation on pending index changes with obsolescence markers | |
|
890 | $ cd .. | |
|
891 | $ cat >$TESTTMP/test_extension.py << EOF | |
|
892 | > from mercurial import cmdutil | |
|
893 | > from mercurial.i18n import _ | |
|
894 | > | |
|
895 | > cmdtable = {} | |
|
896 | > command = cmdutil.command(cmdtable) | |
|
897 | > @command("amendtransient",[], _('hg amendtransient [rev]')) | |
|
898 | > def amend(ui, repo, *pats, **opts): | |
|
899 | > def commitfunc(ui, repo, message, match, opts): | |
|
900 | > return repo.commit(message, repo['.'].user(), repo['.'].date(), match) | |
|
901 | > opts['message'] = 'Test' | |
|
902 | > opts['logfile'] = None | |
|
903 | > cmdutil.amend(ui, repo, commitfunc, repo['.'], {}, pats, opts) | |
|
904 | > print repo.changelog.headrevs() | |
|
905 | > EOF | |
|
906 | $ cat >> $HGRCPATH << EOF | |
|
907 | > [extensions] | |
|
908 | > testextension=$TESTTMP/test_extension.py | |
|
909 | > EOF | |
|
910 | $ hg init repo-issue-nativerevs-pending-changes | |
|
911 | $ cd repo-issue-nativerevs-pending-changes | |
|
912 | $ mkcommit a | |
|
913 | $ mkcommit b | |
|
914 | $ hg up ".^" | |
|
915 | 0 files updated, 0 files merged, 1 files removed, 0 files unresolved | |
|
916 | $ echo aa > a | |
|
917 | $ hg amendtransient | |
|
918 | [1, 3] |
General Comments 0
You need to be logged in to leave comments.
Login now