formatter: add pickle format

This gives convenient Python2 output. Python 3 users will need encoding=bytes.
This commit is contained in:
Matt Mackall 2014-09-12 18:36:38 -05:00
parent aa7d73cbbb
commit 8a32bb8140
3 changed files with 29 additions and 0 deletions

View File

@ -5,6 +5,7 @@
# This software may be used and distributed according to the terms of the
# GNU General Public License version 2 or any later version.
import cPickle
from i18n import _
import encoding, util
@ -77,6 +78,16 @@ class debugformatter(baseformatter):
baseformatter.end(self)
self._ui.write("]\n")
class pickleformatter(baseformatter):
def __init__(self, ui, topic, opts):
baseformatter.__init__(self, ui, topic, opts)
self._data = []
def _showitem(self):
self._data.append(self._item)
def end(self):
baseformatter.end(self)
self._ui.write(cPickle.dumps(self._data))
class jsonformatter(baseformatter):
def __init__(self, ui, topic, opts):
baseformatter.__init__(self, ui, topic, opts)
@ -108,6 +119,8 @@ def formatter(ui, topic, opts):
template = opts.get("template", "")
if template == "json":
return jsonformatter(ui, topic, opts)
elif template == "pickle":
return pickleformatter(ui, topic, opts)
elif template == "debug":
return debugformatter(ui, topic, opts)
elif template != "":

View File

@ -128,4 +128,14 @@ Issue294: hg remove --after dir fails when dir.* also exists
../t.h (glob)
../t/e.h (glob)
$ hg files
../b
../dir.h/foo
../t.h
../t/b
../t/e.h
../t/x
$ hg files .
[1]
$ cd ../..

View File

@ -202,6 +202,12 @@ hg status -A:
}
]
$ hg status -A -Tpickle > pickle
>>> import pickle
>>> print sorted((x['status'], x['path']) for x in pickle.load(open("pickle")))
[('!', 'deleted'), ('?', 'pickle'), ('?', 'unknown'), ('A', 'added'), ('A', 'copied'), ('C', '.hgignore'), ('C', 'modified'), ('I', 'ignored'), ('R', 'removed')]
$ rm pickle
$ echo "^ignoreddir$" > .hgignore
$ mkdir ignoreddir
$ touch ignoreddir/file