diff options
| author | jvoisin | 2011-07-17 17:15:05 +0200 |
|---|---|---|
| committer | jvoisin | 2011-07-17 17:15:05 +0200 |
| commit | a801dac55f954a983db2c2daa57fbbf5c5a241f3 (patch) | |
| tree | d1cd64311ce3acd54d17864de4177d53070e579d | |
| parent | bdb6c570e4744e635caa69c8c2b9794ddb3a0b97 (diff) | |
Fix the "remaining folder" bug for archives
| -rw-r--r-- | lib/archive.py | 20 |
1 files changed, 13 insertions, 7 deletions
diff --git a/lib/archive.py b/lib/archive.py index 7e928f0..8fa826e 100644 --- a/lib/archive.py +++ b/lib/archive.py | |||
| @@ -4,12 +4,15 @@ import parser | |||
| 4 | import mat | 4 | import mat |
| 5 | import shutil | 5 | import shutil |
| 6 | import os | 6 | import os |
| 7 | import mimetypes | ||
| 7 | 8 | ||
| 8 | class TarStripper(parser.Generic_parser): | 9 | class TarStripper(parser.Generic_parser): |
| 9 | def __init__(self, realname, filename, parser, editor, backup): | 10 | def __init__(self, realname, filename, parser, editor, backup): |
| 10 | super(TarStripper, self).__init__(realname, | 11 | super(TarStripper, self).__init__(realname, |
| 11 | filename, parser, editor, backup) | 12 | filename, parser, editor, backup) |
| 12 | self.compression = '' | 13 | self.compression = '' |
| 14 | self.shortname = os.path.basename(filename) | ||
| 15 | self.mime = mimetypes.guess_type(filename)[0] | ||
| 13 | self.tarin = tarfile.open(self.filename, 'r' + self.compression) | 16 | self.tarin = tarfile.open(self.filename, 'r' + self.compression) |
| 14 | self.folder_list = [] | 17 | self.folder_list = [] |
| 15 | 18 | ||
| @@ -40,9 +43,9 @@ class TarStripper(parser.Generic_parser): | |||
| 40 | self.folder_list.insert(0, current_file.name) | 43 | self.folder_list.insert(0, current_file.name) |
| 41 | self.tarin.close() | 44 | self.tarin.close() |
| 42 | self.tarout.close() | 45 | self.tarout.close() |
| 46 | print self.folder_list | ||
| 43 | 47 | ||
| 44 | for folder in self.folder_list: #delete remainings folders | 48 | self.remove_folder() |
| 45 | shutil.rmtree(folder) | ||
| 46 | 49 | ||
| 47 | if self.backup is False: | 50 | if self.backup is False: |
| 48 | mat.secure_remove(self.filename) | 51 | mat.secure_remove(self.filename) |
| @@ -73,7 +76,8 @@ class TarStripper(parser.Generic_parser): | |||
| 73 | #no backup file | 76 | #no backup file |
| 74 | class_file = mat.create_class_file(current_file.name, False) | 77 | class_file = mat.create_class_file(current_file.name, False) |
| 75 | if not class_file.is_clean(): | 78 | if not class_file.is_clean(): |
| 76 | self.folder_list = [] | 79 | mat.secure_remove(current_file.name) |
| 80 | self.remove_folder() | ||
| 77 | return False | 81 | return False |
| 78 | if not self.is_file_clean(current_file): | 82 | if not self.is_file_clean(current_file): |
| 79 | return False | 83 | return False |
| @@ -81,10 +85,7 @@ class TarStripper(parser.Generic_parser): | |||
| 81 | else: | 85 | else: |
| 82 | self.folder_list.insert(0, current_file.name) | 86 | self.folder_list.insert(0, current_file.name) |
| 83 | self.tarin.close() | 87 | self.tarin.close() |
| 84 | 88 | self.remove_folder() | |
| 85 | for folder in self.folder_list: #delete remainings folders | ||
| 86 | shutil.rmtree(folder) | ||
| 87 | self.folder_list = [] | ||
| 88 | return True | 89 | return True |
| 89 | 90 | ||
| 90 | def get_meta(self): | 91 | def get_meta(self): |
| @@ -102,6 +103,11 @@ class TarStripper(parser.Generic_parser): | |||
| 102 | metadata[current_file.name] = current_meta | 103 | metadata[current_file.name] = current_meta |
| 103 | return metadata | 104 | return metadata |
| 104 | 105 | ||
| 106 | def remove_folder(self): | ||
| 107 | for folder in self.folder_list: #delete remainings folders | ||
| 108 | shutil.rmtree(folder) | ||
| 109 | self.folder_list = [] | ||
| 110 | |||
| 105 | class GzipStripper(TarStripper): | 111 | class GzipStripper(TarStripper): |
| 106 | def __init__(self, realname, filename, parser, editor, backup): | 112 | def __init__(self, realname, filename, parser, editor, backup): |
| 107 | super(GzipStripper, self).__init__(realname, | 113 | super(GzipStripper, self).__init__(realname, |
