# HG changeset patch # User Gregory Szorc # Date 1537322162 25200 # Node ID 76f92d208f7a1f0671d3a50870599842eca47756 # Parent 03bedf1d09fccf507441601735e7edfbf4800d24 filelog: record what's using attributes filelog and the file storage interface have some attributes that ideally shouldn't be there. This commit annotates some of those attributes with their users so we know where to look when it comes time to removing them. This exercise exposed a theme: many attributes are used by LFS, repo upgrade, verify, and special repo types (like bundlerepo). That points to missing abstractions on file storage to facilitate these special needs. Differential Revision: https://phab.mercurial-scm.org/D4661 diff -r 03bedf1d09fc -r 76f92d208f7a mercurial/filelog.py --- a/mercurial/filelog.py Tue Sep 18 18:21:47 2018 -0700 +++ b/mercurial/filelog.py Tue Sep 18 18:56:02 2018 -0700 @@ -22,10 +22,14 @@ self._revlog = revlog.revlog(opener, '/'.join(('data', path + '.i')), censorable=True) - # full name of the user visible file, relative to the repository root + # Full name of the user visible file, relative to the repository root. + # Used by LFS. self.filename = path + # Used by repo upgrade. self.index = self._revlog.index + # Used by verify. self.version = self._revlog.version + # Used by changegroup generation. self._generaldelta = self._revlog._generaldelta def __len__(self): @@ -55,21 +59,25 @@ def linkrev(self, rev): return self._revlog.linkrev(rev) + # Used by LFS, verify. def flags(self, rev): return self._revlog.flags(rev) def commonancestorsheads(self, node1, node2): return self._revlog.commonancestorsheads(node1, node2) + # Used by dagop.blockdescendants(). def descendants(self, revs): return self._revlog.descendants(revs) + # Used by hgweb. def headrevs(self): return self._revlog.headrevs() def heads(self, start=None, stop=None): return self._revlog.heads(start, stop) + # Used by hgweb, children extension. def children(self, node): return self._revlog.children(node) @@ -79,9 +87,11 @@ def iscensored(self, rev): return self._revlog.iscensored(rev) + # Used by verify. def rawsize(self, rev): return self._revlog.rawsize(rev) + # Might be unused. def checkhash(self, text, node, p1=None, p2=None, rev=None): return self._revlog.checkhash(text, node, p1=p1, p2=p2, rev=rev) @@ -117,6 +127,7 @@ def files(self): return self._revlog.files() + # Used by verify. def checksize(self): return self._revlog.checksize() @@ -182,6 +193,10 @@ return True + # TODO these aren't part of the interface and aren't internal methods. + # Callers should be fixed to not use them. + + # Used by LFS. @property def filename(self): return self._revlog.filename @@ -190,8 +205,7 @@ def filename(self, value): self._revlog.filename = value - # TODO these aren't part of the interface and aren't internal methods. - # Callers should be fixed to not use them. + # Used by bundlefilelog, unionfilelog. @property def indexfile(self): return self._revlog.indexfile @@ -200,10 +214,12 @@ def indexfile(self, value): self._revlog.indexfile = value + # Used by LFS, repo upgrade. @property def opener(self): return self._revlog.opener + # Used by repo upgrade. def clone(self, tr, destrevlog, **kwargs): if not isinstance(destrevlog, filelog): raise error.ProgrammingError('expected filelog to clone()')