narrowrepo.py
52 lines
| 1.6 KiB
| text/x-python
|
PythonLexer
Augie Fackler
|
r36096 | # narrowrepo.py - repository which supports narrow revlogs, lazy loading | ||
# | ||||
# Copyright 2017 Google, Inc. | ||||
# | ||||
# 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 mercurial import ( | ||||
Martin von Zweigbergk
|
r36482 | changegroup, | ||
Gregory Szorc
|
r36177 | hg, | ||
Gregory Szorc
|
r36178 | narrowspec, | ||
Augie Fackler
|
r36096 | ) | ||
from . import ( | ||||
Kyle Lippincott
|
r38142 | narrowdirstate, | ||
Augie Fackler
|
r36096 | narrowrevlog, | ||
) | ||||
def wrappostshare(orig, sourcerepo, destrepo, **kwargs): | ||||
orig(sourcerepo, destrepo, **kwargs) | ||||
Martin von Zweigbergk
|
r36482 | if changegroup.NARROW_REQUIREMENT in sourcerepo.requirements: | ||
Augie Fackler
|
r36096 | with destrepo.wlock(): | ||
with destrepo.vfs('shared', 'a') as fp: | ||||
fp.write(narrowspec.FILENAME + '\n') | ||||
def unsharenarrowspec(orig, ui, repo, repopath): | ||||
Martin von Zweigbergk
|
r36482 | if (changegroup.NARROW_REQUIREMENT in repo.requirements | ||
Augie Fackler
|
r36096 | and repo.path == repopath and repo.shared()): | ||
Gregory Szorc
|
r36177 | srcrepo = hg.sharedreposource(repo) | ||
Augie Fackler
|
r36096 | with srcrepo.vfs(narrowspec.FILENAME) as f: | ||
spec = f.read() | ||||
with repo.vfs(narrowspec.FILENAME, 'w') as f: | ||||
f.write(spec) | ||||
return orig(ui, repo, repopath) | ||||
Martin von Zweigbergk
|
r36484 | def wraprepo(repo): | ||
Augie Fackler
|
r36096 | """Enables narrow clone functionality on a single local repository.""" | ||
class narrowrepository(repo.__class__): | ||||
def file(self, f): | ||||
fl = super(narrowrepository, self).file(f) | ||||
narrowrevlog.makenarrowfilelog(fl, self.narrowmatch()) | ||||
return fl | ||||
Kyle Lippincott
|
r38142 | def _makedirstate(self): | ||
dirstate = super(narrowrepository, self)._makedirstate() | ||||
return narrowdirstate.wrapdirstate(self, dirstate) | ||||
Augie Fackler
|
r36096 | repo.__class__ = narrowrepository | ||