Revert "Full Juju Charm support"
[osm/SO.git] / rwlaunchpad / plugins / rwlaunchpadtasklet / rift / package / package.py
index b416281..0b5c499 100644 (file)
@@ -431,10 +431,21 @@ class DescriptorPackage(object):
         Raises:
             NotADirectoryError - dest_root_dir is not a directory
         """
+        def find_prefix():
+            """ Find comon prefix of all files in package. This prefix will be 
+            used to collapse directory structure during extraction to eliminate 
+            empty nested folders.
+            """
+            common_dir = set() 
+            for f in self.files: 
+                common_dir.add(os.path.dirname(f))
+            prefix = os.path.commonprefix(list(common_dir))
+            return prefix if prefix else None
+
         if not os.path.isdir(dest_root_dir):
             raise NotADirectoryError(dest_root_dir)
 
-        self.extract_dir(None, dest_root_dir, extract_images)
+        self.extract_dir(find_prefix(), dest_root_dir, extract_images)
 
     def open(self, rel_path):
         """ Open a file contained in the package in read-only, binary mode.
@@ -613,7 +624,7 @@ class PackageChecksumValidator(object):
                 archive_checksums = checksums.ArchiveChecksums.from_file_desc(checksum_hdl)
         except (FileNotFoundError, PackageError) as e:
             self._log.warning("Could not open package checksum file.  Not validating checksums.")
-            return validated_file_checksums
+            return self.validated_file_checksums
 
         for pkg_file in package.files:
             if pkg_file == checksum_file:
@@ -635,7 +646,7 @@ class PackageChecksumValidator(object):
                 raise PackageValidationError(msg) from e
 
             if archive_checksums[pkg_file_no_prefix] != file_checksum:
-                msg = "{} checksum ({}) did match expected checksum ({})".format(
+                msg = "{} checksum ({}) did not match expected checksum ({})".format(
                         pkg_file, file_checksum, archive_checksums[pkg_file_no_prefix]
                         )
                 self._log.error(msg)