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