1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20 import sys
21 import tempfile
22
23 from debian import debfile
24
25 from spacewalk.common.usix import raise_with_tb
26 from spacewalk.common import checksum
27 from spacewalk.common.rhn_pkg import A_Package, InvalidPackageError
28
29
30
31
32 DEB_CHECKSUM_TYPE = 'sha256'
36
37 "Wrapper class for an deb header - we need to store a flag is_source"
38
40 self.packaging = 'deb'
41 self.signatures = []
42 self.is_source = 0
43 self.deb = None
44
45 try:
46 self.deb = debfile.DebFile(stream.name)
47 except Exception:
48 e = sys.exc_info()[1]
49 raise_with_tb(InvalidPackageError(e), sys.exc_info()[2])
50
51 try:
52
53 debcontrol = self.deb.debcontrol()
54 self.hdr = {
55 'name': debcontrol.get_as_string('Package'),
56 'arch': debcontrol.get_as_string('Architecture') + '-deb',
57 'summary': debcontrol.get_as_string('Description').splitlines()[0],
58 'vendor': debcontrol.get_as_string('Maintainer'),
59 'package_group': debcontrol.get_as_string('Section'),
60 'epoch': '',
61 'version': 0,
62 'release': 0,
63 'description': debcontrol.get_as_string('Description'),
64 }
65 for hdr_k, deb_k in [('requires', 'Depends'),
66 ('provides', 'Provides'),
67 ('conflicts', 'Conflicts'),
68 ('obsoletes', 'Replaces'),
69 ('recommends', 'Recommends'),
70 ('suggests', 'Suggests'),
71 ('breaks', 'Breaks'),
72 ('predepends', 'Pre-Depends'),
73 ('payload_size', 'Installed-Size')]:
74 if deb_k in debcontrol:
75 self.hdr[hdr_k] = debcontrol.get_as_string(deb_k)
76 for k in debcontrol.keys():
77 if k not in self.hdr:
78 self.hdr[k] = debcontrol.get_as_string(k)
79
80 version = debcontrol.get_as_string('Version')
81 if version.find(':') != -1:
82 self.hdr['epoch'], version = version.split(':')
83 self.hdr['version'] = version
84 if version.find('-') != -1:
85 version_tmpArr = version.split('-')
86 self.hdr['version'] = '-'.join(version_tmpArr[:-1])
87 self.hdr['release'] = version_tmpArr[-1]
88 else:
89 self.hdr['version'] = version
90 self.hdr['release'] = 'X'
91 except Exception:
92 e = sys.exc_info()[1]
93 raise_with_tb(InvalidPackageError(e), sys.exc_info()[2])
94
95 @staticmethod
98
99 @staticmethod
102
105
107 self.hdr[name] = item
108
111
113 return getattr(self.hdr, name)
114
117
120
125
134
136 c_hash = checksum.getHashlibInstance(self.checksum_type, False)
137 if output_stream:
138 output_start = output_stream.tell()
139 self._stream_copy(self.header_data, output_stream, c_hash)
140 self.checksum = c_hash.hexdigest()
141 if output_stream:
142 self.payload_stream = output_stream
143 self.payload_size = output_stream.tell() - output_start
144