Mercurial > hg
view hgext/narrow/narrowrepo.py @ 36884:ece242db5000
hgweb: use templater on requestcontext instance
After this commit, all @webcommand function no longer use their
"tmpl" argument. Instead, they use the templater attached to the
requestcontext.
This is the same exact object. So there should be no difference in
behavior.
Differential Revision: https://phab.mercurial-scm.org/D2800
author | Gregory Szorc <gregory.szorc@gmail.com> |
---|---|
date | Sat, 10 Mar 2018 20:38:28 -0800 |
parents | c28b6d609c47 |
children | c50078fc32f3 |
line wrap: on
line source
# 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 ( bundlerepo, changegroup, hg, localrepo, narrowspec, scmutil, ) from . import ( narrowrevlog, ) def wrappostshare(orig, sourcerepo, destrepo, **kwargs): orig(sourcerepo, destrepo, **kwargs) if changegroup.NARROW_REQUIREMENT in sourcerepo.requirements: with destrepo.wlock(): with destrepo.vfs('shared', 'a') as fp: fp.write(narrowspec.FILENAME + '\n') def unsharenarrowspec(orig, ui, repo, repopath): if (changegroup.NARROW_REQUIREMENT in repo.requirements and repo.path == repopath and repo.shared()): srcrepo = hg.sharedreposource(repo) 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) def wraprepo(repo): """Enables narrow clone functionality on a single local repository.""" cacheprop = localrepo.storecache if isinstance(repo, bundlerepo.bundlerepository): # We have to use a different caching property decorator for # bundlerepo because storecache blows up in strange ways on a # bundlerepo. Fortunately, there's no risk of data changing in # a bundlerepo. cacheprop = lambda name: localrepo.unfilteredpropertycache class narrowrepository(repo.__class__): def _constructmanifest(self): manifest = super(narrowrepository, self)._constructmanifest() narrowrevlog.makenarrowmanifestrevlog(manifest, repo) return manifest @cacheprop('00manifest.i') def manifestlog(self): mfl = super(narrowrepository, self).manifestlog narrowrevlog.makenarrowmanifestlog(mfl, self) return mfl def file(self, f): fl = super(narrowrepository, self).file(f) narrowrevlog.makenarrowfilelog(fl, self.narrowmatch()) return fl # I'm not sure this is the right place to do this filter. # context._manifestmatches() would probably be better, or perhaps # move it to a later place, in case some of the callers do want to know # which directories changed. This seems to work for now, though. def status(self, *args, **kwargs): s = super(narrowrepository, self).status(*args, **kwargs) narrowmatch = self.narrowmatch() modified = list(filter(narrowmatch, s.modified)) added = list(filter(narrowmatch, s.added)) removed = list(filter(narrowmatch, s.removed)) deleted = list(filter(narrowmatch, s.deleted)) unknown = list(filter(narrowmatch, s.unknown)) ignored = list(filter(narrowmatch, s.ignored)) clean = list(filter(narrowmatch, s.clean)) return scmutil.status(modified, added, removed, deleted, unknown, ignored, clean) repo.__class__ = narrowrepository