[Thincrust-devel] [PATCH] fixed problem with long move operations (#466278)

David Huff dhuff at redhat.com
Fri Oct 10 21:40:02 UTC 2008


---
 appcreate/appliance.py  |   56 ++++++++++++++++++++++++++++------------------
 tools/appliance-creator |    9 ++++++-
 2 files changed, 41 insertions(+), 24 deletions(-)

diff --git a/appcreate/appliance.py b/appcreate/appliance.py
index 054c69a..c3af120 100644
--- a/appcreate/appliance.py
+++ b/appcreate/appliance.py
@@ -332,22 +332,10 @@ class ApplianceImageCreator(ImageCreator):
             if rc != 0:
                 raise CreatorError("Unable to convert disk to %s" % self.__format)
 
-    def _package_image(self):
-        #package image and metadata    
-        if self.__package == "zip":
-            #dst = "%s/%s.zip" % (self.__imgdir, self.name) tmp dir
-            dst = "%s/%s.zip" % (self._outdir, self.name)
-            files = glob.glob('%s/*' % self.__imgdir)
-            logging.debug("creating %s" %  (dst))
-            z = zipfile.ZipFile(dst, "w", compression=8, allowZip64="True")
-            for file in files:
-                if file != dst:
-                    logging.debug("adding %s to %s" % (file,dst))
-                    z.write(file, arcname=os.path.basename(file), compress_type=None)
-            z.close()
-        
 
     def _stage_final_image(self):
+        """Stage the final system image in _outdir.
+        """
         self._resparse()
         self._write_image_xml()
         
@@ -358,16 +346,40 @@ class ApplianceImageCreator(ImageCreator):
         #else        
         if self.__format != "raw":
             self._convert_image()
+        
+        if self.__package == "zip":
+            dst = "%s/%s.zip" % (self._outdir, self.name)
+            files = glob.glob('%s/*' % self.__imgdir)
+            logging.debug("creating %s" %  (dst))
+            z = zipfile.ZipFile(dst, "w", compression=8, allowZip64="True")
+            for file in files:
+                if file != dst:
+                    logging.debug("adding %s to %s" % (file,dst))
+                    z.write(file, arcname=os.path.basename(file), compress_type=None)
+            z.close()
+        
         if self.__package == "none":
             logging.debug("moving disks to final location")
             for files in glob.glob('%s/*' % self.__imgdir):  
-                logging.debug("moving %s to %s" % (files, self._outdir))
-                shutil.move(files, self._outdir)
-        else:
-            self._package_image()
-        
-        print("done")
-
-            
+                logging.debug("moving %s to %s/%s" % (files, self._outdir, os.path.basename(files)))
+                try:
+                    os.rename(files, '%s/%s' % (self._outdir, os.path.basename(files)))
+                except Exception, e:
+                    shutil.move(files, '%s/%s' % (self._outdir, os.path.basename(files)))
+                
 
 
+    def package(self, destdir):
+        """Prepares the created image for final delivery.
+        """
+        self._stage_final_image()         
+
+        for f in os.listdir(self._outdir):
+            try:
+                os.rename(os.path.join(self._outdir, f),
+                            os.path.join(destdir, f))
+            except Exception, e:
+                shutil.move(os.path.join(self._outdir, f),
+                            os.path.join(destdir, f))
+                
+        print "Finished"
diff --git a/tools/appliance-creator b/tools/appliance-creator
index 6d990de..805771f 100755
--- a/tools/appliance-creator
+++ b/tools/appliance-creator
@@ -99,7 +99,12 @@ def main():
 
     name = imgcreate.build_name(options.kscfg)
     if options.name:
-        name = options.name
+        if os.path.dirname(options.name):
+            destdir=os.path.dirname(options.name)
+            name=os.path.basename(options.name)
+        else:
+            name = options.name
+            destdir = "."
  
     creator = appcreate.ApplianceImageCreator(ks, name, options.format, options.package, options.vmem, options.vcpu)
     creator.tmpdir = options.tmpdir
@@ -109,7 +114,7 @@ def main():
         creator.install()
         creator.configure()
         creator.unmount()
-        creator.package()    
+        creator.package(destdir)    
     except imgcreate.CreatorError, e:
         logging.error("Unable to create appliance : %s" % e)
         return 1
-- 
1.5.5.1




More information about the Thincrust-devel mailing list