summaryrefslogtreecommitdiff
path: root/lib/archive.py
diff options
context:
space:
mode:
authorjvoisin2011-06-27 17:42:42 +0200
committerjvoisin2011-06-27 17:42:42 +0200
commit6c5cad3f96a1bbe20b668730ba66dfb43eb14b08 (patch)
tree152001b274384ec6a9d16a493ced84009412b525 /lib/archive.py
parent7c05c4edef20cc7438a8a90f2e9f1b507e82c132 (diff)
Add is_clean() method to archives, and move the 'secure_remove' function from parser.py to mat.py
Diffstat (limited to 'lib/archive.py')
-rw-r--r--lib/archive.py58
1 files changed, 37 insertions, 21 deletions
diff --git a/lib/archive.py b/lib/archive.py
index 89425cf..446e493 100644
--- a/lib/archive.py
+++ b/lib/archive.py
@@ -5,47 +5,63 @@ import mat
5import shutil 5import shutil
6 6
7class TarStripper(parser.Generic_parser): 7class TarStripper(parser.Generic_parser):
8 def compression_type(self): 8 def __init__(self, realname, filename, parser, editor, backup):
9 super(TarStripper, self).__init__(realname,
10 filename, parser, editor, backup)
9 self.compression = '' 11 self.compression = ''
12 self.tarin = tarfile.open(self.filename, 'r' + self.compression)
13 self.folder_list = []
10 14
11 def remove_all(self): 15 def remove_all(self):
12 self.compression_type() 16 self.tarout = tarfile.open(self.filename + parser.POSTFIX,
13 if not tarfile.is_tarfile(self.filename):
14 print('%s is not a valid tar file' % self.filename)
15 sys.exit(1)
16
17 tarin = tarfile.open(self.filename, 'r' + self.compression)
18 tarout = tarfile.open(self.filename + parser.POSTFIX,
19 'w' + self.compression) 17 'w' + self.compression)
20 folder_list = [] 18 for current_file in self.tarin.getmembers():
21 19 self.tarin.extract(current_file)
22 for current_file in tarin.getmembers():
23 tarin.extract(current_file)
24 if current_file.type is '0': #is current_file a regular file ? 20 if current_file.type is '0': #is current_file a regular file ?
25 #no backup file 21 #no backup file
26 class_file = mat.create_class_file(current_file.name, False) 22 class_file = mat.create_class_file(current_file.name, False)
27 class_file.remove_all() 23 class_file.remove_all()
28 tarout.add(current_file.name) 24 self.tarout.add(current_file.name)
29 class_file.secure_remove() 25 mat.secure_remove(current_file.name)
30 else: 26 else:
31 folder_list.insert(0, current_file.name) 27 self.folder_list.insert(0, current_file.name)
32 28
33 for folder in folder_list: #delete remainings folders 29 for folder in self.folder_list: #delete remainings folders
34 shutil.rmtree(folder) 30 shutil.rmtree(folder)
35 31
36 #meta from the tar itself 32 #meta from the tar itself
37 tarout.mtime = None 33 self.tarout.mtime = None
38 34
39 tarout.close() 35 self.tarout.close()
40 tarin.close() 36 self.tarin.close()
41 37
42 def is_clean(self): 38 def is_clean(self):
39 for current_file in self.tarin.getmembers():
40 self.tarin.extract(current_file)
41 if current_file.type is '0': #is current_file a regular file ?
42 #no backup file
43 class_file = mat.create_class_file(current_file.name, False)
44 if not class_file.is_clean():
45 self.folder_list = []
46 return False
47 mat.secure_remove(current_file.name)
48 else:
49 self.folder_list.insert(0, current_file.name)
50 self.tarin.close()
51
52 for folder in self.folder_list: #delete remainings folders
53 shutil.rmtree(folder)
54 self.folder_list = []
43 return False 55 return False
44 56
45class GzipStripper(TarStripper): 57class GzipStripper(TarStripper):
46 def compression_type(self): 58 def __init__(self, realname, filename, parser, editor, backup):
59 super(GzipStripper, self).__init__(realname,
60 filename, parser, editor, backup)
47 self.compression = ':gz' 61 self.compression = ':gz'
48 62
49class Bzip2Stripper(TarStripper): 63class Bzip2Stripper(TarStripper):
50 def compression_type(self): 64 def __init__(self, realname, filename, parser, editor, backup):
65 super(Bzip2Stripper, self).__init__(realname,
66 filename, parser, editor, backup)
51 self.compression = ':bz2' 67 self.compression = ':bz2'