dirstate.py
244 lines
| 7.0 KiB
| text/x-python
|
PythonLexer
Augie Fackler
|
r43197 | from __future__ import absolute_import, print_function | ||
import contextlib | ||||
Augie Fackler
|
r43346 | from .. import node as nodemod | ||
Augie Fackler
|
r43197 | |||
Augie Fackler
|
r43346 | from . import util as interfaceutil | ||
Augie Fackler
|
r43197 | |||
class idirstate(interfaceutil.Interface): | ||||
def __init__(opener, ui, root, validate, sparsematchfn): | ||||
Augie Fackler
|
r46554 | """Create a new dirstate object. | ||
Augie Fackler
|
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
|
r46554 | """ | ||
Augie Fackler
|
r43197 | |||
Augie Fackler
|
r43199 | # TODO: all these private methods and attributes should be made | ||
# public or removed from the interface. | ||||
Gregory Szorc
|
r43278 | _ignore = interfaceutil.Attribute("""Matcher for ignored files.""") | ||
Augie Fackler
|
r43199 | |||
def _ignorefiles(): | ||||
"""Return a list of files containing patterns to ignore.""" | ||||
def _ignorefileandline(f): | ||||
Matt Harbison
|
r44226 | """Given a file `f`, return the ignore file and line that ignores it.""" | ||
Augie Fackler
|
r43199 | |||
Gregory Szorc
|
r43278 | _checklink = interfaceutil.Attribute("""Callable for checking symlinks.""") | ||
_checkexec = interfaceutil.Attribute("""Callable for checking exec bits.""") | ||||
Augie Fackler
|
r43199 | |||
Augie Fackler
|
r43197 | @contextlib.contextmanager | ||
def parentchange(): | ||||
Augie Fackler
|
r46554 | """Context manager for handling dirstate parents. | ||
Augie Fackler
|
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
|
r46554 | """ | ||
Augie Fackler
|
r43197 | |||
def pendingparentchange(): | ||||
Augie Fackler
|
r46554 | """Returns true if the dirstate is in the middle of a set of changes | ||
Augie Fackler
|
r43197 | that modify the dirstate parent. | ||
Augie Fackler
|
r46554 | """ | ||
Augie Fackler
|
r43197 | |||
def hasdir(d): | ||||
pass | ||||
def flagfunc(buildfallback): | ||||
pass | ||||
def getcwd(): | ||||
Augie Fackler
|
r46554 | """Return the path from which a canonical path is calculated. | ||
Augie Fackler
|
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
|
r46554 | """ | ||
Augie Fackler
|
r43197 | |||
def pathto(f, cwd=None): | ||||
pass | ||||
def __getitem__(key): | ||||
Augie Fackler
|
r46554 | """Return the current state of key (a filename) in the dirstate. | ||
Augie Fackler
|
r43197 | |||
States are: | ||||
n normal | ||||
m needs merging | ||||
r marked for removal | ||||
a marked for addition | ||||
? not tracked | ||||
Augie Fackler
|
r46554 | """ | ||
Augie Fackler
|
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(): | ||||
"""Iterate the dirstate's entries as (filename, dirstatetuple). | ||||
As usual, filename is a bytestring. | ||||
""" | ||||
iteritems = items | ||||
def parents(): | ||||
pass | ||||
def p1(): | ||||
pass | ||||
def p2(): | ||||
pass | ||||
def branch(): | ||||
pass | ||||
def setparents(p1, p2=nodemod.nullid): | ||||
"""Set dirstate parents to p1 and p2. | ||||
When moving from two parents to one, 'm' merged entries a | ||||
adjusted to normal and previous copy records discarded and | ||||
returned by the call. | ||||
See localrepo.setparents() | ||||
""" | ||||
def setbranch(branch): | ||||
pass | ||||
def invalidate(): | ||||
Augie Fackler
|
r46554 | """Causes the next access to reread the dirstate. | ||
Augie Fackler
|
r43197 | |||
This is different from localrepo.invalidatedirstate() because it always | ||||
rereads the dirstate. Use localrepo.invalidatedirstate() if you want to | ||||
Augie Fackler
|
r46554 | check whether the dirstate has changed before rereading it.""" | ||
Augie Fackler
|
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 normal(f, parentfiledata=None): | ||||
Augie Fackler
|
r46554 | """Mark a file normal and clean. | ||
Augie Fackler
|
r43197 | |||
parentfiledata: (mode, size, mtime) of the clean file | ||||
parentfiledata should be computed from memory (for mode, | ||||
size), as or close as possible from the point where we | ||||
determined the file was clean, to limit the risk of the | ||||
file having been changed by an external process between the | ||||
Augie Fackler
|
r46554 | moment where the file was determined to be clean and now.""" | ||
Augie Fackler
|
r43197 | pass | ||
def normallookup(f): | ||||
'''Mark a file normal, but possibly dirty.''' | ||||
def otherparent(f): | ||||
'''Mark as coming from the other parent, always dirty.''' | ||||
def add(f): | ||||
'''Mark a file added.''' | ||||
def remove(f): | ||||
'''Mark a file removed.''' | ||||
def merge(f): | ||||
'''Mark a file merged.''' | ||||
def drop(f): | ||||
'''Drop a file from the dirstate''' | ||||
def normalize(path, isknown=False, ignoremissing=False): | ||||
Augie Fackler
|
r46554 | """ | ||
Augie Fackler
|
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
|
r46554 | """ | ||
Augie Fackler
|
r43197 | |||
def clear(): | ||||
pass | ||||
def rebuild(parent, allfiles, changedfiles=None): | ||||
pass | ||||
def identity(): | ||||
Augie Fackler
|
r46554 | """Return identity of dirstate it to detect changing in storage | ||
Augie Fackler
|
r43197 | |||
If identity of previous dirstate is equal to this, writing | ||||
changes based on the former dirstate out can keep consistency. | ||||
Augie Fackler
|
r46554 | """ | ||
Augie Fackler
|
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
|
r46554 | """ | ||
Augie Fackler
|
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
|
r46554 | """ | ||
Augie Fackler
|
r43197 | |||
def status(match, subrepos, ignored, clean, unknown): | ||||
Augie Fackler
|
r46554 | """Determine the status of the working copy relative to the | ||
Augie Fackler
|
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
|
r46554 | """ | ||
Augie Fackler
|
r43197 | |||
def matches(match): | ||||
Augie Fackler
|
r46554 | """ | ||
Augie Fackler
|
r43197 | return files in the dirstate (in whatever state) filtered by match | ||
Augie Fackler
|
r46554 | """ | ||
Augie Fackler
|
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''' | ||||