Mercurial > public > mercurial-scm > hg
comparison mercurial/merge.py @ 26650:6ff5534c8afc
merge.mergestate: add support for persisting driver-resolved files
A driver-resolved file is a file that's handled specially by the driver. A
common use case for this state would be autogenerated files, the generation of
which should happen only after all source conflicts are resolved.
This is done with an uppercase letter because older versions of Mercurial will
not know how to treat such files at all.
author | Siddharth Agarwal <sid0@fb.com> |
---|---|
date | Mon, 28 Sep 2015 18:34:06 -0700 |
parents | f618b6aa8cdd |
children | d58f2f0e2b19 |
comparison
equal
deleted
inserted
replaced
26649:f618b6aa8cdd | 26650:6ff5534c8afc |
---|---|
59 Currently known record: | 59 Currently known record: |
60 | 60 |
61 L: the node of the "local" part of the merge (hexified version) | 61 L: the node of the "local" part of the merge (hexified version) |
62 O: the node of the "other" part of the merge (hexified version) | 62 O: the node of the "other" part of the merge (hexified version) |
63 F: a file to be merged entry | 63 F: a file to be merged entry |
64 D: a file that the external merge driver will merge internally | |
65 (experimental) | |
64 m: the external merge driver defined for this merge plus its run state | 66 m: the external merge driver defined for this merge plus its run state |
65 (experimental) | 67 (experimental) |
66 | 68 |
67 Merge driver run states (experimental): | 69 Merge driver run states (experimental): |
68 u: driver-resolved files unmarked -- needs to be run next time we're about | 70 u: driver-resolved files unmarked -- needs to be run next time we're about |
123 if self.mergedriver != bits[0]: | 125 if self.mergedriver != bits[0]: |
124 raise error.ConfigError( | 126 raise error.ConfigError( |
125 _("merge driver changed since merge started"), | 127 _("merge driver changed since merge started"), |
126 hint=_("revert merge driver change or abort merge")) | 128 hint=_("revert merge driver change or abort merge")) |
127 self._mdstate = mdstate | 129 self._mdstate = mdstate |
128 elif rtype == 'F': | 130 elif rtype in 'FD': |
129 bits = record.split('\0') | 131 bits = record.split('\0') |
130 self._state[bits[0]] = bits[1:] | 132 self._state[bits[0]] = bits[1:] |
131 elif not rtype.islower(): | 133 elif not rtype.islower(): |
132 raise error.Abort(_('unsupported merge state record: %s') | 134 raise error.Abort(_('unsupported merge state record: %s') |
133 % rtype) | 135 % rtype) |
252 records.append(('O', hex(self._other))) | 254 records.append(('O', hex(self._other))) |
253 if self.mergedriver: | 255 if self.mergedriver: |
254 records.append(('m', '\0'.join([ | 256 records.append(('m', '\0'.join([ |
255 self.mergedriver, self._mdstate]))) | 257 self.mergedriver, self._mdstate]))) |
256 for d, v in self._state.iteritems(): | 258 for d, v in self._state.iteritems(): |
257 records.append(('F', '\0'.join([d] + v))) | 259 if v[0] == 'd': |
260 records.append(('D', '\0'.join([d] + v))) | |
261 else: | |
262 records.append(('F', '\0'.join([d] + v))) | |
258 self._writerecords(records) | 263 self._writerecords(records) |
259 self._dirty = False | 264 self._dirty = False |
260 | 265 |
261 def _writerecords(self, records): | 266 def _writerecords(self, records): |
262 """Write current state on disk (both v1 and v2)""" | 267 """Write current state on disk (both v1 and v2)""" |