[PATCH 1 of 3] merge: add state extras merge state data
Siddharth Agarwal
sid at less-broken.com
Tue Jan 12 14:57:15 CST 2016
On 1/6/16 17:40, Durham Goode wrote:
> # HG changeset patch
> # User Durham Goode <durham at fb.com>
> # Date 1452130474 28800
> # Wed Jan 06 17:34:34 2016 -0800
> # Node ID dc35478efbae806fcee1449f27b1b92d00d14853
> # Parent b8405d739149cdd6d8d9bd5e3dd2ad8487b1f09a
> merge: add state extras merge state data
>
> In future commits we will want to store more data related to each file in the
> merge state. This patch adds an optional record for storing a dictionary of
> extras for each file.
>
> diff --git a/mercurial/merge.py b/mercurial/merge.py
> --- a/mercurial/merge.py
> +++ b/mercurial/merge.py
> @@ -64,6 +64,7 @@ class mergestate(object):
> (experimental)
> m: the external merge driver defined for this merge plus its run state
> (experimental)
> + f: a (filename, dictonary) tuple of optional values for a given file
> X: unsupported mandatory record type (used in tests)
> x: unsupported advisory record type (used in tests)
>
> @@ -101,6 +102,7 @@ class mergestate(object):
>
> def reset(self, node=None, other=None):
> self._state = {}
> + self._stateextras = {}
> self._local = None
> self._other = None
> for var in ('localctx', 'otherctx'):
> @@ -125,6 +127,7 @@ class mergestate(object):
> of on disk file.
> """
> self._state = {}
> + self._stateextras = {}
> self._local = None
> self._other = None
> for var in ('localctx', 'otherctx'):
> @@ -151,6 +154,16 @@ class mergestate(object):
> elif rtype in 'FDC':
> bits = record.split('\0')
> self._state[bits[0]] = bits[1:]
> + elif rtype == 'f':
> + filename, rawextras = record.split('\0', 1)
> + extraparts = rawextras.split('\0')
> + extras = {}
> + i = 0
> + while i < len(extraparts):
> + extras[extraparts[i]] = extraparts[i + 1]
> + i += 2
> +
> + self._stateextras[filename] = extras
> elif not rtype.islower():
> unsupported.add(rtype)
> self._results = {}
> @@ -335,6 +348,10 @@ class mergestate(object):
> records.append(('C', '\0'.join([d] + v)))
> else:
> records.append(('F', '\0'.join([d] + v)))
> + for filename, extras in self._stateextras.iteritems():
> + rawextras = '\0'.join('%s\0%s' % (k, v) for k, v in
> + extras.iteritems())
Please please please sort this.
> + records.append(('f', '%s\0%s' % (filename, rawextras)))
> return records
>
> def _writerecords(self, records):
> @@ -422,6 +439,9 @@ class mergestate(object):
> if entry[0] == 'd':
> yield f
>
> + def extras(self, filename):
> + return self._stateextras.setdefault(filename, {})
> +
> def _resolve(self, preresolve, dfile, wctx, labels=None):
> """rerun merge process for file path `dfile`"""
> if self[dfile] in 'rd':
> @@ -461,6 +481,7 @@ class mergestate(object):
> if r is None:
> # no real conflict
> del self._state[dfile]
> + self._stateextras.pop(dfile, None)
> self._dirty = True
> elif not r:
> self.mark(dfile, 'r')
> _______________________________________________
> Mercurial-devel mailing list
> Mercurial-devel at selenic.com
> https://selenic.com/mailman/listinfo/mercurial-devel
More information about the Mercurial-devel
mailing list