index: embed nodetree in index object to avoid reference cycle
Since the index has a reference to a nodetree and the nodetree has a
reference back to the index, there is a reference cycle, so the index
(and its nodetree) can never be freed. This patch fixes that by making
"nodetree" a plan C struct that the index can embed, and also
introduces a new "nodetreeObject" that is a Python type wrapping the
nodetree struct.
Thanks to Yuya for noticing this and for suggesting the solution.
All tests passed on the first attempt once it compiled (I guess C is
like Haskell in this regard?).
Differential Revision: https://phab.mercurial-scm.org/D4372
https://bz.mercurial-scm.org/842
$ hg init
$ echo foo > a
$ hg ci -Ama
adding a
$ hg up -r0000
0 files updated, 0 files merged, 1 files removed, 0 files unresolved
$ echo bar > a
Should issue new head warning:
$ hg ci -Amb
adding a
created new head
$ hg up -r0000
0 files updated, 0 files merged, 1 files removed, 0 files unresolved
$ echo stuffy > a
Should not issue new head warning:
$ hg ci -q -Amc
$ hg up -r0000
0 files updated, 0 files merged, 1 files removed, 0 files unresolved
$ echo crap > a
$ hg branch testing
marked working directory as branch testing
(branches are permanent and global, did you want a bookmark?)
Should not issue warning:
$ hg ci -q -Amd