diff options
| author | jvoisin | 2011-06-30 17:13:17 +0200 |
|---|---|---|
| committer | jvoisin | 2011-06-30 17:13:17 +0200 |
| commit | 6d53d90e8e133660e4ac482ffbec5c17cf98f41b (patch) | |
| tree | 475c5aa3a15c1ce9b4fa7ac71d19cc9c5c008cc7 | |
| parent | c0ce24e9b06e9325e5bcdce05ca89c3e2374b585 (diff) | |
Full support of metadata cleaning of archives
| -rw-r--r-- | lib/archive.py | 24 |
1 files changed, 13 insertions, 11 deletions
diff --git a/lib/archive.py b/lib/archive.py index a78895c..7b94edf 100644 --- a/lib/archive.py +++ b/lib/archive.py | |||
| @@ -13,6 +13,17 @@ class TarStripper(parser.Generic_parser): | |||
| 13 | self.tarin = tarfile.open(self.filename, 'r' + self.compression) | 13 | self.tarin = tarfile.open(self.filename, 'r' + self.compression) |
| 14 | self.folder_list = [] | 14 | self.folder_list = [] |
| 15 | 15 | ||
| 16 | def _remove(self, current_file): | ||
| 17 | ''' | ||
| 18 | remove the meta added by tar itself to the file | ||
| 19 | ''' | ||
| 20 | current_file.mtime = 0 | ||
| 21 | current_file.uid = 0 | ||
| 22 | current_file.gid = 0 | ||
| 23 | current_file.uname = '' | ||
| 24 | current_file.gname = '' | ||
| 25 | return current_file | ||
| 26 | |||
| 16 | def remove_all(self): | 27 | def remove_all(self): |
| 17 | self.tarin = tarfile.open(self.filename, 'r' + self.compression) | 28 | self.tarin = tarfile.open(self.filename, 'r' + self.compression) |
| 18 | self.tarout = tarfile.open(self.filename + parser.POSTFIX, | 29 | self.tarout = tarfile.open(self.filename + parser.POSTFIX, |
| @@ -23,25 +34,16 @@ class TarStripper(parser.Generic_parser): | |||
| 23 | #no backup file | 34 | #no backup file |
| 24 | class_file = mat.create_class_file(current_file.name, False) | 35 | class_file = mat.create_class_file(current_file.name, False) |
| 25 | class_file.remove_all() | 36 | class_file.remove_all() |
| 26 | self.tarout.add(current_file.name) | 37 | self.tarout.add(current_file.name, filter=self._remove) |
| 27 | mat.secure_remove(current_file.name) | 38 | mat.secure_remove(current_file.name) |
| 28 | else: | 39 | else: |
| 29 | self.folder_list.insert(0, current_file.name) | 40 | self.folder_list.insert(0, current_file.name) |
| 30 | self.tarin.close() | 41 | self.tarin.close() |
| 42 | self.tarout.close() | ||
| 31 | 43 | ||
| 32 | for folder in self.folder_list: #delete remainings folders | 44 | for folder in self.folder_list: #delete remainings folders |
| 33 | shutil.rmtree(folder) | 45 | shutil.rmtree(folder) |
| 34 | 46 | ||
| 35 | #meta from the tar itself | ||
| 36 | for current_file in self.tarout.getmembers(): | ||
| 37 | current_file.mtime = None | ||
| 38 | current_file.uid = 0 | ||
| 39 | current_file.gid = 0 | ||
| 40 | current_file.uname = '' | ||
| 41 | current_file.gname = '' | ||
| 42 | print current_file.gname | ||
| 43 | self.tarout.close() | ||
| 44 | |||
| 45 | if self.backup is False: | 47 | if self.backup is False: |
| 46 | mat.secure_remove(self.filename) | 48 | mat.secure_remove(self.filename) |
| 47 | os.rename(self.filename + parser.POSTFIX, self.filename) | 49 | os.rename(self.filename + parser.POSTFIX, self.filename) |
