Mercurial > hg
view tests/revlog-formatv0.py @ 39473:b6db2e80a9ce
ancestors: actually iterate over ancestors in topological order (issue5979)
This code previously used a dequeue logic, the first ancestors seen were the
first ancestors to be emitted. In branching/merging situations, it can result
in ancestors being yielded before their descendants, breaking the object
contract.
We got affected by this issue while working on the copy tracing code. At about
the same time, Axel Hecht <axel@mozilla.com> reported the issue and provided
the test case used in this changeset. Thanks Axel.
Running `hg perfancestors` does not show a significant difference between the
old and the new version.
author | Boris Feld <boris.feld@octobus.net> |
---|---|
date | Thu, 06 Sep 2018 17:00:28 -0400 |
parents | 9805c906aaad |
children | 2372284d9457 |
line wrap: on
line source
#!/usr/bin/env python # Copyright 2010 Intevation GmbH # Author(s): # Thomas Arendsen Hein <thomas@intevation.de> # # This software may be used and distributed according to the terms of the # GNU General Public License version 2 or any later version. """Create a Mercurial repository in revlog format 0 changeset: 0:a1ef0b125355 tag: tip user: user date: Thu Jan 01 00:00:00 1970 +0000 files: empty description: empty file """ from __future__ import absolute_import import binascii import os import sys files = [ (b'formatv0/.hg/00changelog.i', b'000000000000004400000000000000000000000000000000000000' b'000000000000000000000000000000000000000000000000000000' b'0000a1ef0b125355d27765928be600cfe85784284ab3'), (b'formatv0/.hg/00changelog.d', b'756163613935613961356635353036303562366138343738336237' b'61623536363738616436356635380a757365720a3020300a656d70' b'74790a0a656d7074792066696c65'), (b'formatv0/.hg/00manifest.i', b'000000000000003000000000000000000000000000000000000000' b'000000000000000000000000000000000000000000000000000000' b'0000aca95a9a5f550605b6a84783b7ab56678ad65f58'), (b'formatv0/.hg/00manifest.d', b'75656d707479006238306465356431333837353835343163356630' b'35323635616431343461623966613836643164620a'), (b'formatv0/.hg/data/empty.i', b'000000000000000000000000000000000000000000000000000000' b'000000000000000000000000000000000000000000000000000000' b'0000b80de5d138758541c5f05265ad144ab9fa86d1db'), (b'formatv0/.hg/data/empty.d', b''), ] def makedirs(name): """recursive directory creation""" parent = os.path.dirname(name) if parent: makedirs(parent) os.mkdir(name) makedirs(os.path.join(*'formatv0/.hg/data'.split('/'))) for name, data in files: f = open(name, 'wb') f.write(binascii.unhexlify(data)) f.close() sys.exit(0)