##// END OF EJS Templates
localrepo: introduce a `_refreshchangelog` method...
localrepo: introduce a `_refreshchangelog` method See next changeset for usage and documentation for details.

File last commit:

r42649:773b0222 default
r42710:3472a3f9 stable
Show More
narrowdirstate.py
63 lines | 2.1 KiB | text/x-python | PythonLexer
Augie Fackler
narrow: import experimental extension from narrowhg revision cb51d673e9c5...
r36096 # narrowdirstate.py - extensions to mercurial dirstate to support narrow clones
#
# 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.i18n import _
from mercurial import (
error,
)
Kyle Lippincott
narrow: only wrap dirstate functions once, instead of per-reposetup...
r38142 def wrapdirstate(repo, dirstate):
Augie Fackler
narrow: import experimental extension from narrowhg revision cb51d673e9c5...
r36096 """Add narrow spec dirstate ignore, block changes outside narrow spec."""
Kyle Lippincott
narrow: only wrap dirstate functions once, instead of per-reposetup...
r38142 def _editfunc(fn):
def _wrapper(self, *args):
Augie Fackler
narrow: import experimental extension from narrowhg revision cb51d673e9c5...
r36096 narrowmatch = repo.narrowmatch()
for f in args:
Martin von Zweigbergk
narrow: avoid looking up dirstate again when editing dirstate...
r39996 if f is not None and not narrowmatch(f) and f not in self:
Augie Fackler
narrow: import experimental extension from narrowhg revision cb51d673e9c5...
r36096 raise error.Abort(_("cannot track '%s' - it is outside " +
"the narrow clone") % f)
Kyle Lippincott
narrow: only wrap dirstate functions once, instead of per-reposetup...
r38142 return fn(self, *args)
return _wrapper
Augie Fackler
narrow: import experimental extension from narrowhg revision cb51d673e9c5...
r36096
Kyle Lippincott
narrow: only wrap dirstate functions once, instead of per-reposetup...
r38142 class narrowdirstate(dirstate.__class__):
# Prevent adding/editing/copying/deleting files that are outside the
# sparse checkout
@_editfunc
def normal(self, *args):
return super(narrowdirstate, self).normal(*args)
Augie Fackler
narrow: import experimental extension from narrowhg revision cb51d673e9c5...
r36096
Kyle Lippincott
narrow: only wrap dirstate functions once, instead of per-reposetup...
r38142 @_editfunc
def add(self, *args):
return super(narrowdirstate, self).add(*args)
@_editfunc
def normallookup(self, *args):
return super(narrowdirstate, self).normallookup(*args)
@_editfunc
def copy(self, *args):
return super(narrowdirstate, self).copy(*args)
Augie Fackler
narrow: import experimental extension from narrowhg revision cb51d673e9c5...
r36096
Kyle Lippincott
narrow: only wrap dirstate functions once, instead of per-reposetup...
r38142 @_editfunc
def remove(self, *args):
return super(narrowdirstate, self).remove(*args)
@_editfunc
def merge(self, *args):
return super(narrowdirstate, self).merge(*args)
def rebuild(self, parent, allfiles, changedfiles=None):
if changedfiles is None:
# Rebuilding entire dirstate, let's filter allfiles to match the
# narrowspec.
allfiles = [f for f in allfiles if repo.narrowmatch()(f)]
super(narrowdirstate, self).rebuild(parent, allfiles, changedfiles)
Augie Fackler
narrow: import experimental extension from narrowhg revision cb51d673e9c5...
r36096
Kyle Lippincott
narrow: only wrap dirstate functions once, instead of per-reposetup...
r38142 dirstate.__class__ = narrowdirstate
return dirstate