##// END OF EJS Templates
dirstate: move parent state handling in the dirstatemap...
marmoute -
r48873:5d68c4ee default
parent child Browse files
Show More
@@ -381,39 +381,10 b' class dirstate(object):'
381 381 oldp2 = self._pl[1]
382 382 if self._origpl is None:
383 383 self._origpl = self._pl
384 self._map.setparents(p1, p2)
385 copies = {}
386 384 nullid = self._nodeconstants.nullid
387 if oldp2 != nullid and p2 == nullid:
388 candidatefiles = self._map.non_normal_or_other_parent_paths()
389
390 for f in candidatefiles:
391 s = self._map.get(f)
392 if s is None:
393 continue
394
395 # Discard "merged" markers when moving away from a merge state
396 if s.merged:
397 source = self._map.copymap.get(f)
398 if source:
399 copies[f] = source
400 self._map.reset_state(
401 f,
402 wc_tracked=True,
403 p1_tracked=True,
404 possibly_dirty=True,
405 )
406 # Also fix up otherparent markers
407 elif s.from_p2:
408 source = self._map.copymap.get(f)
409 if source:
410 copies[f] = source
411 self._map.reset_state(
412 f,
413 p1_tracked=False,
414 wc_tracked=True,
415 )
416 return copies
385 # True if we need to fold p2 related state back to a linear case
386 fold_p2 = oldp2 != nullid and p2 == nullid
387 return self._map.setparents(p1, p2, fold_p2=fold_p2)
417 388
418 389 def setbranch(self, branch):
419 390 self.__class__._branch.set(self, encoding.fromlocal(branch))
@@ -428,9 +428,40 b' class dirstatemap(object):'
428 428
429 429 return self._parents
430 430
431 def setparents(self, p1, p2):
431 def setparents(self, p1, p2, fold_p2=False):
432 432 self._parents = (p1, p2)
433 433 self._dirtyparents = True
434 copies = {}
435 if fold_p2:
436 candidatefiles = self.non_normal_or_other_parent_paths()
437
438 for f in candidatefiles:
439 s = self.get(f)
440 if s is None:
441 continue
442
443 # Discard "merged" markers when moving away from a merge state
444 if s.merged:
445 source = self.copymap.get(f)
446 if source:
447 copies[f] = source
448 self.reset_state(
449 f,
450 wc_tracked=True,
451 p1_tracked=True,
452 possibly_dirty=True,
453 )
454 # Also fix up otherparent markers
455 elif s.from_p2:
456 source = self.copymap.get(f)
457 if source:
458 copies[f] = source
459 self.reset_state(
460 f,
461 p1_tracked=False,
462 wc_tracked=True,
463 )
464 return copies
434 465
435 466 def read(self):
436 467 # ignore HG_PENDING because identity is used only for writing
@@ -769,9 +800,40 b' if rustmod is not None:'
769 800 # File doesn't exist, so the current state is empty
770 801 return b''
771 802
772 def setparents(self, p1, p2):
803 def setparents(self, p1, p2, fold_p2=False):
773 804 self._parents = (p1, p2)
774 805 self._dirtyparents = True
806 copies = {}
807 if fold_p2:
808 candidatefiles = self.non_normal_or_other_parent_paths()
809
810 for f in candidatefiles:
811 s = self.get(f)
812 if s is None:
813 continue
814
815 # Discard "merged" markers when moving away from a merge state
816 if s.merged:
817 source = self.copymap.get(f)
818 if source:
819 copies[f] = source
820 self.reset_state(
821 f,
822 wc_tracked=True,
823 p1_tracked=True,
824 possibly_dirty=True,
825 )
826 # Also fix up otherparent markers
827 elif s.from_p2:
828 source = self.copymap.get(f)
829 if source:
830 copies[f] = source
831 self.reset_state(
832 f,
833 p1_tracked=False,
834 wc_tracked=True,
835 )
836 return copies
775 837
776 838 def parents(self):
777 839 if not self._parents:
General Comments 0
You need to be logged in to leave comments. Login now