comparison mercurial/dirstatemap.py @ 47896:d5b54917eb92

dirstatemap: temporarily return early in `reset_state` We are about to migrate `addfile` to the new `DirstateItem__init__` and having these early return will the new series of patches to be clearer. Differential Revision: https://phab.mercurial-scm.org/D11321
author Pierre-Yves David <pierre-yves.david@octobus.net>
date Fri, 16 Jul 2021 16:29:16 +0200
parents 226c7dbeea11
children 4f0ebf83e4dc
comparison
equal deleted inserted replaced
47895:22c39f8acf78 47896:d5b54917eb92
254 # (maybe new information should be in directly passed to this function) 254 # (maybe new information should be in directly passed to this function)
255 self.copymap.pop(filename, None) 255 self.copymap.pop(filename, None)
256 256
257 if not (p1_tracked or p2_tracked or wc_tracked): 257 if not (p1_tracked or p2_tracked or wc_tracked):
258 self.dropfile(filename) 258 self.dropfile(filename)
259 return
259 elif merged: 260 elif merged:
260 # XXX might be merged and removed ? 261 # XXX might be merged and removed ?
261 entry = self.get(filename) 262 entry = self.get(filename)
262 if entry is not None and entry.tracked: 263 if entry is not None and entry.tracked:
263 # XXX mostly replicate dirstate.other parent. We should get 264 # XXX mostly replicate dirstate.other parent. We should get
264 # the higher layer to pass us more reliable data where `merged` 265 # the higher layer to pass us more reliable data where `merged`
265 # actually mean merged. Dropping the else clause will show 266 # actually mean merged. Dropping the else clause will show
266 # failure in `test-graft.t` 267 # failure in `test-graft.t`
267 self.addfile(filename, merged=True) 268 self.addfile(filename, merged=True)
269 return
268 else: 270 else:
269 self.addfile(filename, from_p2=True) 271 self.addfile(filename, from_p2=True)
272 return
270 elif not (p1_tracked or p2_tracked) and wc_tracked: 273 elif not (p1_tracked or p2_tracked) and wc_tracked:
271 self.addfile(filename, added=True, possibly_dirty=possibly_dirty) 274 self.addfile(filename, added=True, possibly_dirty=possibly_dirty)
275 return
272 elif (p1_tracked or p2_tracked) and not wc_tracked: 276 elif (p1_tracked or p2_tracked) and not wc_tracked:
273 # XXX might be merged and removed ? 277 # XXX might be merged and removed ?
274 old_entry = self._map.get(filename) 278 old_entry = self._map.get(filename)
275 self._dirs_decr(filename, old_entry=old_entry, remove_variant=True) 279 self._dirs_decr(filename, old_entry=old_entry, remove_variant=True)
276 self._map[filename] = DirstateItem.from_v1_data(b'r', 0, 0, 0) 280 self._map[filename] = DirstateItem.from_v1_data(b'r', 0, 0, 0)
277 self.nonnormalset.add(filename) 281 self.nonnormalset.add(filename)
282 return
278 elif clean_p2 and wc_tracked: 283 elif clean_p2 and wc_tracked:
279 if p1_tracked or self.get(filename) is not None: 284 if p1_tracked or self.get(filename) is not None:
280 # XXX the `self.get` call is catching some case in 285 # XXX the `self.get` call is catching some case in
281 # `test-merge-remove.t` where the file is tracked in p1, the 286 # `test-merge-remove.t` where the file is tracked in p1, the
282 # p1_tracked argument is False. 287 # p1_tracked argument is False.
283 # 288 #
284 # In addition, this seems to be a case where the file is marked 289 # In addition, this seems to be a case where the file is marked
285 # as merged without actually being the result of a merge 290 # as merged without actually being the result of a merge
286 # action. So thing are not ideal here. 291 # action. So thing are not ideal here.
287 self.addfile(filename, merged=True) 292 self.addfile(filename, merged=True)
293 return
288 else: 294 else:
289 self.addfile(filename, from_p2=True) 295 self.addfile(filename, from_p2=True)
296 return
290 elif not p1_tracked and p2_tracked and wc_tracked: 297 elif not p1_tracked and p2_tracked and wc_tracked:
291 self.addfile(filename, from_p2=True, possibly_dirty=possibly_dirty) 298 self.addfile(filename, from_p2=True, possibly_dirty=possibly_dirty)
299 return
292 elif possibly_dirty: 300 elif possibly_dirty:
293 self.addfile(filename, possibly_dirty=possibly_dirty) 301 self.addfile(filename, possibly_dirty=possibly_dirty)
302 return
294 elif wc_tracked: 303 elif wc_tracked:
295 # this is a "normal" file 304 # this is a "normal" file
296 if parentfiledata is None: 305 if parentfiledata is None:
297 msg = b'failed to pass parentfiledata for a normal file: %s' 306 msg = b'failed to pass parentfiledata for a normal file: %s'
298 msg %= filename 307 msg %= filename
299 raise error.ProgrammingError(msg) 308 raise error.ProgrammingError(msg)
300 mode, size, mtime = parentfiledata 309 mode, size, mtime = parentfiledata
301 self.addfile(filename, mode=mode, size=size, mtime=mtime) 310 self.addfile(filename, mode=mode, size=size, mtime=mtime)
302 self.nonnormalset.discard(filename) 311 self.nonnormalset.discard(filename)
312 return
303 else: 313 else:
304 assert False, 'unreachable' 314 assert False, 'unreachable'
305 315
306 def set_untracked(self, f): 316 def set_untracked(self, f):
307 """Mark a file as no longer tracked in the dirstate map""" 317 """Mark a file as no longer tracked in the dirstate map"""