diff options
Diffstat (limited to 'morph')
-rwxr-xr-x | morph | 47 |
1 files changed, 47 insertions, 0 deletions
@@ -356,6 +356,53 @@ class Morph(cliapp.Application): tempdir.remove() + def cmd_make_patch(self, args): + assert os.path.exists(self.settings['cachedir']) + + tempdir = morphlib.tempdir.Tempdir(self.settings['tempdir']) + morph_loader = MorphologyLoader(self.settings) + src_manager = morphlib.sourcemanager.SourceManager(self, update=False) + factory = morphlib.builder.Factory(tempdir) + factory.create_staging() + builder = morphlib.builder.Builder(tempdir, self, morph_loader, + src_manager, factory) + #cachedir = morphlib.cachedir.CacheDir(self.settings['cachedir']) + ex = morphlib.execute.Execute('.', self.msg) + + outpath = args[0] + args = args[1:] + trip_iter = self._itertriplets(args) + paths = {} + for name in ('source', 'target'): + repo, ref, filename = trip_iter.next() + print repo, ref, filename + treeish = src_manager.get_treeish(repo, ref) + morph = morph_loader.load(treeish, filename) + blob = morphlib.blobs.Blob.create_blob(morph) + blob_builder = builder.create_blob_builder(blob) + paths[name] = blob_builder.filename(morph.name) + + try: + for name in paths.iterkeys(): + # mount the system images + part = morphlib.fsutils.setup_device_mapping(ex, paths[name]) + mount_point = tempdir.join('mnt_' + name) + morphlib.fsutils.mount(ex, part, mount_point) + + # make a diff + ex.runv(['tbdiff-create', outpath, + os.path.join(tempdir.join('mnt_source'), 'factory'), + os.path.join(tempdir.join('mnt_target'), 'factory')]) + except Exception: + raise + finally: + # cleanup + for name in paths.iterkeys(): + mount_point = tempdir.join('mnt_' + name) + morphlib.fsutils.unmount(ex, mount_point) + morphlib.fsutils.undo_device_mapping(ex, paths[name]) + factory.remove_staging() + def cmd_init(self, args): '''Initialize a mine.''' |