1 import os, re
2 from linda import root, clparser
3 from linda.debug import dprint
4 from linda.funcs import run_external_cmd, ExtCmdException
5 from linda.parser.debfilename import DebFilenameParser
6 from linda.parser.override import OverrideParser, OverrideParserException
7
10 self.file = file
11 debfn = DebFilenameParser(file)
12 self.pkg_name = debfn.package
13 self.data = {}
14 self.lab = lab
15
17 for directory in ('%s/overrides' % root, '/etc/linda/overrides', \
18 os.path.expanduser('~/.linda/overrides')):
19 for file in ('all', self.pkg_name):
20 dprint(_('Trying to parse %s/%s for overrides.') % \
21 (directory, file), 2)
22 try:
23 override = OverrideParser('%s/%s' % (directory, file))
24 except EnvironmentError:
25 continue
26 except OverrideParserException, e:
27 dprint(_('Failed to parse %s/s for overrides: %s.') % \
28 (directory, file, e), 2)
29 self.merge(override)
30 if clparser['more-overrides']:
31 dprint(_('Trying to parse %s for overrides.') % \
32 clparser['more-overrides'], 2)
33 override = OverrideParser(clparser['more-overrides'])
34 self.merge(override)
35 if os.path.exists(os.path.join(self.lab, 'data.tar.gz')):
36 file_name = './usr/share/linda/overrides/%s' % self.pkg_name
37 dprint(_('Trying to parse in-deb overrides.'), 2)
38 indeb = open(os.path.join(self.lab, 'indeb'), 'w')
39 try:
40 output = run_external_cmd('tar zxfO %s %s' % \
41 (os.path.join(self.lab, 'data.tar.gz'), file_name))
42 indeb.write(output)
43 indeb.close()
44 override = OverrideParser(os.path.join(self.lab, 'indeb'))
45 self.merge(override)
46 except ExtCmdException:
47 pass
48 except OverrideParserException, e:
49 dprint(_('Failed to parse in-deb overrides: %s.') % e, 2)
50 os.unlink(os.path.join(self.lab, 'indeb'))
51 if clparser['print-overrides']:
52 print _("Overrides: %s") % self.data
53
57
58 - def check(self, err_dicts, data_files):
59 for err_dict in err_dicts.keys():
60 for tag in err_dicts[err_dict].keys():
61 dprint("Checking overrides for %s." % tag)
62 if self.data.has_key(tag):
63 if not self.data[tag]:
64 del err_dicts[err_dict][tag]
65 dprint(_("Overridding tag %s.") % tag)
66 elif self.data[tag].has_key('Type'):
67 dprint("Overridding tag %s's type of %s to %s." % \
68 (tag, data_files[err_dict][tag]['Type'], \
69 self.data[tag]['Type']))
70 data_files[err_dict][tag]['Type'] = \
71 self.data[tag]['Type']
72 elif self.data[tag].has_key('Data'):
73 to_del = []
74 if not err_dicts[err_dict][tag][0]:
75 if not self.data[tag].has_key('Type'):
76 del err_dicts[err_dict][tag]
77 continue
78 for error in range(len(err_dicts[err_dict][tag])):
79 for data in err_dicts[err_dict][tag][error]:
80 if re.search(self.data[tag]['Data'],
81 str(data)) and error not in to_del:
82 to_del.insert(0, error)
83 for deleting in to_del:
84 del err_dicts[err_dict][tag][deleting]
85 dprint("Overridding tag %s which has data %s." % \
86 (tag, self.data[tag]['Data']))
87 return err_dicts, data_files
88