##// END OF EJS Templates
obsolete: disable other evolution config options if createmarkers is off...
obsolete: disable other evolution config options if createmarkers is off We used to raise an abort in this case, but recent changes to local clone command (377d8fc20e34) resulted in destrepo both caring about experimental.evolution config options and not initializing extensions. So imagine if you had evolve and allowdivergence enabled in your ~/.hgrc. Local clone stopped working after 377d8fc20e34 because evolve sets experimental.evolution=all, but only on srcrepo, for destrepo the extension is not initialized. It's possible to make local cloning work by initializing extensions for destrepo in some cases, but in other cases (e.g. allowdivergence in ~/.hgrc, evolve extension in original-repo/.hg/hgrc) it would still fail. In a discussion with Pierre-Yves David it was decided to simply force other evolution options to be false if createmarkers is not enabled. Differential Revision: https://phab.mercurial-scm.org/D11223

File last commit:

r48399:cce51119 default
r48599:2cd00052 stable
Show More
narrowdirstate.py
76 lines | 2.5 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 _
Augie Fackler
formatting: blacken the codebase...
r43346 from mercurial import error
Augie Fackler
narrow: import experimental extension from narrowhg revision cb51d673e9c5...
r36096
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):
Valentin Gatien-Baron
merge: fix race that could cause wrong size in dirstate...
r42656 def _wrapper(self, *args, **kwargs):
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
formatting: blacken the codebase...
r43346 raise error.Abort(
_(
Augie Fackler
formatting: byteify all mercurial/ and hgext/ string literals...
r43347 b"cannot track '%s' - it is outside "
+ b"the narrow clone"
Augie Fackler
formatting: blacken the codebase...
r43346 )
% f
)
Valentin Gatien-Baron
merge: fix race that could cause wrong size in dirstate...
r42656 return fn(self, *args, **kwargs)
Augie Fackler
formatting: blacken the codebase...
r43346
Kyle Lippincott
narrow: only wrap dirstate functions once, instead of per-reposetup...
r38142 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
Valentin Gatien-Baron
merge: fix race that could cause wrong size in dirstate...
r42656 def normal(self, *args, **kwargs):
return super(narrowdirstate, self).normal(*args, **kwargs)
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
dirstate: add a `set_tracked` method for "hg add"-like usage...
r48393 def set_tracked(self, *args):
return super(narrowdirstate, self).set_tracked(*args)
@_editfunc
dirstate: add a `set_untracked` method for "hg remove"-like usage...
r48399 def set_untracked(self, *args):
return super(narrowdirstate, self).set_untracked(*args)
@_editfunc
Kyle Lippincott
narrow: only wrap dirstate functions once, instead of per-reposetup...
r38142 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