convert: don't drop commits that are empty in the source when using --filemap
I ran into this when using `hg lfconvert --to-normal` (which uses the filemap
class internally), and saw that commits with nothing but a branch change were
dropped. We could put in an option that only lfconvert uses internally. But
silently dropping anything other than a commit where all changes were excluded
seems unintended. For example, there's a message in mercurial_sink.putcommit()
if it drops an empty commit. (And the reason that isn't kicking in here is
because lfconvert isn't passing --filemap, so the self.filemapmode conditional
there is always False.)
The naive change of `return not files` broke test-convert-filemap.t, so this is
a little more elaborate than needed for converting from largefiles.
#!/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)