view hgext/infinitepush/common.py @ 44382:f0027a3dd7cb

revlog-compression: update the config to be a list format.revlog-compression is now a list of engine, the first supported one is to be used. Doing this have several benefits: 1) this is fully backward compatible, config using a single entry will be read as a single item list, not changing any behavior. 2) This open the way to use zstd by default without impacting platform were it is not available. This will be done in a later changesets. Using zstd provide a significant performance boost explained in : bb271ec2fbfb. However zstd is not available in some cases, A notable example is the `--pure` version of Mercurial which doesn't come with zstd support. Differential Revision: https://phab.mercurial-scm.org/D8148
author Pierre-Yves David <pierre-yves.david@octobus.net>
date Wed, 19 Feb 2020 17:30:04 +0100
parents 9f70512ae2cf
children 6000f5b25c9b
line wrap: on
line source

# Copyright 2017 Facebook, Inc.
#
# This software may be used and distributed according to the terms of the
# GNU General Public License version 2 or any later version.

from __future__ import absolute_import

import os

from mercurial.node import hex

from mercurial import (
    error,
    extensions,
    pycompat,
)


def isremotebooksenabled(ui):
    return b'remotenames' in extensions._extensions and ui.configbool(
        b'remotenames', b'bookmarks'
    )


def downloadbundle(repo, unknownbinhead):
    index = repo.bundlestore.index
    store = repo.bundlestore.store
    bundleid = index.getbundle(hex(unknownbinhead))
    if bundleid is None:
        raise error.Abort(b'%s head is not known' % hex(unknownbinhead))
    bundleraw = store.read(bundleid)
    return _makebundlefromraw(bundleraw)


def _makebundlefromraw(data):
    fp = None
    fd, bundlefile = pycompat.mkstemp()
    try:  # guards bundlefile
        try:  # guards fp
            fp = os.fdopen(fd, 'wb')
            fp.write(data)
        finally:
            fp.close()
    except Exception:
        try:
            os.unlink(bundlefile)
        except Exception:
            # we would rather see the original exception
            pass
        raise

    return bundlefile