diff --git a/mercurial/shelve.py b/mercurial/shelve.py --- a/mercurial/shelve.py +++ b/mercurial/shelve.py @@ -413,6 +413,36 @@ cmdutil.exportfile(repo, [node], fp, opts=mdiff.diffopts(git=True), match=match) +def _encodemergerecords(records): + """Encode mergestate records to store in changeset extras. + Takes list of tuples as input and returns str. + """ + items = [ + '%s\033%s' % (rtype, record) + for rtype, record in sorted(records) + ] + return "\n".join(items) + +def _decodemergerecords(data): + """Decode mergestate record from changeset extras to return + a list of tuples. + """ + records = [] + for l in data.split('\n'): + rtype, record = l.split('\033') + records.append((rtype, record)) + return records + +def _storeunresolvedmerge(ui, repo, name=None, extra=None): + """Store the mergestate information in changeset extra + + This will clear the mergestate and also stores the mergestate + information for later restoration. + """ + ms = merge.mergestate.read(repo) + extra['mergerecords'] = _encodemergerecords(ms._readrecords()) + ms.reset() + def _includeunknownfiles(repo, pats, opts, extra): s = repo.status(match=scmutil.match(repo[None], pats, opts), unknown=True)