##// END OF EJS Templates
actions: calculate what all parts does the operation touches...
Pulkit Goyal -
r47093:a83e1496 default
parent child Browse files
Show More
@@ -66,6 +66,18 b' class improvement(object):'
66 66 postdowngrademessage
67 67 Message intended for humans which will be shown post an upgrade
68 68 operation in which this improvement was removed
69
70 touches_filelogs (bool)
71 Whether this improvement touches filelogs
72
73 touches_manifests (bool)
74 Whether this improvement touches manifests
75
76 touches_changelog (bool)
77 Whether this improvement touches changelog
78
79 touches_requirements (bool)
80 Whether this improvement changes repository requirements
69 81 """
70 82
71 83 def __init__(self, name, type, description, upgrademessage):
@@ -75,6 +87,12 b' class improvement(object):'
75 87 self.upgrademessage = upgrademessage
76 88 self.postupgrademessage = None
77 89 self.postdowngrademessage = None
90 # By default for now, we assume every improvement touches
91 # all the things
92 self.touches_filelogs = True
93 self.touches_manifests = True
94 self.touches_changelog = True
95 self.touches_requirements = True
78 96
79 97 def __eq__(self, other):
80 98 if not isinstance(other, improvement):
@@ -128,6 +146,12 b' class formatvariant(improvement):'
128 146 # operation in which this improvement was removed
129 147 postdowngrademessage = None
130 148
149 # By default for now, we assume every improvement touches all the things
150 touches_filelogs = True
151 touches_manifests = True
152 touches_changelog = True
153 touches_requirements = True
154
131 155 def __init__(self):
132 156 raise NotImplementedError()
133 157
@@ -674,6 +698,72 b' class UpgradeOperation(object):'
674 698 # should this operation create a backup of the store
675 699 self.backup_store = backup_store
676 700
701 # whether the operation touches different revlogs at all or not
702 self.touches_filelogs = self._touches_filelogs()
703 self.touches_manifests = self._touches_manifests()
704 self.touches_changelog = self._touches_changelog()
705 # whether the operation touches requirements file or not
706 self.touches_requirements = self._touches_requirements()
707 self.touches_store = (
708 self.touches_filelogs
709 or self.touches_manifests
710 or self.touches_changelog
711 )
712 # does the operation only touches repository requirement
713 self.requirements_only = (
714 self.touches_requirements and not self.touches_store
715 )
716
717 def _touches_filelogs(self):
718 for a in self.upgrade_actions:
719 # in optimisations, we re-process the revlogs again
720 if a.type == OPTIMISATION:
721 return True
722 elif a.touches_filelogs:
723 return True
724 for a in self.removed_actions:
725 if a.touches_filelogs:
726 return True
727 return False
728
729 def _touches_manifests(self):
730 for a in self.upgrade_actions:
731 # in optimisations, we re-process the revlogs again
732 if a.type == OPTIMISATION:
733 return True
734 elif a.touches_manifests:
735 return True
736 for a in self.removed_actions:
737 if a.touches_manifests:
738 return True
739 return False
740
741 def _touches_changelog(self):
742 for a in self.upgrade_actions:
743 # in optimisations, we re-process the revlogs again
744 if a.type == OPTIMISATION:
745 return True
746 elif a.touches_changelog:
747 return True
748 for a in self.removed_actions:
749 if a.touches_changelog:
750 return True
751 return False
752
753 def _touches_requirements(self):
754 for a in self.upgrade_actions:
755 # optimisations are used to re-process revlogs and does not result
756 # in a requirement being added or removed
757 if a.type == OPTIMISATION:
758 pass
759 elif a.touches_requirements:
760 return True
761 for a in self.removed_actions:
762 if a.touches_requirements:
763 return True
764
765 return False
766
677 767 def _write_labeled(self, l, label):
678 768 """
679 769 Utility function to aid writing of a list under one label
General Comments 0
You need to be logged in to leave comments. Login now