##// END OF EJS Templates
flagprocessors: make `_processflagsfunc` a module level function...
marmoute -
r43259:50d9de61 default
parent child Browse files
Show More
@@ -118,7 +118,7 b' class flagprocessorsmixin(object):'
118 processed text and ``validatehash`` is a bool indicating whether the
118 processed text and ``validatehash`` is a bool indicating whether the
119 returned text should be checked for hash integrity.
119 returned text should be checked for hash integrity.
120 """
120 """
121 return self._processflagsfunc(text, flags, 'read')
121 return _processflagsfunc(self, text, flags, 'read')
122
122
123 def _processflagswrite(self, text, flags, sidedata):
123 def _processflagswrite(self, text, flags, sidedata):
124 """Inspect revision data flags and applies write transformations defined
124 """Inspect revision data flags and applies write transformations defined
@@ -136,8 +136,8 b' class flagprocessorsmixin(object):'
136 processed text and ``validatehash`` is a bool indicating whether the
136 processed text and ``validatehash`` is a bool indicating whether the
137 returned text should be checked for hash integrity.
137 returned text should be checked for hash integrity.
138 """
138 """
139 return self._processflagsfunc(text, flags, 'write',
139 return _processflagsfunc(self, text, flags, 'write',
140 sidedata=sidedata)[:2]
140 sidedata=sidedata)[:2]
141
141
142 def _processflagsraw(self, text, flags):
142 def _processflagsraw(self, text, flags):
143 """Inspect revision data flags to check is the content hash should be
143 """Inspect revision data flags to check is the content hash should be
@@ -155,48 +155,52 b' class flagprocessorsmixin(object):'
155 processed text and ``validatehash`` is a bool indicating whether the
155 processed text and ``validatehash`` is a bool indicating whether the
156 returned text should be checked for hash integrity.
156 returned text should be checked for hash integrity.
157 """
157 """
158 return self._processflagsfunc(text, flags, 'raw')[1]
158 return _processflagsfunc(self, text, flags, 'raw')[1]
159
160 def _processflagsfunc(revlog, text, flags, operation, sidedata=None):
161 """internal function to process flag on a revlog
159
162
160 def _processflagsfunc(self, text, flags, operation, sidedata=None):
163 This function is private to this module, code should never needs to call it
161 # fast path: no flag processors will run
164 directly."""
162 if flags == 0:
165 # fast path: no flag processors will run
163 return text, True, {}
166 if flags == 0:
164 if operation not in ('read', 'write', 'raw'):
167 return text, True, {}
165 raise error.ProgrammingError(_("invalid '%s' operation") %
168 if operation not in ('read', 'write', 'raw'):
166 operation)
169 raise error.ProgrammingError(_("invalid '%s' operation") %
167 # Check all flags are known.
170 operation)
168 if flags & ~REVIDX_KNOWN_FLAGS:
171 # Check all flags are known.
169 raise self._flagserrorclass(_("incompatible revision flag '%#x'") %
172 if flags & ~REVIDX_KNOWN_FLAGS:
170 (flags & ~REVIDX_KNOWN_FLAGS))
173 raise revlog._flagserrorclass(_("incompatible revision flag '%#x'") %
171 validatehash = True
174 (flags & ~REVIDX_KNOWN_FLAGS))
172 # Depending on the operation (read or write), the order might be
175 validatehash = True
173 # reversed due to non-commutative transforms.
176 # Depending on the operation (read or write), the order might be
174 orderedflags = REVIDX_FLAGS_ORDER
177 # reversed due to non-commutative transforms.
175 if operation == 'write':
178 orderedflags = REVIDX_FLAGS_ORDER
176 orderedflags = reversed(orderedflags)
179 if operation == 'write':
180 orderedflags = reversed(orderedflags)
177
181
178 outsidedata = {}
182 outsidedata = {}
179 for flag in orderedflags:
183 for flag in orderedflags:
180 # If a flagprocessor has been registered for a known flag, apply the
184 # If a flagprocessor has been registered for a known flag, apply the
181 # related operation transform and update result tuple.
185 # related operation transform and update result tuple.
182 if flag & flags:
186 if flag & flags:
183 vhash = True
187 vhash = True
184
188
185 if flag not in self._flagprocessors:
189 if flag not in revlog._flagprocessors:
186 message = _("missing processor for flag '%#x'") % (flag)
190 message = _("missing processor for flag '%#x'") % (flag)
187 raise self._flagserrorclass(message)
191 raise revlog._flagserrorclass(message)
188
192
189 processor = self._flagprocessors[flag]
193 processor = revlog._flagprocessors[flag]
190 if processor is not None:
194 if processor is not None:
191 readtransform, writetransform, rawtransform = processor
195 readtransform, writetransform, rawtransform = processor
192
196
193 if operation == 'raw':
197 if operation == 'raw':
194 vhash = rawtransform(self, text)
198 vhash = rawtransform(revlog, text)
195 elif operation == 'read':
199 elif operation == 'read':
196 text, vhash, s = readtransform(self, text)
200 text, vhash, s = readtransform(revlog, text)
197 outsidedata.update(s)
201 outsidedata.update(s)
198 else: # write operation
202 else: # write operation
199 text, vhash = writetransform(self, text, sidedata)
203 text, vhash = writetransform(revlog, text, sidedata)
200 validatehash = validatehash and vhash
204 validatehash = validatehash and vhash
201
205
202 return text, validatehash, outsidedata
206 return text, validatehash, outsidedata
General Comments 0
You need to be logged in to leave comments. Login now