1 import re
2 from linda.debug import dprint
3 from linda.parser.rfc822parser import RFC822Parser
4
7 self.split()
8 for stanza in range(len(self.data)):
9 for key in self.data[stanza].keys():
10 if key in ('depends', 'pre-depends', 'provides', 'replaces', \
11 'conflicts', 'build-depends', 'recommends', \
12 'build-depends-indep', 'suggests'):
13 self.data[stanza]['%s-x' % key] = {}
14 self.data[stanza]['%s-orig' % key] = self.data[stanza][key]
15 for data in self.data[stanza][key].split(','):
16 data = data.replace('\n', '')
17 dprint(_("Stanza %s; Key %s; Data: %s") % (stanza, \
18 key, data), 5)
19 for alt in data.split('|'):
20 alt = alt.strip()
21 if alt.startswith('('):
22 alt = alt[1:]
23 elif alt.endswith(')') and alt.find('(') == -1:
24 alt = alt[:-1]
25 dprint(_("Calling add_data: key %s, alt %s") % \
26 (key, alt), 5)
27 tmp_alt = [alt]
28 if data.find('(') == data.find('[') == -1:
29 tmp_alt = alt.split(' ')
30 for x in tmp_alt:
31 if x == '':
32 continue
33 self.add_data(stanza, key, x)
34 self.data[stanza][key] = self.data[stanza]['%s-x' % key]
35 del self.data[stanza]['%s-x' % key]
36 elif key == 'description':
37 tmp_desc = self.data[stanza][key].split('\n')
38 self.data[stanza][key] = [tmp_desc[0], \
39 '\n'.join(tmp_desc[1:])]
40 elif key == 'section':
41 tmp_section = self.data[stanza][key].split('/')
42 self.data[stanza][key] = tmp_section
43 dprint(_("Control file: %s") % self.data, 3)
44
46 match_obj = re.match(r'^(?P<pkg>[^ \(]+)(\s*\(\s?(?P<rel_type>[<>=]+)\s?(?P<relation>.+)\))?(\s+\[(?P<arch>.+)\])?.*$', data)
47 if not match_obj:
48 raise DCPException("Data \"%s\" doesn't match" % data)
49 else:
50 line = match_obj.groupdict()
51 if line['arch'] == None:
52 line['arch'] = [None]
53 else:
54 line['arch'] = line['arch'].split(' ')
55 if self.data[stanza]['%s-x' % key].has_key(line['pkg']):
56 self.data[stanza]['%s-x' % key][line['pkg']]['relation'].append([line['rel_type'], line['relation']])
57 self.data[stanza]['%s-x' % key][line['pkg']]['arch'] = \
58 self.data[stanza]['%s-x' % key][line['pkg']]['arch'] + \
59 line['arch']
60 else:
61 self.data[stanza]['%s-x' % key][line['pkg']] = {'relation': \
62 [[line['rel_type'], line['relation']]], 'arch': line['arch']}
63
66
69