bundle: add config option to include phases
This adds an experimental.bundle-phases config option to include phase
information in bundles. As with the recently added support for
bundling obsmarkers, the support for bundling phases is hidden behind
the config option until we decide to make a bundlespec v3 that
includes phases (and obsmarkers and ...).
We could perhaps use the listkeys format for this, but that's
considered obsolete according to Pierre-Yves. Instead, we introduce a
new "phase-heads" bundle part. The new part contains the phase heads
among the set of bundled revisions. It does not include those in
secret phase; any head in the bundle that is not mentioned in the
phase-heads part is assumed to be secret. As a special case, an empty
phase-heads part thus means that any changesets should be added in
secret phase. (If we ever add a fourth phase, we'll include secret in
the part and we'll add a version number.)
For now, phases are only included by "hg bundle", and not by
e.g. strip and rebase.
#!/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 os
import sys
files = [
('formatv0/.hg/00changelog.i',
'000000000000004400000000000000000000000000000000000000'
'000000000000000000000000000000000000000000000000000000'
'0000a1ef0b125355d27765928be600cfe85784284ab3'),
('formatv0/.hg/00changelog.d',
'756163613935613961356635353036303562366138343738336237'
'61623536363738616436356635380a757365720a3020300a656d70'
'74790a0a656d7074792066696c65'),
('formatv0/.hg/00manifest.i',
'000000000000003000000000000000000000000000000000000000'
'000000000000000000000000000000000000000000000000000000'
'0000aca95a9a5f550605b6a84783b7ab56678ad65f58'),
('formatv0/.hg/00manifest.d',
'75656d707479006238306465356431333837353835343163356630'
'35323635616431343461623966613836643164620a'),
('formatv0/.hg/data/empty.i',
'000000000000000000000000000000000000000000000000000000'
'000000000000000000000000000000000000000000000000000000'
'0000b80de5d138758541c5f05265ad144ab9fa86d1db'),
('formatv0/.hg/data/empty.d',
''),
]
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(data.decode('hex'))
f.close()
sys.exit(0)