668 prompt = "What do you want to do? (I/r/h) " |
668 prompt = "What do you want to do? (I/r/h) " |
669 |
669 |
670 def __init__(self, options): |
670 def __init__(self, options): |
671 BasePolicy.__init__(self, options) |
671 BasePolicy.__init__(self, options) |
672 if options.flat: |
672 if options.flat: |
|
673 default = 'h' |
|
674 elif options.one_entry_default is not None: |
|
675 default = options.one_entry_default.lower() |
|
676 else: |
|
677 return |
|
678 if 'here'.startswith(default): |
673 self.permanent_policy = EXTRACT_HERE |
679 self.permanent_policy = EXTRACT_HERE |
|
680 elif 'rename'.startswith(default): |
|
681 self.permanent_policy = EXTRACT_RENAME |
|
682 elif 'inside'.startswith(default): |
|
683 self.permanent_policy = EXTRACT_WRAP |
|
684 elif default is not None: |
|
685 raise ValueError("bad value %s for default policy" % (default,)) |
674 |
686 |
675 def prep(self, archive_filename, extractor): |
687 def prep(self, archive_filename, extractor): |
676 question = ["%s contains one %s, but it has a weird name." % |
688 question = ["%s contains one %s, but it has a weird name." % |
677 (archive_filename, extractor.content_type)] |
689 (archive_filename, extractor.content_type)] |
678 question.append(" Expected: " + extractor.basename()) |
690 question.append(" Expected: " + extractor.basename()) |
1010 parser = optparse.OptionParser( |
1022 parser = optparse.OptionParser( |
1011 usage="%prog [options] archive [archive2 ...]", |
1023 usage="%prog [options] archive [archive2 ...]", |
1012 description="Intelligent archive extractor", |
1024 description="Intelligent archive extractor", |
1013 version=VERSION_BANNER |
1025 version=VERSION_BANNER |
1014 ) |
1026 ) |
1015 parser.add_option('-r', '--recursive', dest='recursive', |
|
1016 action='store_true', default=False, |
|
1017 help='extract archives contained in the ones listed') |
|
1018 parser.add_option('-q', '--quiet', dest='quiet', |
|
1019 action='count', default=3, |
|
1020 help='suppress warning/error messages') |
|
1021 parser.add_option('-v', '--verbose', dest='verbose', |
|
1022 action='count', default=0, |
|
1023 help='be verbose/print debugging information') |
|
1024 parser.add_option('-o', '--overwrite', dest='overwrite', |
|
1025 action='store_true', default=False, |
|
1026 help='overwrite any existing target directory') |
|
1027 parser.add_option('-f', '--flat', '--no-directory', dest='flat', |
|
1028 action='store_true', default=False, |
|
1029 help="don't put contents in their own directory") |
|
1030 parser.add_option('-l', '-t', '--list', '--table', dest='show_list', |
1027 parser.add_option('-l', '-t', '--list', '--table', dest='show_list', |
1031 action='store_true', default=False, |
1028 action='store_true', default=False, |
1032 help="list contents of archives on standard output") |
1029 help="list contents of archives on standard output") |
|
1030 parser.add_option('-m', '--metadata', dest='metadata', |
|
1031 action='store_true', default=False, |
|
1032 help="extract metadata from a .deb/.gem") |
|
1033 parser.add_option('-r', '--recursive', dest='recursive', |
|
1034 action='store_true', default=False, |
|
1035 help="extract archives contained in the ones listed") |
|
1036 parser.add_option('--one', '--one-entry', dest='one_entry_default', |
|
1037 default=None, |
|
1038 help=("specify extraction policy for one-entry " + |
|
1039 "archives: inside/rename/here")) |
1033 parser.add_option('-n', '--noninteractive', dest='batch', |
1040 parser.add_option('-n', '--noninteractive', dest='batch', |
1034 action='store_true', default=False, |
1041 action='store_true', default=False, |
1035 help="don't ask how to handle special cases") |
1042 help="don't ask how to handle special cases") |
1036 parser.add_option('-m', '--metadata', dest='metadata', |
1043 parser.add_option('-o', '--overwrite', dest='overwrite', |
1037 action='store_true', default=False, |
1044 action='store_true', default=False, |
1038 help="extract metadata from a .deb/.gem") |
1045 help="overwrite any existing target output") |
|
1046 parser.add_option('-f', '--flat', '--no-directory', dest='flat', |
|
1047 action='store_true', default=False, |
|
1048 help="extract everything to the current directory") |
|
1049 parser.add_option('-v', '--verbose', dest='verbose', |
|
1050 action='count', default=0, |
|
1051 help="be verbose/print debugging information") |
|
1052 parser.add_option('-q', '--quiet', dest='quiet', |
|
1053 action='count', default=3, |
|
1054 help="suppress warning/error messages") |
1039 self.options, filenames = parser.parse_args(arguments) |
1055 self.options, filenames = parser.parse_args(arguments) |
1040 if not filenames: |
1056 if not filenames: |
1041 parser.error("you did not list any archives") |
1057 parser.error("you did not list any archives") |
1042 # This makes WARNING is the default. |
1058 # This makes WARNING is the default. |
1043 self.options.log_level = (10 * (self.options.quiet - |
1059 self.options.log_level = (10 * (self.options.quiet - |
1044 self.options.verbose)) |
1060 self.options.verbose)) |
1045 self.options.one_entry_policy = OneEntryPolicy(self.options) |
1061 try: |
|
1062 self.options.one_entry_policy = OneEntryPolicy(self.options) |
|
1063 except ValueError: |
|
1064 parser.error("invalid value for --one-entry option") |
1046 self.options.recursion_policy = RecursionPolicy(self.options) |
1065 self.options.recursion_policy = RecursionPolicy(self.options) |
1047 self.archives = {os.path.realpath(os.curdir): filenames} |
1066 self.archives = {os.path.realpath(os.curdir): filenames} |
1048 |
1067 |
1049 def setup_logger(self): |
1068 def setup_logger(self): |
1050 logging.getLogger().setLevel(self.options.log_level) |
1069 logging.getLogger().setLevel(self.options.log_level) |