summaryrefslogtreecommitdiff
path: root/morphlib/plugins/trebuchet_plugin.py
diff options
context:
space:
mode:
Diffstat (limited to 'morphlib/plugins/trebuchet_plugin.py')
-rw-r--r--morphlib/plugins/trebuchet_plugin.py60
1 files changed, 3 insertions, 57 deletions
diff --git a/morphlib/plugins/trebuchet_plugin.py b/morphlib/plugins/trebuchet_plugin.py
index 2bdf4c3c..1ebffbf4 100644
--- a/morphlib/plugins/trebuchet_plugin.py
+++ b/morphlib/plugins/trebuchet_plugin.py
@@ -1,4 +1,4 @@
-# Copyright (C) 2012 Codethink Limited
+# Copyright (C) 2012-2013 Codethink Limited
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
@@ -21,62 +21,8 @@ import gzip
import morphlib
-class MountableImage(object):
- '''Mountable image (deals with decompression).
-
- Note, this is a read-only mount in the sense that the decompressed
- image is not then recompressed after, instead any changes are discarded.
-
- '''
- def __init__(self, app, artifact_path):
- self.app = app
- self.artifact_path = artifact_path
-
- def setup(self, path):
- self.app.status(msg='Preparing image %(path)s', path=path)
- self.app.status(msg=' Decompressing...', chatty=True)
- (tempfd, self.temp_path) = \
- tempfile.mkstemp(dir=self.app.settings['tempdir'])
-
- try:
- with os.fdopen(tempfd, "wb") as outfh:
- infh = gzip.open(path, "rb")
- morphlib.util.copyfileobj(infh, outfh)
- infh.close()
- except:
- os.unlink(self.temp_path)
- raise
- self.app.status(msg=' Mounting image at %(path)s',
- path=self.temp_path, chatty=True)
- part = morphlib.fsutils.setup_device_mapping(self.app.runcmd,
- self.temp_path)
- mount_point = tempfile.mkdtemp(dir=self.app.settings['tempdir'])
- morphlib.fsutils.mount(self.app.runcmd, part, mount_point)
- self.mount_point = mount_point
- return mount_point
-
- def cleanup(self, path, mount_point):
- self.app.status(msg='Clearing down image at %(path)s', path=path,
- chatty=True)
- try:
- morphlib.fsutils.unmount(self.app.runcmd, mount_point)
- except:
- pass
- try:
- morphlib.fsutils.undo_device_mapping(self.app.runcmd, path)
- except:
- pass
- try:
- os.rmdir(mount_point)
- os.unlink(path)
- except:
- pass
-
- def __enter__(self):
- return self.setup(self.artifact_path)
-
- def __exit__(self, exctype, excvalue, exctraceback):
- self.cleanup(self.temp_path, self.mount_point)
+from morphlib.mountableimage import MountableImage
+
class TrebuchetPlugin(cliapp.Plugin):