comparison mercurial/filelog.py @ 39799:76f92d208f7a

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
author Gregory Szorc <gregory.szorc@gmail.com>
date Tue, 18 Sep 2018 18:56:02 -0700
parents 03bedf1d09fc
children 979e9f124caa
comparison
equal deleted inserted replaced
39798:03bedf1d09fc 39799:76f92d208f7a
20 class filelog(object): 20 class filelog(object):
21 def __init__(self, opener, path): 21 def __init__(self, opener, path):
22 self._revlog = revlog.revlog(opener, 22 self._revlog = revlog.revlog(opener,
23 '/'.join(('data', path + '.i')), 23 '/'.join(('data', path + '.i')),
24 censorable=True) 24 censorable=True)
25 # full name of the user visible file, relative to the repository root 25 # Full name of the user visible file, relative to the repository root.
26 # Used by LFS.
26 self.filename = path 27 self.filename = path
28 # Used by repo upgrade.
27 self.index = self._revlog.index 29 self.index = self._revlog.index
30 # Used by verify.
28 self.version = self._revlog.version 31 self.version = self._revlog.version
32 # Used by changegroup generation.
29 self._generaldelta = self._revlog._generaldelta 33 self._generaldelta = self._revlog._generaldelta
30 34
31 def __len__(self): 35 def __len__(self):
32 return len(self._revlog) 36 return len(self._revlog)
33 37
53 return self._revlog.lookup(node) 57 return self._revlog.lookup(node)
54 58
55 def linkrev(self, rev): 59 def linkrev(self, rev):
56 return self._revlog.linkrev(rev) 60 return self._revlog.linkrev(rev)
57 61
62 # Used by LFS, verify.
58 def flags(self, rev): 63 def flags(self, rev):
59 return self._revlog.flags(rev) 64 return self._revlog.flags(rev)
60 65
61 def commonancestorsheads(self, node1, node2): 66 def commonancestorsheads(self, node1, node2):
62 return self._revlog.commonancestorsheads(node1, node2) 67 return self._revlog.commonancestorsheads(node1, node2)
63 68
69 # Used by dagop.blockdescendants().
64 def descendants(self, revs): 70 def descendants(self, revs):
65 return self._revlog.descendants(revs) 71 return self._revlog.descendants(revs)
66 72
73 # Used by hgweb.
67 def headrevs(self): 74 def headrevs(self):
68 return self._revlog.headrevs() 75 return self._revlog.headrevs()
69 76
70 def heads(self, start=None, stop=None): 77 def heads(self, start=None, stop=None):
71 return self._revlog.heads(start, stop) 78 return self._revlog.heads(start, stop)
72 79
80 # Used by hgweb, children extension.
73 def children(self, node): 81 def children(self, node):
74 return self._revlog.children(node) 82 return self._revlog.children(node)
75 83
76 def deltaparent(self, rev): 84 def deltaparent(self, rev):
77 return self._revlog.deltaparent(rev) 85 return self._revlog.deltaparent(rev)
78 86
79 def iscensored(self, rev): 87 def iscensored(self, rev):
80 return self._revlog.iscensored(rev) 88 return self._revlog.iscensored(rev)
81 89
90 # Used by verify.
82 def rawsize(self, rev): 91 def rawsize(self, rev):
83 return self._revlog.rawsize(rev) 92 return self._revlog.rawsize(rev)
84 93
94 # Might be unused.
85 def checkhash(self, text, node, p1=None, p2=None, rev=None): 95 def checkhash(self, text, node, p1=None, p2=None, rev=None):
86 return self._revlog.checkhash(text, node, p1=p1, p2=p2, rev=rev) 96 return self._revlog.checkhash(text, node, p1=p1, p2=p2, rev=rev)
87 97
88 def revision(self, node, _df=None, raw=False): 98 def revision(self, node, _df=None, raw=False):
89 return self._revlog.revision(node, _df=_df, raw=raw) 99 return self._revlog.revision(node, _df=_df, raw=raw)
115 return self._revlog.censorrevision(node, tombstone=tombstone) 125 return self._revlog.censorrevision(node, tombstone=tombstone)
116 126
117 def files(self): 127 def files(self):
118 return self._revlog.files() 128 return self._revlog.files()
119 129
130 # Used by verify.
120 def checksize(self): 131 def checksize(self):
121 return self._revlog.checksize() 132 return self._revlog.checksize()
122 133
123 def read(self, node): 134 def read(self, node):
124 t = self.revision(node) 135 t = self.revision(node)
180 t2 = self.read(node) 191 t2 = self.read(node)
181 return t2 != text 192 return t2 != text
182 193
183 return True 194 return True
184 195
196 # TODO these aren't part of the interface and aren't internal methods.
197 # Callers should be fixed to not use them.
198
199 # Used by LFS.
185 @property 200 @property
186 def filename(self): 201 def filename(self):
187 return self._revlog.filename 202 return self._revlog.filename
188 203
189 @filename.setter 204 @filename.setter
190 def filename(self, value): 205 def filename(self, value):
191 self._revlog.filename = value 206 self._revlog.filename = value
192 207
193 # TODO these aren't part of the interface and aren't internal methods. 208 # Used by bundlefilelog, unionfilelog.
194 # Callers should be fixed to not use them.
195 @property 209 @property
196 def indexfile(self): 210 def indexfile(self):
197 return self._revlog.indexfile 211 return self._revlog.indexfile
198 212
199 @indexfile.setter 213 @indexfile.setter
200 def indexfile(self, value): 214 def indexfile(self, value):
201 self._revlog.indexfile = value 215 self._revlog.indexfile = value
202 216
217 # Used by LFS, repo upgrade.
203 @property 218 @property
204 def opener(self): 219 def opener(self):
205 return self._revlog.opener 220 return self._revlog.opener
206 221
222 # Used by repo upgrade.
207 def clone(self, tr, destrevlog, **kwargs): 223 def clone(self, tr, destrevlog, **kwargs):
208 if not isinstance(destrevlog, filelog): 224 if not isinstance(destrevlog, filelog):
209 raise error.ProgrammingError('expected filelog to clone()') 225 raise error.ProgrammingError('expected filelog to clone()')
210 226
211 return self._revlog.clone(tr, destrevlog._revlog, **kwargs) 227 return self._revlog.clone(tr, destrevlog._revlog, **kwargs)