##// END OF EJS Templates
localrepo: "blindly" do a dirstate backup at the end of the transaction...
localrepo: "blindly" do a dirstate backup at the end of the transaction Having the file backup mechanism dealing with file backup as benefit. So lets move closer to that. The fact `hg rollback` even needs this is sad. I hope to have the time to implement one of the alternative soon.

File last commit:

r50921:3550e4a8 default
r50979:5b9c3ae8 default
Show More
dirstate.py
235 lines | 7.0 KiB | text/x-python | PythonLexer
Augie Fackler
interfaces: introduce an interface for dirstate implementations...
r43197 import contextlib
Augie Fackler
formatting: blacken the codebase...
r43346 from . import util as interfaceutil
Augie Fackler
interfaces: introduce an interface for dirstate implementations...
r43197
class idirstate(interfaceutil.Interface):
Simon Sapin
dirstate-v2: Change the on-disk format when the requirement is enabled...
r48055 def __init__(
opener,
ui,
root,
validate,
sparsematchfn,
nodeconstants,
use_dirstate_v2,
av6
dirstate: add missing methods and kwargs to idirstate interface
r50777 use_tracked_hint=False,
Simon Sapin
dirstate-v2: Change the on-disk format when the requirement is enabled...
r48055 ):
Augie Fackler
formating: upgrade to black 20.8b1...
r46554 """Create a new dirstate object.
Augie Fackler
interfaces: introduce an interface for dirstate implementations...
r43197
opener is an open()-like callable that can be used to open the
dirstate file; root is the root of the directory tracked by
the dirstate.
Augie Fackler
formating: upgrade to black 20.8b1...
r46554 """
Augie Fackler
interfaces: introduce an interface for dirstate implementations...
r43197
Augie Fackler
idirstate: group private methods and attrs that are in the interface...
r43199 # TODO: all these private methods and attributes should be made
# public or removed from the interface.
Gregory Szorc
interfaces: use triple quotes for Attribute value...
r43278 _ignore = interfaceutil.Attribute("""Matcher for ignored files.""")
dirstate: introduce a `is_changing_any` property...
r50918 is_changing_any = interfaceutil.Attribute(
"""True if any changes in progress."""
)
dirstate: rename `pendingparentchange` to `is_changing_parents`...
r50917 is_changing_parents = interfaceutil.Attribute(
"""True if parents changes in progress."""
)
dirstate: add a context for tracking files change...
r50921 is_changing_files = interfaceutil.Attribute(
"""True if file tracking changes in progress."""
)
Augie Fackler
idirstate: group private methods and attrs that are in the interface...
r43199
def _ignorefiles():
"""Return a list of files containing patterns to ignore."""
def _ignorefileandline(f):
Matt Harbison
cleanup: fix docstring formatting...
r44226 """Given a file `f`, return the ignore file and line that ignores it."""
Augie Fackler
idirstate: group private methods and attrs that are in the interface...
r43199
Gregory Szorc
interfaces: use triple quotes for Attribute value...
r43278 _checklink = interfaceutil.Attribute("""Callable for checking symlinks.""")
_checkexec = interfaceutil.Attribute("""Callable for checking exec bits.""")
Augie Fackler
idirstate: group private methods and attrs that are in the interface...
r43199
Augie Fackler
interfaces: introduce an interface for dirstate implementations...
r43197 @contextlib.contextmanager
dirstate: rename parentchange to changing_parents...
r50855 def changing_parents(repo):
Augie Fackler
formating: upgrade to black 20.8b1...
r46554 """Context manager for handling dirstate parents.
Augie Fackler
interfaces: introduce an interface for dirstate implementations...
r43197
If an exception occurs in the scope of the context manager,
the incoherent dirstate won't be written when wlock is
released.
Augie Fackler
formating: upgrade to black 20.8b1...
r46554 """
Augie Fackler
interfaces: introduce an interface for dirstate implementations...
r43197
dirstate: add a context for tracking files change...
r50921 @contextlib.contextmanager
def changing_files(repo):
"""Context manager for handling dirstate files.
If an exception occurs in the scope of the context manager,
the incoherent dirstate won't be written when wlock is
released.
"""
Augie Fackler
interfaces: introduce an interface for dirstate implementations...
r43197 def hasdir(d):
pass
def flagfunc(buildfallback):
av6
dirstate: update docstrings in idirstate from the current dirstate
r50775 """build a callable that returns flags associated with a filename
The information is extracted from three possible layers:
1. the file system if it supports the information
2. the "fallback" information stored in the dirstate if any
3. a more expensive mechanism inferring the flags from the parents.
"""
Augie Fackler
interfaces: introduce an interface for dirstate implementations...
r43197
def getcwd():
Augie Fackler
formating: upgrade to black 20.8b1...
r46554 """Return the path from which a canonical path is calculated.
Augie Fackler
interfaces: introduce an interface for dirstate implementations...
r43197
This path should be used to resolve file patterns or to convert
canonical paths back to file paths for display. It shouldn't be
used to get real file paths. Use vfs functions instead.
Augie Fackler
formating: upgrade to black 20.8b1...
r46554 """
Augie Fackler
interfaces: introduce an interface for dirstate implementations...
r43197
av6
dirstate: swap pathto() and get_entry() in idirstate...
r50776 def pathto(f, cwd=None):
pass
Matt Harbison
idirstate: add missing get_entry() method...
r49967 def get_entry(path):
"""return a DirstateItem for the associated path"""
Augie Fackler
interfaces: introduce an interface for dirstate implementations...
r43197 def __contains__(key):
"""Check if bytestring `key` is known to the dirstate."""
def __iter__():
"""Iterate the dirstate's contained filenames as bytestrings."""
def items():
dirstate-item: rename the class to DirstateItem...
r48328 """Iterate the dirstate's entries as (filename, DirstateItem.
Augie Fackler
interfaces: introduce an interface for dirstate implementations...
r43197
As usual, filename is a bytestring.
"""
iteritems = items
def parents():
pass
def p1():
pass
def p2():
pass
def branch():
pass
Joerg Sonnenberger
node: replace nullid and friends with nodeconstants class...
r47771 def setparents(p1, p2=None):
Augie Fackler
interfaces: introduce an interface for dirstate implementations...
r43197 """Set dirstate parents to p1 and p2.
av6
dirstate: update docstrings in idirstate from the current dirstate
r50775 When moving from two parents to one, "merged" entries a
Augie Fackler
interfaces: introduce an interface for dirstate implementations...
r43197 adjusted to normal and previous copy records discarded and
returned by the call.
See localrepo.setparents()
"""
def setbranch(branch):
pass
def invalidate():
Augie Fackler
formating: upgrade to black 20.8b1...
r46554 """Causes the next access to reread the dirstate.
Augie Fackler
interfaces: introduce an interface for dirstate implementations...
r43197
This is different from localrepo.invalidatedirstate() because it always
rereads the dirstate. Use localrepo.invalidatedirstate() if you want to
Augie Fackler
formating: upgrade to black 20.8b1...
r46554 check whether the dirstate has changed before rereading it."""
Augie Fackler
interfaces: introduce an interface for dirstate implementations...
r43197
def copy(source, dest):
"""Mark dest as a copy of source. Unmark dest if source is None."""
def copied(file):
pass
def copies():
pass
def normalize(path, isknown=False, ignoremissing=False):
Augie Fackler
formating: upgrade to black 20.8b1...
r46554 """
Augie Fackler
interfaces: introduce an interface for dirstate implementations...
r43197 normalize the case of a pathname when on a casefolding filesystem
isknown specifies whether the filename came from walking the
disk, to avoid extra filesystem access.
If ignoremissing is True, missing path are returned
unchanged. Otherwise, we try harder to normalize possibly
existing path components.
The normalized case is determined based on the following precedence:
- version of name already stored in the dirstate
- version of name stored on disk
- version provided via command arguments
Augie Fackler
formating: upgrade to black 20.8b1...
r46554 """
Augie Fackler
interfaces: introduce an interface for dirstate implementations...
r43197
def clear():
pass
def rebuild(parent, allfiles, changedfiles=None):
pass
def identity():
av6
dirstate: update docstrings in idirstate from the current dirstate
r50775 """Return identity of dirstate itself to detect changing in storage
Augie Fackler
interfaces: introduce an interface for dirstate implementations...
r43197
If identity of previous dirstate is equal to this, writing
changes based on the former dirstate out can keep consistency.
Augie Fackler
formating: upgrade to black 20.8b1...
r46554 """
Augie Fackler
interfaces: introduce an interface for dirstate implementations...
r43197
def write(tr):
pass
def addparentchangecallback(category, callback):
"""add a callback to be called when the wd parents are changed
Callback will be called with the following arguments:
dirstate, (oldp1, oldp2), (newp1, newp2)
Category is a unique identifier to allow overwriting an old callback
with a newer callback.
"""
def walk(match, subrepos, unknown, ignored, full=True):
Augie Fackler
formating: upgrade to black 20.8b1...
r46554 """
Augie Fackler
interfaces: introduce an interface for dirstate implementations...
r43197 Walk recursively through the directory tree, finding all files
matched by match.
If full is False, maybe skip some known-clean files.
Return a dict mapping filename to stat-like object (either
mercurial.osutil.stat instance or return value of os.stat()).
Augie Fackler
formating: upgrade to black 20.8b1...
r46554 """
Augie Fackler
interfaces: introduce an interface for dirstate implementations...
r43197
def status(match, subrepos, ignored, clean, unknown):
Augie Fackler
formating: upgrade to black 20.8b1...
r46554 """Determine the status of the working copy relative to the
Augie Fackler
interfaces: introduce an interface for dirstate implementations...
r43197 dirstate and return a pair of (unsure, status), where status is of type
scmutil.status and:
unsure:
files that might have been modified since the dirstate was
written, but need to be read to be sure (size is the same
but mtime differs)
status.modified:
files that have definitely been modified since the dirstate
was written (different size or mode)
status.clean:
files that have definitely not been modified since the
dirstate was written
Augie Fackler
formating: upgrade to black 20.8b1...
r46554 """
Augie Fackler
interfaces: introduce an interface for dirstate implementations...
r43197
def matches(match):
Augie Fackler
formating: upgrade to black 20.8b1...
r46554 """
Augie Fackler
interfaces: introduce an interface for dirstate implementations...
r43197 return files in the dirstate (in whatever state) filtered by match
Augie Fackler
formating: upgrade to black 20.8b1...
r46554 """
Augie Fackler
interfaces: introduce an interface for dirstate implementations...
r43197
def savebackup(tr, backupname):
'''Save current dirstate into backup file'''
def restorebackup(tr, backupname):
'''Restore dirstate by backup file'''
def clearbackup(tr, backupname):
'''Clear backup file'''
av6
dirstate: add missing methods and kwargs to idirstate interface
r50777
def verify(m1, m2, p1, narrow_matcher=None):
"""
check the dirstate contents against the parent manifest and yield errors
"""