formatter: add pickle format
This gives convenient Python2 output. Python 3 users will need encoding=bytes.
--- a/mercurial/formatter.py Mon Sep 15 13:15:07 2014 -0500
+++ b/mercurial/formatter.py Fri Sep 12 18:36:38 2014 -0500
@@ -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 @@
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 @@
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 != "":
--- a/tests/test-locate.t Mon Sep 15 13:15:07 2014 -0500
+++ b/tests/test-locate.t Fri Sep 12 18:36:38 2014 -0500
@@ -128,4 +128,14 @@
../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 ../..
--- a/tests/test-status.t Mon Sep 15 13:15:07 2014 -0500
+++ b/tests/test-status.t Fri Sep 12 18:36:38 2014 -0500
@@ -202,6 +202,12 @@
}
]
+ $ 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