Blob Blame History Raw
commit b65606177be6210f3f0501e5689cdbb107e0f2f7
Author: Bryn M. Reeves <bmr@redhat.com>
Date:   Tue Nov 5 16:07:23 2013 +0000

    Restore --build command line option
    
    Releases of sos prior to 3.0 included the '--build' option to
    disable creation of a compressed archive and to leave the
    temporary build tree in place. This was removed with the
    reorganisation of the archive classes to support in-line
    archiving. Since all supported policies are now using an archive
    that derives from FileCacheArchive (commit 0178d5f) the option
    can be re-introduced.
    
    Archive classes that do not accumulate files in a temporary
    directory will return the path to the in-progress archive file.
    
    Signed-off-by: Bryn M. Reeves <bmr@redhat.com>

diff --git a/sos/archive.py b/sos/archive.py
index 4291660..28bf197 100644
--- a/sos/archive.py
+++ b/sos/archive.py
@@ -65,6 +65,15 @@ class Archive(object):
         to be included in the generated archive."""
         raise NotImplementedError
 
+    def get_archive_path(self):
+        """Return a string representing the path to the temporary
+        archive. For archive classes that implement in-line handling
+        this will be the archive file itself. Archives that use a
+        directory based cache prior to packaging should return the
+        path to the temporary directory where the report content is
+        located"""
+        pass
+
     def cleanup(self):
         """Clean up any temporary resources used by an Archive class."""
         pass
@@ -81,7 +90,7 @@ class FileCacheArchive(Archive):
 
     _tmp_dir = ""
     _archive_root = ""
-    _archive_path = ""
+    _archive_name = ""
     
     def __init__(self, name, tmpdir):
         self._name = name
@@ -146,6 +155,9 @@ class FileCacheArchive(Archive):
     def get_tmp_dir(self):
         return self._archive_root
 
+    def get_archive_path(self):
+        return self._archive_root
+
     def makedirs(self, path, mode=0700):
         self._makedirs(self.dest_path(path))
         self.log.debug("created directory at %s in FileCacheArchive %s"
@@ -162,8 +174,8 @@ class FileCacheArchive(Archive):
         self.log.debug("finalizing archive %s" % self._archive_root)
         self._build_archive()
         self.cleanup()
-        self.log.debug("built archive at %s (size=%d)" % (self._archive_path,
-        os.stat(self._archive_path).st_size))
+        self.log.debug("built archive at %s (size=%d)" % (self._archive_name,
+        os.stat(self._archive_name).st_size))
         return self._compress()
 
 class TarFileArchive(FileCacheArchive):
@@ -174,7 +186,7 @@ class TarFileArchive(FileCacheArchive):
     def __init__(self, name, tmpdir):
         super(TarFileArchive, self).__init__(name, tmpdir)
         self._suffix = "tar"
-        self._archive_path = os.path.join(tmpdir, self.name())
+        self._archive_name = os.path.join(tmpdir, self.name())
 
     def set_tarinfo_from_stat(self, tar_info, fstat, mode=None):
         tar_info.mtime = fstat.st_mtime
@@ -218,7 +230,7 @@ class TarFileArchive(FileCacheArchive):
         old_pwd = os.getcwd()
         old_umask = os.umask(0077)
         os.chdir(self._tmp_dir)
-        tar = tarfile.open(self._archive_path, mode="w")
+        tar = tarfile.open(self._archive_name, mode="w")
         tar.add(os.path.split(self._name)[1], filter=self.copy_permissions_filter)
         tar.close()
         os.umask(old_umask)
diff --git a/sos/policies/__init__.py b/sos/policies/__init__.py
index 983842d..6de93fb 100644
--- a/sos/policies/__init__.py
+++ b/sos/policies/__init__.py
@@ -205,12 +205,6 @@ No changes will be made to system configuration.
         """
         pass
 
-    def package_results(self, package_name):
-        """
-        This function is called prior to packaging.
-        """
-        pass
-
     def post_work(self):
         """
         This function is called after the sosreport has been generated.
@@ -476,5 +470,3 @@ class LinuxPolicy(Policy):
         
         return
 
-    def package_results(self, archive_filename):
-        self._print(_("Creating compressed archive..."))
diff --git a/sos/sosreport.py b/sos/sosreport.py
index 49e9d92..42be3ee 100644
--- a/sos/sosreport.py
+++ b/sos/sosreport.py
@@ -327,6 +327,19 @@ class SoSOptions(object):
         self._batch = value
 
     @property
+    def build(self):
+        if self._options != None:
+            return self._options.build
+        return self._build
+
+    @build.setter
+    def build(self):
+        self._check_options_initialized()
+        if not isinstance(value, bool):
+            raise TypeError("SoSOptions.build expects a boolean")
+        self._build = value
+
+    @property
     def verbosity(self):
         if self._options != None:
             return self._options.verbosity
@@ -476,6 +489,9 @@ class SoSOptions(object):
         parser.add_option("--batch", action="store_true",
                              dest="batch", default=False,
                              help="batch mode - do not prompt interactively")
+        parser.add_option("--build", action="store_true", \
+                             dest="build", default=False, \
+                             help="keep sos tree available and dont package results")
         parser.add_option("-v", "--verbose", action="count",
                              dest="verbosity",
                              help="increase verbosity")
@@ -1097,24 +1113,29 @@ class SoSReport(object):
     def final_work(self):
 
         # package up the results for the support organization
-        self.policy.package_results(self.archive.name())
+        if not self.opts.build:
+            self.ui_log.info(_("Creating compressed archive..."))
 
-        self._finish_logging()
+            # compression could fail for a number of reasons
+            try:
+                final_filename = self.archive.finalize(self.opts.compression_type)
+            except:
+                if self.opts.debug:
+                    raise
+                else:
+                    return False
 
-        # compression could fail for a number of reasons
-        try:
-            final_filename = self.archive.finalize(self.opts.compression_type)
-        except:
-            if self.opts.debug:
-                raise
+            # automated submission will go here
+            if not self.opts.upload:
+                self.policy.display_results(final_filename)
             else:
-                return False
+                self.policy.upload_results(final_filename)
 
-        # automated submission will go here
-        if not self.opts.upload:
-            self.policy.display_results(final_filename)
         else:
-            self.policy.upload_results(final_filename)
+            self.ui_log.info(_("\n  sosreport build tree is located at : %s\n"
+                            % self.archive.get_archive_path()))
+
+        self._finish_logging()
 
         self.tempfile_util.clean()