scripts/dtrx

branch
trunk
changeset 123
8570c14304bb
parent 121
957d19158b7e
child 125
c4495fc7d00d
equal deleted inserted replaced
122:2b676283366a 123:8570c14304bb
42 try: 42 try:
43 set 43 set
44 except NameError: 44 except NameError:
45 from sets import Set as set 45 from sets import Set as set
46 46
47 VERSION = "6.5" 47 VERSION = "6.6"
48 VERSION_BANNER = """dtrx version %s 48 VERSION_BANNER = """dtrx version %s
49 Copyright © 2006-2009 Brett Smith <brettcsmith@brettcsmith.org> 49 Copyright © 2006-2009 Brett Smith <brettcsmith@brettcsmith.org>
50 Copyright © 2008 Peter Kelemen <Peter.Kelemen@gmail.com> 50 Copyright © 2008 Peter Kelemen <Peter.Kelemen@gmail.com>
51 51
52 This program is free software; you can redistribute it and/or modify it 52 This program is free software; you can redistribute it and/or modify it
78 RECURSE_NEVER = 4 78 RECURSE_NEVER = 4
79 RECURSE_LIST = 5 79 RECURSE_LIST = 5
80 80
81 mimetypes.encodings_map.setdefault('.bz2', 'bzip2') 81 mimetypes.encodings_map.setdefault('.bz2', 'bzip2')
82 mimetypes.encodings_map.setdefault('.lzma', 'lzma') 82 mimetypes.encodings_map.setdefault('.lzma', 'lzma')
83 mimetypes.encodings_map.setdefault('.xz', 'xz')
83 mimetypes.types_map.setdefault('.gem', 'application/x-ruby-gem') 84 mimetypes.types_map.setdefault('.gem', 'application/x-ruby-gem')
84 85
85 logger = logging.getLogger('dtrx-log') 86 logger = logging.getLogger('dtrx-log')
86 87
87 class FilenameChecker(object): 88 class FilenameChecker(object):
136 137
137 EXTRACTION_ERRORS = (ExtractorError, ExtractorUnusable, OSError, IOError) 138 EXTRACTION_ERRORS = (ExtractorError, ExtractorUnusable, OSError, IOError)
138 139
139 class BaseExtractor(object): 140 class BaseExtractor(object):
140 decoders = {'bzip2': 'bzcat', 'gzip': 'zcat', 'compress': 'zcat', 141 decoders = {'bzip2': 'bzcat', 'gzip': 'zcat', 'compress': 'zcat',
141 'lzma': 'lzcat'} 142 'lzma': 'lzcat', 'xz': 'xzcat'}
142 name_checker = DirectoryChecker 143 name_checker = DirectoryChecker
143 144
144 def __init__(self, filename, encoding): 145 def __init__(self, filename, encoding):
145 if encoding and (not self.decoders.has_key(encoding)): 146 if encoding and (not self.decoders.has_key(encoding)):
146 raise ValueError("unrecognized encoding %s" % (encoding,)) 147 raise ValueError("unrecognized encoding %s" % (encoding,))
882 extension_map.setdefault(extension, []).append((ext_name, None)) 883 extension_map.setdefault(extension, []).append((ext_name, None))
883 884
884 for mapping in (('tar', 'bzip2', 'tar.bz2', 'tbz2', 'tb2', 'tbz'), 885 for mapping in (('tar', 'bzip2', 'tar.bz2', 'tbz2', 'tb2', 'tbz'),
885 ('tar', 'gzip', 'tar.gz', 'tgz'), 886 ('tar', 'gzip', 'tar.gz', 'tgz'),
886 ('tar', 'lzma', 'tar.lzma', 'tlz'), 887 ('tar', 'lzma', 'tar.lzma', 'tlz'),
888 ('tar', 'xz', 'tar.xz'),
887 ('tar', 'compress', 'tar.Z', 'taz'), 889 ('tar', 'compress', 'tar.Z', 'taz'),
888 ('compress', 'gzip', 'Z', 'gz'), 890 ('compress', 'gzip', 'Z', 'gz'),
889 ('compress', 'bzip2', 'bz2'), 891 ('compress', 'bzip2', 'bz2'),
890 ('compress', 'lzma', 'lzma')): 892 ('compress', 'lzma', 'lzma'),
893 ('compress', 'xz', 'xz')):
891 for extension in mapping[2:]: 894 for extension in mapping[2:]:
892 extension_map.setdefault(extension, []).append(mapping[:2]) 895 extension_map.setdefault(extension, []).append(mapping[:2])
893 896
894 magic_encoding_map = {} 897 magic_encoding_map = {}
895 for mapping in (('bzip2', 'bzip2 compressed'), 898 for mapping in (('bzip2', 'bzip2 compressed'),
896 ('gzip', 'gzip compressed'), 899 ('gzip', 'gzip compressed'),
897 ('lzma', 'LZMA compressed')): 900 ('lzma', 'LZMA compressed'),
901 ('xz', 'xz compressed')):
898 for pattern in mapping[1:]: 902 for pattern in mapping[1:]:
899 magic_encoding_map[re.compile(pattern)] = mapping[0] 903 magic_encoding_map[re.compile(pattern)] = mapping[0]
900 904
901 def __init__(self, filename, options): 905 def __init__(self, filename, options):
902 self.filename = filename 906 self.filename = filename

mercurial