[PATCH 09 of 14] localrepo: add shallow awareness
Vishakh H
vsh426 at gmail.com
Fri Jul 16 02:15:17 CDT 2010
# HG changeset patch
# User Vishakh H <vsh426 at gmail.com>
# Date 1279263210 -19800
# Node ID 6235071ccd5e7973389a890abb64a88c6d8ccb27
# Parent 0218b69c65e2014af11f287cac005ffd206d45c5
localrepo: add shallow awareness
when a shallow repo is created we store the shallowroot in shallow file
under .hg. when the repo is instantiated it reads the file find shallowroot.
the shallow root is passed to the changelog so it can keep track of all
nodes available in repo and create revlogs with shallow flag.
diff --git a/mercurial/localrepo.py b/mercurial/localrepo.py
--- a/mercurial/localrepo.py
+++ b/mercurial/localrepo.py
@@ -23,7 +23,7 @@
capabilities = set(('lookup', 'changegroupsubset', 'branchmap', 'pushkey'))
supported = set('revlogv1 store fncache shared'.split())
- def __init__(self, baseui, path=None, create=0):
+ def __init__(self, baseui, path=None, create=False, shallow=None):
repo.repository.__init__(self)
self.root = os.path.realpath(util.expandpath(path))
self.path = os.path.join(self.root, ".hg")
@@ -32,6 +32,7 @@
self.wopener = util.opener(self.root)
self.baseui = baseui
self.ui = baseui.copy()
+ self._shallowroot = shallow
try:
self.ui.readconfig(self.join("hgrc"), self.root)
@@ -59,6 +60,10 @@
for r in requirements:
reqfile.write("%s\n" % r)
reqfile.close()
+ if shallow is not None:
+ shallowfile = self.opener("shallow", "w")
+ shallowfile.write(shallow)
+ shallowfile.close()
else:
raise error.RepoError(_("repository %s not found") % path)
elif create:
@@ -68,6 +73,7 @@
requirements = set()
try:
requirements = set(self.opener("requires").read().splitlines())
+ self._shallowroot = self.opener("shallow").read()
except IOError, inst:
if inst.errno != errno.ENOENT:
raise
@@ -109,7 +115,7 @@
@propertycache
def changelog(self):
- c = changelog.changelog(self.sopener)
+ c = changelog.changelog(self.sopener, self._shallowroot)
if 'HG_PENDING' in os.environ:
p = os.environ['HG_PENDING']
if p.startswith(self.root):
@@ -1203,6 +1209,7 @@
raise util.Abort(_("Partial pull cannot be done because "
"other repository doesn't support "
"changegroupsubset."))
+ shallowroot = shallowroot or self._shallowroot
cg = remote.changegroupsubset(fetch, heads, 'pull',
shallowroot=shallowroot)
return self.addchangegroup(cg, 'pull', remote.url(), lock=lock)
@@ -1869,8 +1876,8 @@
util.rename(src, dest)
return a
-def instance(ui, path, create):
- return localrepository(ui, util.drop_scheme('file', path), create)
+def instance(ui, path, create, shallow):
+ return localrepository(ui, util.drop_scheme('file', path), create, shallow)
def islocal(path):
return True
More information about the Mercurial-devel
mailing list