remotenames: rename related file and storage dir to logexchange
This patch renames remotenames.py to logexchange.py, test-remotenames.t to
test-logexchange.t. Also this patch renames the directory in which the data is
stored from remotenames to logexchange. After this patch, data about bookmarks
and branches from a server we pull is stored in
`.hg/logexchange/(bookmarks|branches)` files.
Thanks to smf for the suggestion.
Differential Revision: https://phab.mercurial-scm.org/D1607
--- a/mercurial/exchange.py Thu Dec 07 21:56:18 2017 +0100
+++ b/mercurial/exchange.py Thu Dec 07 00:26:45 2017 +0530
@@ -24,11 +24,11 @@
discovery,
error,
lock as lockmod,
+ logexchange,
obsolete,
phases,
pushkey,
pycompat,
- remotenames,
scmutil,
sslutil,
streamclone,
@@ -1366,7 +1366,7 @@
# storing remotenames
if repo.ui.configbool('experimental', 'remotenames'):
- remotenames.pullremotenames(repo, remote)
+ logexchange.pullremotenames(repo, remote)
return pullop
--- a/mercurial/hg.py Thu Dec 07 21:56:18 2017 +0100
+++ b/mercurial/hg.py Thu Dec 07 00:26:45 2017 +0530
@@ -28,10 +28,10 @@
httppeer,
localrepo,
lock,
+ logexchange,
merge as mergemod,
node,
phases,
- remotenames,
repoview,
scmutil,
sshpeer,
@@ -691,7 +691,7 @@
destrepo.ui.setconfig('paths', 'default', defaulturl, 'clone')
if ui.configbool('experimental', 'remotenames'):
- remotenames.pullremotenames(destrepo, srcpeer)
+ logexchange.pullremotenames(destrepo, srcpeer)
if update:
if update is not True:
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/mercurial/logexchange.py Thu Dec 07 00:26:45 2017 +0530
@@ -0,0 +1,118 @@
+# logexchange.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
+
+from . import (
+ vfs as vfsmod,
+)
+
+# directory name in .hg/ in which remotenames files will be present
+remotenamedir = 'logexchange'
+
+def readremotenamefile(repo, filename):
+ """
+ reads a file from .hg/logexchange/ directory and yields it's content
+ filename: the file to be read
+ yield a tuple (node, remotepath, name)
+ """
+
+ vfs = vfsmod.vfs(repo.vfs.join(remotenamedir))
+ if not vfs.exists(filename):
+ return
+ f = vfs(filename)
+ lineno = 0
+ for line in f:
+ line = line.strip()
+ if not line:
+ continue
+ # contains the version number
+ if lineno == 0:
+ lineno += 1
+ try:
+ node, remote, rname = line.split('\0')
+ yield node, remote, rname
+ except ValueError:
+ pass
+
+ f.close()
+
+def readremotenames(repo):
+ """
+ read the details about the remotenames stored in .hg/logexchange/ and
+ yields a tuple (node, remotepath, name). It does not yields information
+ about whether an entry yielded is branch or bookmark. To get that
+ information, call the respective functions.
+ """
+
+ for bmentry in readremotenamefile(repo, 'bookmarks'):
+ yield bmentry
+ for branchentry in readremotenamefile(repo, 'branches'):
+ yield branchentry
+
+def writeremotenamefile(repo, remotepath, names, nametype):
+ vfs = vfsmod.vfs(repo.vfs.join(remotenamedir))
+ f = vfs(nametype, 'w', atomictemp=True)
+ # write the storage version info on top of file
+ # version '0' represents the very initial version of the storage format
+ f.write('0\n\n')
+
+ olddata = set(readremotenamefile(repo, nametype))
+ # re-save the data from a different remote than this one.
+ for node, oldpath, rname in sorted(olddata):
+ if oldpath != remotepath:
+ f.write('%s\0%s\0%s\n' % (node, oldpath, rname))
+
+ for name, node in sorted(names.iteritems()):
+ if nametype == "branches":
+ for n in node:
+ f.write('%s\0%s\0%s\n' % (n, remotepath, name))
+ elif nametype == "bookmarks":
+ if node:
+ f.write('%s\0%s\0%s\n' % (node, remotepath, name))
+
+ f.close()
+
+def saveremotenames(repo, remotepath, branches=None, bookmarks=None):
+ """
+ save remotenames i.e. remotebookmarks and remotebranches in their
+ respective files under ".hg/logexchange/" directory.
+ """
+ wlock = repo.wlock()
+ try:
+ if bookmarks:
+ writeremotenamefile(repo, remotepath, bookmarks, 'bookmarks')
+ if branches:
+ writeremotenamefile(repo, remotepath, branches, 'branches')
+ finally:
+ wlock.release()
+
+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))
+
+ saveremotenames(localrepo, remotepath, bmap, bookmarks)
--- a/mercurial/remotenames.py Thu Dec 07 21:56:18 2017 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,118 +0,0 @@
-# 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
-
-from . import (
- vfs as vfsmod,
-)
-
-# directory name in .hg/ in which remotenames files will be present
-remotenamedir = 'remotenames'
-
-def readremotenamefile(repo, filename):
- """
- reads a file from .hg/remotenames/ directory and yields it's content
- filename: the file to be read
- yield a tuple (node, remotepath, name)
- """
-
- vfs = vfsmod.vfs(repo.vfs.join(remotenamedir))
- if not vfs.exists(filename):
- return
- f = vfs(filename)
- lineno = 0
- for line in f:
- line = line.strip()
- if not line:
- continue
- # contains the version number
- if lineno == 0:
- lineno += 1
- try:
- node, remote, rname = line.split('\0')
- yield node, remote, rname
- except ValueError:
- pass
-
- f.close()
-
-def readremotenames(repo):
- """
- read the details about the remotenames stored in .hg/remotenames/ and
- yields a tuple (node, remotepath, name). It does not yields information
- about whether an entry yielded is branch or bookmark. To get that
- information, call the respective functions.
- """
-
- for bmentry in readremotenamefile(repo, 'bookmarks'):
- yield bmentry
- for branchentry in readremotenamefile(repo, 'branches'):
- yield branchentry
-
-def writeremotenamefile(repo, remotepath, names, nametype):
- vfs = vfsmod.vfs(repo.vfs.join(remotenamedir))
- f = vfs(nametype, 'w', atomictemp=True)
- # write the storage version info on top of file
- # version '0' represents the very initial version of the storage format
- f.write('0\n\n')
-
- olddata = set(readremotenamefile(repo, nametype))
- # re-save the data from a different remote than this one.
- for node, oldpath, rname in sorted(olddata):
- if oldpath != remotepath:
- f.write('%s\0%s\0%s\n' % (node, oldpath, rname))
-
- for name, node in sorted(names.iteritems()):
- if nametype == "branches":
- for n in node:
- f.write('%s\0%s\0%s\n' % (n, remotepath, name))
- elif nametype == "bookmarks":
- if node:
- f.write('%s\0%s\0%s\n' % (node, remotepath, name))
-
- f.close()
-
-def saveremotenames(repo, remotepath, branches=None, bookmarks=None):
- """
- save remotenames i.e. remotebookmarks and remotebranches in their
- respective files under ".hg/remotenames/" directory.
- """
- wlock = repo.wlock()
- try:
- if bookmarks:
- writeremotenamefile(repo, remotepath, bookmarks, 'bookmarks')
- if branches:
- writeremotenamefile(repo, remotepath, branches, 'branches')
- finally:
- wlock.release()
-
-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))
-
- saveremotenames(localrepo, remotepath, bmap, bookmarks)
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/tests/test-logexchange.t Thu Dec 07 00:26:45 2017 +0530
@@ -0,0 +1,108 @@
+Testing the functionality to pull remotenames
+=============================================
+
+ $ cat >> $HGRCPATH << EOF
+ > [alias]
+ > glog = log -G -T '{rev}:{node|short} {desc}'
+ > [experimental]
+ > remotenames = True
+ > EOF
+
+Making a server repo
+--------------------
+
+ $ hg init server
+ $ cd server
+ $ for ch in a b c d e f g 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 clone server client
+ updating to branch default
+ 8 files updated, 0 files merged, 0 files removed, 0 files unresolved
+
+ $ cd client
+ $ cat .hg/logexchange/bookmarks
+ 0
+
+ 87d6d66763085b629e6d7ed56778c79827273022\x00file:$TESTTMP/server\x00bar (esc)
+ 62615734edd52f06b6fb9c2beb429e4fe30d57b8\x00file:$TESTTMP/server\x00foo (esc)
+
+ $ cat .hg/logexchange/branches
+ 0
+
+ ec2426147f0e39dbc9cef599b066be6035ce691d\x00file:$TESTTMP/server\x00default (esc)
+ 3e1487808078543b0af6d10dadf5d46943578db0\x00file:$TESTTMP/server\x00wat (esc)
+
+Making a new server
+-------------------
+
+ $ cd ..
+ $ hg init server2
+ $ cd server2
+ $ 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
+ (run 'hg heads' to see heads)
+
+Pulling form the new server
+---------------------------
+ $ cd ../client/
+ $ hg pull ../server2/
+ pulling from ../server2/
+ searching for changes
+ no changes found
+ $ cat .hg/logexchange/bookmarks
+ 0
+
+ 62615734edd52f06b6fb9c2beb429e4fe30d57b8\x00file:$TESTTMP/server\x00foo (esc)
+ 87d6d66763085b629e6d7ed56778c79827273022\x00file:$TESTTMP/server\x00bar (esc)
+ 87d6d66763085b629e6d7ed56778c79827273022\x00file:$TESTTMP/server2\x00bar (esc)
+ 62615734edd52f06b6fb9c2beb429e4fe30d57b8\x00file:$TESTTMP/server2\x00foo (esc)
+
+ $ cat .hg/logexchange/branches
+ 0
+
+ 3e1487808078543b0af6d10dadf5d46943578db0\x00file:$TESTTMP/server\x00wat (esc)
+ ec2426147f0e39dbc9cef599b066be6035ce691d\x00file:$TESTTMP/server\x00default (esc)
+ ec2426147f0e39dbc9cef599b066be6035ce691d\x00file:$TESTTMP/server2\x00default (esc)
+ 3e1487808078543b0af6d10dadf5d46943578db0\x00file:$TESTTMP/server2\x00wat (esc)
--- a/tests/test-remotenames.t Thu Dec 07 21:56:18 2017 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,108 +0,0 @@
-Testing the functionality to pull remotenames
-=============================================
-
- $ cat >> $HGRCPATH << EOF
- > [alias]
- > glog = log -G -T '{rev}:{node|short} {desc}'
- > [experimental]
- > remotenames = True
- > EOF
-
-Making a server repo
---------------------
-
- $ hg init server
- $ cd server
- $ for ch in a b c d e f g 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 clone server client
- updating to branch default
- 8 files updated, 0 files merged, 0 files removed, 0 files unresolved
-
- $ cd client
- $ cat .hg/remotenames/bookmarks
- 0
-
- 87d6d66763085b629e6d7ed56778c79827273022\x00file:$TESTTMP/server\x00bar (esc)
- 62615734edd52f06b6fb9c2beb429e4fe30d57b8\x00file:$TESTTMP/server\x00foo (esc)
-
- $ cat .hg/remotenames/branches
- 0
-
- ec2426147f0e39dbc9cef599b066be6035ce691d\x00file:$TESTTMP/server\x00default (esc)
- 3e1487808078543b0af6d10dadf5d46943578db0\x00file:$TESTTMP/server\x00wat (esc)
-
-Making a new server
--------------------
-
- $ cd ..
- $ hg init server2
- $ cd server2
- $ 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
- (run 'hg heads' to see heads)
-
-Pulling form the new server
----------------------------
- $ cd ../client/
- $ hg pull ../server2/
- pulling from ../server2/
- searching for changes
- no changes found
- $ cat .hg/remotenames/bookmarks
- 0
-
- 62615734edd52f06b6fb9c2beb429e4fe30d57b8\x00file:$TESTTMP/server\x00foo (esc)
- 87d6d66763085b629e6d7ed56778c79827273022\x00file:$TESTTMP/server\x00bar (esc)
- 87d6d66763085b629e6d7ed56778c79827273022\x00file:$TESTTMP/server2\x00bar (esc)
- 62615734edd52f06b6fb9c2beb429e4fe30d57b8\x00file:$TESTTMP/server2\x00foo (esc)
-
- $ cat .hg/remotenames/branches
- 0
-
- 3e1487808078543b0af6d10dadf5d46943578db0\x00file:$TESTTMP/server\x00wat (esc)
- ec2426147f0e39dbc9cef599b066be6035ce691d\x00file:$TESTTMP/server\x00default (esc)
- ec2426147f0e39dbc9cef599b066be6035ce691d\x00file:$TESTTMP/server2\x00default (esc)
- 3e1487808078543b0af6d10dadf5d46943578db0\x00file:$TESTTMP/server2\x00wat (esc)