# HG changeset patch # User brett # Date 1200845448 18000 # Node ID cf191f957fd0d550afebef7c919855b9356114cc # Parent f1789e6586d8194ccbf5f9af3f26d1b341c651d0 [svn] Make just one -v print a list of filenames, a la tar. diff -r f1789e6586d8 -r cf191f957fd0 TODO --- a/TODO Sun Jan 20 09:47:33 2008 -0500 +++ b/TODO Sun Jan 20 11:10:48 2008 -0500 @@ -1,6 +1,5 @@ To do: * Add ability to list included archives for recursive extraction -* Make C-c not print a stack trace. Things which I have a use case/anti-use case for: * Support pisi packages (http://paketler.pardus.org.tr/pardus-2007/) diff -r f1789e6586d8 -r cf191f957fd0 scripts/dtrx --- a/scripts/dtrx Sun Jan 20 09:47:33 2008 -0500 +++ b/scripts/dtrx Sun Jan 20 11:10:48 2008 -0500 @@ -199,16 +199,16 @@ self.included_archives.append(os.path.join(path, filename)) def check_contents(self): - filenames = os.listdir('.') - if not filenames: + self.contents = os.listdir('.') + if not self.contents: self.content_type = EMPTY - elif len(filenames) == 1: - if self.basename() == filenames[0]: + elif len(self.contents) == 1: + if self.basename() == self.contents[0]: self.content_type = MATCHING_DIRECTORY else: self.content_type = ONE_ENTRY - self.content_name = filenames[0] - if os.path.isdir(filenames[0]): + self.content_name = self.contents[0] + if os.path.isdir(self.contents[0]): self.content_name += '/' else: self.content_type = BOMB @@ -273,6 +273,8 @@ def extract(self): self.content_type = ONE_ENTRY_KNOWN self.content_name = self.basename() + self.contents = None + self.included_root = './' try: output_fd, self.target = tempfile.mkstemp(prefix='.dtrx-', dir='.') except (OSError, IOError), error: @@ -815,6 +817,10 @@ handlers = [FlatHandler, OverwriteHandler, MatchHandler, EmptyHandler, BombHandler] + def __init__(self, options, filenames): + BaseAction.__init__(self, options, filenames) + self.did_print = False + def get_handler(self, extractor): if extractor.content_type == ONE_ENTRY: self.options.one_entry_policy.prep(self.current_filename, @@ -825,11 +831,41 @@ self.current_handler = handler(extractor, self.options) break + def show_extraction(self, extractor): + if self.options.log_level > logging.INFO: + return + elif self.did_print: + print + else: + self.did_print = True + print "%s:" % (self.current_filename,) + if extractor.contents is None: + print self.current_handler.target + return + if self.current_handler.target == '.': + filenames = extractor.contents + filenames.sort(reverse=True) + else: + filenames = [self.current_handler.target] + pathjoin = os.path.join + isdir = os.path.isdir + while filenames: + filename = filenames.pop() + if isdir(filename): + print "%s/" % (filename,) + new_filenames = os.listdir(filename) + new_filenames.sort(reverse=True) + filenames.extend([pathjoin(filename, new_filename) + for new_filename in new_filenames]) + else: + print filename + def run(self, filename, extractor): self.current_filename = filename error = (self.report(extractor.extract) or self.report(self.get_handler, extractor) or - self.report(self.current_handler.handle)) + self.report(self.current_handler.handle) or + self.report(self.show_extraction, extractor)) if not error: self.target = self.current_handler.target return error @@ -922,16 +958,17 @@ self.options, filenames = parser.parse_args(arguments) if not filenames: parser.error("you did not list any archives") + # This makes WARNING is the default. + self.options.log_level = (10 * (self.options.quiet - + self.options.verbose)) self.options.one_entry_policy = OneEntryPolicy(self.options) self.options.recursion_policy = RecursionPolicy(self.options) self.archives = {os.path.realpath(os.curdir): filenames} def setup_logger(self): - # WARNING is the default. - log_level = (10 * (self.options.quiet - self.options.verbose)) - logging.getLogger().setLevel(log_level) + logging.getLogger().setLevel(self.options.log_level) handler = logging.StreamHandler() - handler.setLevel(log_level) + handler.setLevel(self.options.log_level) formatter = logging.Formatter("dtrx: %(levelname)s: %(message)s") handler.setFormatter(formatter) logger.addHandler(handler) @@ -985,7 +1022,6 @@ self.current_directory, self.filenames = self.archives.popitem() os.chdir(self.current_directory) for filename in self.filenames: - logger.info("handling %s" % (filename,)) builder = ExtractorBuilder(filename, self.options) error = (self.check_file(filename) or self.try_extractors(filename, builder.get_extractor())) @@ -994,7 +1030,6 @@ logger.error("%s: %s" % (filename, error)) self.failures.append(filename) else: - logger.info("finished handling %s" % (filename,)) self.successes.append(filename) self.options.one_entry_policy.permanent_policy = EXTRACT_WRAP if self.failures: diff -r f1789e6586d8 -r cf191f957fd0 tests/tests.yml --- a/tests/tests.yml Sun Jan 20 09:47:33 2008 -0500 +++ b/tests/tests.yml Sun Jan 20 11:10:48 2008 -0500 @@ -541,3 +541,16 @@ for i in $(seq 1 10); do touch test-text.$i; done filenames: ../test-text.gz grep: "WARNING: extracting" + +- name: output filenames with -v + options: -v -n + filenames: test-onedir.tar.gz test-text.gz + output: | + test-onedir.tar.gz: + test-onedir/ + test-onedir/test/ + test-onedir/test/foobar + test-onedir/test/quux + + test-text.gz: + test-text