Skip to content
Snippets Groups Projects
Commit 5a629109 authored by Pulkit Goyal's avatar Pulkit Goyal
Browse files

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
parent 4a6c51f5
No related branches found
No related tags found
No related merge requests found
......@@ -532,6 +532,9 @@
coreconfigitem('experimental', 'rebase.multidest',
default=False,
)
coreconfigitem('experimental', 'remotenames',
default=False,
)
coreconfigitem('experimental', 'revlogv2',
default=None,
)
......
......@@ -27,6 +27,7 @@
phases,
pushkey,
pycompat,
remotenames,
scmutil,
sslutil,
streamclone,
......@@ -1304,6 +1305,10 @@
finally:
lockmod.release(pullop.trmanager, lock, wlock)
# storing remotenames
if repo.ui.configbool('experimental', 'remotenames'):
remotenames.pullremotenames(repo, remote)
return pullop
# list of steps to perform discovery before pull
......
# 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")
Testing the functionality to pull remotenames
=============================================
$ cat >> $HGRCPATH << EOF
> [alias]
> glog = log -G -T '{rev}:{node|short} {desc}'
> EOF
Making a server repo
--------------------
$ hg init server
$ cd server
$ for ch in {a..h}; do echo "foo" >> $ch; hg ci -Aqm "Added "$ch; done
$ hg glog
@ 7:ec2426147f0e Added h
|
o 6:87d6d6676308 Added g
|
o 5:825660c69f0c Added f
|
o 4:aa98ab95a928 Added e
|
o 3:62615734edd5 Added d
|
o 2:28ad74487de9 Added c
|
o 1:29becc82797a Added b
|
o 0:18d04c59bb5d Added a
$ hg bookmark -r 3 foo
$ hg bookmark -r 6 bar
$ hg up 4
0 files updated, 0 files merged, 3 files removed, 0 files unresolved
$ hg branch wat
marked working directory as branch wat
(branches are permanent and global, did you want a bookmark?)
$ echo foo >> bar
$ hg ci -Aqm "added bar"
Making a client repo
--------------------
$ cd ..
$ hg init client
$ cd client
$ cat >> .hg/hgrc << EOF
> [experimental]
> remotenames = True
> EOF
$ hg pull ../server/
pulling from ../server/
requesting all changes
adding changesets
adding manifests
adding file changes
added 9 changesets with 9 changes to 9 files (+1 heads)
adding remote bookmark bar
adding remote bookmark foo
new changesets 18d04c59bb5d:3e1487808078
Remotenames info
path: file:$TESTTMP/server
Bookmarks:
foo: 62615734edd52f06b6fb9c2beb429e4fe30d57b8
bar: 87d6d66763085b629e6d7ed56778c79827273022
Branches:
wat: ['3e1487808078543b0af6d10dadf5d46943578db0']
default: ['ec2426147f0e39dbc9cef599b066be6035ce691d']
(run 'hg heads' to see heads)
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment