Mercurial > hgsubversion
view .hgtags @ 1550:67b28d657f62
sqliterevmap: break ".hashes()" cycle in a safer way
The `fromsvn()` revset implementation could cause weakref error when using
sqliterevmap like:
File "hgsubversion/util.py", line 357, in <lambda>
return subset.filter(lambda r: tonode(r) in hashes)
File "hgsubversion/maps.py", line 542, in __contains__
return self.get(key) != None
File "hgsubversion/maps.py", line 533, in get
for row in self.revmap._query(
ReferenceError: weakly-referenced object no longer exists
Basically the seemingly harmless assignment could break surprisingly:
# dangerous: `hashes` does not have a reference of `meta.revmap` and may
# become unavailable after `meta`, `revmap` being released by refcount.
hashes = meta.revmap.hashes()
The above syntax is nice to support while avoiding cycles is also nice.
This patch removes `revmap._hashes` so the revmap no longer owns a reference
of a `ReverseRevMap` object so the `ReverseRevMap` object no longer needs to
use weakref for `self.revmap`.
This could actually be caught by `comprehensive/test_sqlite_revmap.py`.
I was not careful enough verifying the "fromsvn()" patch.
author | Jun Wu <quark@fb.com> |
---|---|
date | Thu, 21 Dec 2017 17:39:52 -0800 |
parents | fb0f1b22550e |
children | d7d7e6e2f69a |
line wrap: on
line source
97f2079e3778511944ffb6a662520580650a3993 1.0 09c016174e332eceda015d3f43d96d7e0228acf3 1.0.1 4359ddd73b009fbb356c52ea5d99cba25222ee7a 1.1 8e621dbb82d4363a85317638ad237e2817c56347 1.1.1 093ae2915b452539b44390ee4ea14987484e1eee 1.1.2 708234ad6c97fb52417e0b46a86c8373e25123a5 1.2 4bbc6bf947f56a92e95a04a27b94a9f72d5482d7 1.2.1 0cbf9fd89672e73165e1bb4db1ec8f7f65b95c94 1.3 07234759a3f750029ccaa001837d42fa12dd33ee 1.4 77b22e5b4ea6c248e079afd0f1e544cb5690ce20 1.5 d0f3a5c2cb56ce65d9ef1c611c8bfbebdc3bef34 1.5.1 7d47a0f731354505ed9ae8d60d2a6996e8c3294f 1.6 8caf1226adecb322e90ddb3817c604fa2fe8a66d 1.6.1 36f6d51b4edc31f1f9ce2d0d02965a85dd26a455 1.6.2 46523cdfd3b0cee0bf1366ab587686bb65211747 1.6.3 139a44a63090b2c0f8e05d7d1104d3d9c9e26f57 1.7 c1756971f8828a59c859513f208c6d79bf34c275 1.8 dde1ade36a49d3d0e1b4b8bd384a6797665b5081 1.8.1 38be7a6b6def3298fe9ffff141eb58e1370a53cc 1.8.2 759cafce6becef077fb1a152b554a05ff66b04cd 1.8.3 89997a5fc18163c5f65b83272b4521cdbf29984e 1.8.4 bd979667611d9df733c61251e7668899f3e77a8f 1.8.5 49d324e11856f5d65bd7f83f7ffb3a2f07bf82c1 1.8.6 051a517b473b7bbb7f2176ed38a34fcee96fceee 1.8.7 08ea19b989c389af65b75290664038a2d74786d5 1.9