[PATCH 5 of 6 ctx-minor-fixes] context: use object-oriented programming
Sean Farley
sean at farley.io
Wed Sep 19 01:35:47 EDT 2018
# HG changeset patch
# User Sean Farley <sean at farley.io>
# Date 1528495331 25200
# Fri Jun 08 15:02:11 2018 -0700
# Branch ctx-minor-fixes
# Node ID 56222df6e5c8738b9b04881477c166540c50b17a
# Parent 0173c0dca9d389d55a3f0e8ff3bcf43dc7ef659d
context: use object-oriented programming
We have abstracted methods, let's use them. Future patches will iron out
the different types and enforce ctx._parents to be revs.
diff --git a/mercurial/context.py b/mercurial/context.py
index 3bcfe6c..1871edb 100644
--- a/mercurial/context.py
+++ b/mercurial/context.py
@@ -234,14 +234,14 @@ class basectx(object):
def parents(self):
"""return contexts for each parent changeset"""
return self._parents
def p1(self):
- return self._parents[0]
+ return self.parents()[0]
def p2(self):
- parents = self._parents
+ parents = self.parents()
if len(parents) == 2:
return parents[1]
return changectx(self._repo, nullrev)
def _fileinfo(self, path):
@@ -564,11 +564,11 @@ class changectx(basectx):
merge.preferancestor configuration before falling back to the
revlog ancestor."""
# deal with workingctxs
n2 = c2._node
if n2 is None:
- n2 = c2._parents[0]._node
+ n2 = c2.p1().node()
cahs = self._repo.changelog.commonancestorsheads(self._node, n2)
if not cahs:
anc = nullid
elif len(cahs) == 1:
anc = cahs[0]
@@ -1098,11 +1098,11 @@ class committablectx(basectx):
self._extra['branch'] = branch
if self._extra['branch'] == '':
self._extra['branch'] = 'default'
def __bytes__(self):
- return bytes(self._parents[0]) + "+"
+ return bytes(self.p1()) + "+"
__str__ = encoding.strmethod(__bytes__)
def __nonzero__(self):
return True
@@ -1227,11 +1227,11 @@ class committablectx(basectx):
except OSError:
return ''
def ancestor(self, c2):
"""return the "best" ancestor context of self and c2"""
- return self._parents[0].ancestor(c2) # punt on two parents for now
+ return self.p1().ancestor(c2) # punt on two parents for now
def walk(self, match):
'''Generates matching file names.'''
return sorted(self._repo.dirstate.walk(match,
subrepos=sorted(self.substate),
@@ -1240,14 +1240,14 @@ class committablectx(basectx):
def matches(self, match):
ds = self._repo.dirstate
return sorted(f for f in ds.matches(match) if ds[f] != 'r')
def ancestors(self):
- for p in self._parents:
+ for p in self.parents():
yield p
for a in self._repo.changelog.ancestors(
- [p.rev() for p in self._parents]):
+ [p.rev() for p in self.parents()]):
yield changectx(self._repo, a)
def markcommitted(self, node):
"""Perform post-commit cleanup necessary after committing this ctx
@@ -1450,11 +1450,11 @@ class workingctx(committablectx):
return [], [], []
modified = []
deleted = []
fixup = []
- pctx = self._parents[0]
+ pctx = self.p1()
# do a full compare of any files that might have changed
for f in sorted(files):
try:
# This will return True for a file that got replaced by a
# directory in the interim, but fixing that is pretty hard.
@@ -1651,11 +1651,11 @@ class committablefilectx(basefilectx):
def filenode(ctx, path):
return ctx._manifest.get(path, nullid)
path = self._path
fl = self._filelog
- pcl = self._changectx._parents
+ pcl = self._changectx.parents()
renamed = self.renamed()
if renamed:
pl = [renamed + (None,)]
else:
@@ -1684,11 +1684,11 @@ class workingfilectx(committablefilectx)
return self._repo.wread(self._path)
def renamed(self):
rp = self._repo.dirstate.copied(self._path)
if not rp:
return None
- return rp, self._changectx._parents[0]._manifest.get(rp, nullid)
+ return rp, self._changectx.p1()._manifest.get(rp, nullid)
def size(self):
return self._repo.wvfs.lstat(self._path).st_size
def date(self):
t, tz = self._changectx.date()
@@ -2093,11 +2093,11 @@ class overlayworkingfilectx(committablef
def renamed(self):
path = self._parent.copydata(self._path)
if not path:
return None
- return path, self._changectx._parents[0]._manifest.get(path, nullid)
+ return path, self._changectx.p1()._manifest.get(path, nullid)
def size(self):
return self._parent.size(self._path)
def markcopied(self, origin):
@@ -2280,11 +2280,11 @@ class memctx(committablectx):
@propertycache
def _manifest(self):
"""generate a manifest based on the return values of filectxfn"""
# keep this simple for now; just worry about p1
- pctx = self._parents[0]
+ pctx = self.p1()
man = pctx.manifest().copy()
for f in self._status.modified:
man[f] = modifiednodeid
@@ -2300,11 +2300,11 @@ class memctx(committablectx):
@propertycache
def _status(self):
"""Calculate exact status from ``files`` specified at construction
"""
man1 = self.p1().manifest()
- p2 = self._parents[1]
+ p2 = self.p2()
# "1 < len(self._parents)" can't be used for checking
# existence of the 2nd parent, because "memctx._parents" is
# explicitly initialized by the list, of which length is 2.
if p2.node() != nullid:
man2 = p2.manifest()
@@ -2434,11 +2434,11 @@ class metadataonlyctx(committablectx):
def _status(self):
"""Calculate exact status from ``files`` specified in the ``origctx``
and parents manifests.
"""
man1 = self.p1().manifest()
- p2 = self._parents[1]
+ p2 = self.p2()
# "1 < len(self._parents)" can't be used for checking
# existence of the 2nd parent, because "metadataonlyctx._parents" is
# explicitly initialized by the list, of which length is 2.
if p2.node() != nullid:
man2 = p2.manifest()
More information about the Mercurial-devel
mailing list