987 self.parse_options(arguments) |
987 self.parse_options(arguments) |
988 self.setup_logger() |
988 self.setup_logger() |
989 self.successes = [] |
989 self.successes = [] |
990 self.failures = [] |
990 self.failures = [] |
991 |
991 |
|
992 def clean_destination(self, dest_name): |
|
993 try: |
|
994 os.unlink(dest_name) |
|
995 except OSError, error: |
|
996 if error.errno == errno.EISDIR: |
|
997 shutil.rmtree(dest_name, ignore_errors=True) |
|
998 |
992 def abort(self, signal_num, frame): |
999 def abort(self, signal_num, frame): |
993 signal.signal(signal_num, signal.SIG_IGN) |
1000 signal.signal(signal_num, signal.SIG_IGN) |
994 print |
1001 print |
995 logger.debug("traceback:\n" + |
1002 logger.debug("traceback:\n" + |
996 ''.join(traceback.format_stack(frame)).rstrip()) |
1003 ''.join(traceback.format_stack(frame)).rstrip()) |
999 if hasattr(self, 'current_directory'): |
1006 if hasattr(self, 'current_directory'): |
1000 clean_targets.add(os.path.realpath(self.current_directory)) |
1007 clean_targets.add(os.path.realpath(self.current_directory)) |
1001 for directory in clean_targets: |
1008 for directory in clean_targets: |
1002 os.chdir(directory) |
1009 os.chdir(directory) |
1003 for path in glob.glob('.dtrx-*'): |
1010 for path in glob.glob('.dtrx-*'): |
1004 try: |
1011 self.clean_destination(path) |
1005 os.unlink(path) |
|
1006 except OSError, error: |
|
1007 if error.errno == errno.EISDIR: |
|
1008 shutil.rmtree(path, ignore_errors=True) |
|
1009 sys.exit(1) |
1012 sys.exit(1) |
1010 |
1013 |
1011 def parse_options(self, arguments): |
1014 def parse_options(self, arguments): |
1012 parser = optparse.OptionParser( |
1015 parser = optparse.OptionParser( |
1013 usage="%prog [options] archive [archive2 ...]", |
1016 usage="%prog [options] archive [archive2 ...]", |
1086 errors = [] |
1089 errors = [] |
1087 for extractor in builder: |
1090 for extractor in builder: |
1088 error = self.action.run(filename, extractor) |
1091 error = self.action.run(filename, extractor) |
1089 if error: |
1092 if error: |
1090 errors.append((extractor.file_type, extractor.encoding, error)) |
1093 errors.append((extractor.file_type, extractor.encoding, error)) |
|
1094 if extractor.target is not None: |
|
1095 self.clean_destination(extractor.target) |
1091 else: |
1096 else: |
1092 self.recurse(filename, extractor, self.action) |
1097 self.recurse(filename, extractor, self.action) |
1093 return |
1098 return |
1094 logger.error("could not handle %s" % (filename,)) |
1099 logger.error("could not handle %s" % (filename,)) |
1095 if not errors: |
1100 if not errors: |