Mercurial > public > mercurial-scm > hg
comparison mercurial/mergestate.py @ 48711:9bc86adf32f6
merge-actions: make merge action a full featured object
This open the way for having "smarter" value as action, making the usage code
simpler and more flexible.
We have to explicitly use __bytes__ call in a couple of place because Python2?
Differential Revision: https://phab.mercurial-scm.org/D12114
author | Pierre-Yves David <pierre-yves.david@octobus.net> |
---|---|
date | Fri, 28 Jan 2022 17:08:30 +0100 |
parents | b0aa9b0b9c21 |
children | 773ad0f5152d |
comparison
equal
deleted
inserted
replaced
48710:b0aa9b0b9c21 | 48711:9bc86adf32f6 |
---|---|
96 LEGACY_MERGE_DRIVER_STATE = b'm' | 96 LEGACY_MERGE_DRIVER_STATE = b'm' |
97 # This record was release in 3.7 and usage was removed in 5.6 | 97 # This record was release in 3.7 and usage was removed in 5.6 |
98 LEGACY_MERGE_DRIVER_MERGE = b'D' | 98 LEGACY_MERGE_DRIVER_MERGE = b'D' |
99 | 99 |
100 | 100 |
101 ACTION_FORGET = b'f' | 101 class MergeAction(object): |
102 ACTION_REMOVE = b'r' | 102 """represent an "action" merge need to take for a given file |
103 ACTION_ADD = b'a' | 103 |
104 ACTION_GET = b'g' | 104 Attributes: |
105 ACTION_PATH_CONFLICT = b'p' | 105 |
106 ACTION_PATH_CONFLICT_RESOLVE = b'pr' | 106 _short: internal representation used to identify each action |
107 ACTION_ADD_MODIFIED = b'am' | 107 """ |
108 ACTION_CREATED = b'c' | 108 |
109 ACTION_DELETED_CHANGED = b'dc' | 109 def __init__(self, short): |
110 ACTION_CHANGED_DELETED = b'cd' | 110 self._short = short |
111 ACTION_MERGE = b'm' | 111 |
112 ACTION_LOCAL_DIR_RENAME_GET = b'dg' | 112 def __hash__(self): |
113 ACTION_DIR_RENAME_MOVE_LOCAL = b'dm' | 113 return hash(self._short) |
114 ACTION_KEEP = b'k' | 114 |
115 def __repr__(self): | |
116 return 'MergeAction<%s>' % self._short.decode('ascii') | |
117 | |
118 def __bytes__(self): | |
119 return self._short | |
120 | |
121 def __eq__(self, other): | |
122 if other is None: | |
123 return False | |
124 assert isinstance(other, MergeAction) | |
125 return self._short == other._short | |
126 | |
127 def __lt__(self, other): | |
128 return self._short < other._short | |
129 | |
130 | |
131 ACTION_FORGET = MergeAction(b'f') | |
132 ACTION_REMOVE = MergeAction(b'r') | |
133 ACTION_ADD = MergeAction(b'a') | |
134 ACTION_GET = MergeAction(b'g') | |
135 ACTION_PATH_CONFLICT = MergeAction(b'p') | |
136 ACTION_PATH_CONFLICT_RESOLVE = MergeAction('pr') | |
137 ACTION_ADD_MODIFIED = MergeAction(b'am') | |
138 ACTION_CREATED = MergeAction(b'c') | |
139 ACTION_DELETED_CHANGED = MergeAction(b'dc') | |
140 ACTION_CHANGED_DELETED = MergeAction(b'cd') | |
141 ACTION_MERGE = MergeAction(b'm') | |
142 ACTION_LOCAL_DIR_RENAME_GET = MergeAction(b'dg') | |
143 ACTION_DIR_RENAME_MOVE_LOCAL = MergeAction(b'dm') | |
144 ACTION_KEEP = MergeAction(b'k') | |
115 # the file was absent on local side before merge and we should | 145 # the file was absent on local side before merge and we should |
116 # keep it absent (absent means file not present, it can be a result | 146 # keep it absent (absent means file not present, it can be a result |
117 # of file deletion, rename etc.) | 147 # of file deletion, rename etc.) |
118 ACTION_KEEP_ABSENT = b'ka' | 148 ACTION_KEEP_ABSENT = MergeAction(b'ka') |
119 # the file is absent on the ancestor and remote side of the merge | 149 # the file is absent on the ancestor and remote side of the merge |
120 # hence this file is new and we should keep it | 150 # hence this file is new and we should keep it |
121 ACTION_KEEP_NEW = b'kn' | 151 ACTION_KEEP_NEW = MergeAction(b'kn') |
122 ACTION_EXEC = b'e' | 152 ACTION_EXEC = MergeAction(b'e') |
123 ACTION_CREATED_MERGE = b'cm' | 153 ACTION_CREATED_MERGE = MergeAction(b'cm') |
124 | 154 |
125 # actions which are no op | 155 # actions which are no op |
126 NO_OP_ACTIONS = ( | 156 NO_OP_ACTIONS = ( |
127 ACTION_KEEP, | 157 ACTION_KEEP, |
128 ACTION_KEEP_ABSENT, | 158 ACTION_KEEP_ABSENT, |