scripts/dtrx

branch
trunk
changeset 78
978307ec7d11
parent 77
3a1f49be7667
child 79
9c0cc7aef510
--- a/scripts/dtrx	Sun Jul 20 20:25:54 2008 -0400
+++ b/scripts/dtrx	Sun Jul 20 20:45:54 2008 -0400
@@ -131,7 +131,6 @@
     decoders = {'bzip2': 'bzcat', 'gzip': 'zcat', 'compress': 'zcat',
                 'lzma': 'lzcat'}
     name_checker = DirectoryChecker
-    warning_header = "The extraction process output the following errors:\n"
 
     def __init__(self, filename, encoding):
         if encoding and (not self.decoders.has_key(encoding)):
@@ -243,13 +242,13 @@
             pieces.pop()
         return '.'.join(pieces)
 
-    def check_success(self, got_output):
+    def get_stderr(self):
         self.stderr.seek(0, 0)
-        if self.stderr.read(1):
-            self.stderr.seek(0, 0)
-            logger.warning(self.warning_header +
-                           self.stderr.read(-1).rstrip('\n'))
+        errors = self.stderr.read(-1)
         self.stderr.close()
+        return errors
+
+    def check_success(self, got_output):
         error_index = self.first_bad_exit_code()
         if (not got_output) and (error_index is not None):
             command = ' '.join(self.pipes[error_index][0])
@@ -1085,26 +1084,34 @@
         if stat.S_ISDIR(result.st_mode):
             return "cannot extract a directory"
 
+    def show_stderr(self, logger_func, stderr):
+        if stderr:
+            logger_func("Error output from the extraction process:\n" +
+                        stderr.rstrip('\n'))
+
     def try_extractors(self, filename, builder):
         errors = []
         for extractor in builder:
             error = self.action.run(filename, extractor)
             if error:
-                errors.append((extractor.file_type, extractor.encoding, error))
+                errors.append((extractor.file_type, extractor.encoding, error,
+                               extractor.get_stderr()))
                 if extractor.target is not None:
                     self.clean_destination(extractor.target)
             else:
+                self.show_stderr(logger.warn, extractor.get_stderr())
                 self.recurse(filename, extractor, self.action)
                 return
         logger.error("could not handle %s" % (filename,))
         if not errors:
             logger.error("not a known archive type")
             return True
-        for file_type, encoding, error in errors:
+        for file_type, encoding, error, stderr in errors:
             message = ["treating as", file_type, "failed:", error]
             if encoding:
                 message.insert(1, "%s-encoded" % (encoding,))
             logger.error(' '.join(message))
+            self.show_stderr(logger.error, stderr)
         return True
         
     def run(self):

mercurial