Patchwork D1547: remotenames: move function to pull remotenames from the remoterepo to core

login
register
mail settings
Submitter phabricator
Date Dec. 5, 2017, 10:23 p.m.
Message ID <420c4d94dc87b8b007e944d0e6b6e0a7@localhost.localdomain>
Download mbox | patch
Permalink /patch/25954/
State Not Applicable
Headers show

Comments

phabricator - Dec. 5, 2017, 10:23 p.m.
This revision was automatically updated to reflect the committed changes.
Closed by commit rHG5a62910948d2: remotenames: move function to pull remotenames from the remoterepo to core (authored by pulkit, committed by ).

CHANGED PRIOR TO COMMIT
  https://phab.mercurial-scm.org/D1547?vs=3970&id=4138#toc

REPOSITORY
  rHG Mercurial

CHANGES SINCE LAST UPDATE
  https://phab.mercurial-scm.org/D1547?vs=3970&id=4138

REVISION DETAIL
  https://phab.mercurial-scm.org/D1547

AFFECTED FILES
  mercurial/configitems.py
  mercurial/exchange.py
  mercurial/remotenames.py
  tests/test-remotenames.t

CHANGE DETAILS




To: pulkit, #hg-reviewers, durin42
Cc: durin42, dlax, mercurial-devel

Patch

diff --git a/tests/test-remotenames.t b/tests/test-remotenames.t
new file mode 100644
--- /dev/null
+++ b/tests/test-remotenames.t
@@ -0,0 +1,73 @@ 
+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)
diff --git a/mercurial/remotenames.py b/mercurial/remotenames.py
new file mode 100644
--- /dev/null
+++ b/mercurial/remotenames.py
@@ -0,0 +1,43 @@ 
+# 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")
diff --git a/mercurial/exchange.py b/mercurial/exchange.py
--- a/mercurial/exchange.py
+++ b/mercurial/exchange.py
@@ -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
diff --git a/mercurial/configitems.py b/mercurial/configitems.py
--- a/mercurial/configitems.py
+++ b/mercurial/configitems.py
@@ -532,6 +532,9 @@ 
 coreconfigitem('experimental', 'rebase.multidest',
     default=False,
 )
+coreconfigitem('experimental', 'remotenames',
+    default=False,
+)
 coreconfigitem('experimental', 'revlogv2',
     default=None,
 )