mercurial/remotenames.py
author Pulkit Goyal <7895pulkit@gmail.com>
Thu, 05 Oct 2017 00:02:02 +0530
changeset 35245 5a62910948d2
child 35246 8df8ce2cc5dd
permissions -rw-r--r--
remotenames: move function to pull remotenames from the remoterepo to core This patch is the first patch of the series moving functionality from hgremotenames extension to core. There are lot of functionality in the extension which in the end enables us to store branch heads and bookmarks location on a server from which we are pulling or cloning from. This will help us in creating a better bookmark workflow where we can show user that a certain server has this bookmarks at this node. It will also introduce namespaces related to remote bookmarks and remote branches. This patch moves the functionality to pull branches and bookmarks from a server from which we are pulling to core behind config option `experimental.remotenames`. This patch adds a test which helps us to analyse whether things are working or not. We are currently writing things to ui, we will write information to files in upcoming patches. Previously reviewed as D937. Differential Revision: https://phab.mercurial-scm.org/D1547

# remotenames.py
#
# Copyright 2017 Augie Fackler <raf@durin42.com>
# Copyright 2017 Sean Farley <sean@farley.io>
#
# 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

from .node import hex

def pullremotenames(localrepo, remoterepo):
    """
    pulls bookmarks and branches information of the remote repo during a
    pull or clone operation.
    localrepo is our local repository
    remoterepo is the peer instance
    """
    remotepath = remoterepo.url()
    bookmarks = remoterepo.listkeys('bookmarks')
    # on a push, we don't want to keep obsolete heads since
    # they won't show up as heads on the next pull, so we
    # remove them here otherwise we would require the user
    # to issue a pull to refresh the storage
    bmap = {}
    repo = localrepo.unfiltered()
    for branch, nodes in remoterepo.branchmap().iteritems():
        bmap[branch] = []
        for node in nodes:
            if node in repo and not repo[node].obsolete():
                bmap[branch].append(hex(node))

    # writing things to ui till the time we import the saving functionality
    ui = localrepo.ui
    ui.write("\nRemotenames info\npath: %s\n" % remotepath)
    ui.write("Bookmarks:\n")
    for bm, node in bookmarks.iteritems():
        ui.write("%s: %s\n" % (bm, node))
    ui.write("Branches:\n")
    for branch, node in bmap.iteritems():
        ui.write("%s: %s\n" % (branch, node))
    ui.write("\n")