Mercurial > public > mercurial-scm > hg-stable
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) |