[CRIU] [PATCH 4/7] crit: split convert command into decode and encode

Ruslan Kuprieiev kupruser at gmail.com
Wed Jan 14 06:32:38 PST 2015


Signed-off-by: Ruslan Kuprieiev <kupruser at gmail.com>
---
 crit | 49 ++++++++++++++++++++++++++-----------------------
 1 file changed, 26 insertions(+), 23 deletions(-)

diff --git a/crit b/crit
index b87a62d..667efa8 100755
--- a/crit
+++ b/crit
@@ -9,8 +9,8 @@ def handle_cmdline_opts():
 	desc = 'CRiu Image Tool'
 	parser = argparse.ArgumentParser(description=desc)
 	parser.add_argument('command',
-			    choices = ['convert'],
-			help = 'use \"covert\" to convert CRIU image to/from human-readable format')
+			    choices = ['decode', 'encode'],
+			help = 'decode/encode - convert criu image from/to binary type to/from json')
 	parser.add_argument('-i',
 			    '--in',
 			help = 'input file (stdin by default)')
@@ -26,50 +26,53 @@ def handle_cmdline_opts():
 
 	return opts
 
-def convert_img(opts):
-	orig_type = None
+
+def decode(opts):
 	indent = None
 
 	# If no input file is set -- stdin is used.
 	if opts['in']:
 		with open(opts['in'], 'r') as f:
-			in_str = f.read()
-	else:
-		in_str = sys.stdin.read()
-
-	# Detect what is the type we are dealing with.
-	if in_str[len(in_str) - len(in_str.lstrip())] == '{':
-			img = json.loads(in_str)
-			orig_type = 'json'
+			img = pycriu.images.load(f)
 	else:
-			img = pycriu.images.loads(in_str)
-			orig_type = 'bin'
+		img = pycriu.images.load(sys.stdin)
 
 	# For stdout --format nice is set by default.
 	if opts['format'] == 'nice' or (opts['format'] == None and opts['out'] == None):
 		indent = 4
 
-	# Just convert image to the opposite format
-	if orig_type == 'json':
-		out_str = pycriu.images.dumps(img)
+	# If no output file is set -- stdout is used.
+	if opts['out']:
+		with open(opts['out'], 'w+') as f:
+			json.dump(img, f, indent=indent)
 	else:
-		out_str = json.dumps(img, indent=indent)
+		json.dump(img, sys.stdout, indent=indent)
+		sys.stdout.write("\n")
+
+
+def encode(opts):
+	# If no input file is set -- stdin is used.
+	if opts['in']:
+		with open(opts['in'], 'r') as f:
+			img = json.load(f)
+	else:
+		img = json.load(sys.stdin)
 
 	# If no output file is set -- stdout is used.
 	if opts['out']:
 		with open(opts['out'], 'w+') as f:
-			f.write(out_str)
+			pycriu.images.dump(img, f)
 	else:
-		if orig_type == 'bin':
-			out_str += "\n"
-		sys.stdout.write(out_str)
+		pycriu.images.dump(img, sys.stdout)
+
 
 def main():
 	#Handle cmdline options
 	opts = handle_cmdline_opts()
 
 	cmds = {
-		'convert' : convert_img
+		'decode' : decode,
+		'encode' : encode
 	}
 
 	cmds[opts['command']](opts)
-- 
2.1.0



More information about the CRIU mailing list