1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 import sys
17 import time
18
19
20 from spacewalk.common import rhn_rpm, rhn_mpm
21 from spacewalk.common.usix import ListType, TupleType
22
23
25 packages = sys.argv[1:]
26 if not packages:
27 return
28
29 for pkgfile in packages:
30
31 with open(pkgfile) as f:
32 header = rhn_rpm.get_package_header(file_obj=f)
33 p = rpm_to_mpm(header, f)
34 dest_filename = _compute_filename(p.header)
35 print("Writing out the package to %s" % dest_filename)
36 with open(dest_filename, "w+") as dest_file:
37 p.write(dest_file)
38
39
41 return '%s-%s.%s.mpm' % (hdr['name'], hdr['version'], hdr['arch'])
42
43
45 tag_map = {
46 'package_group': 'group',
47 'rpm_version': 'rpmversion',
48 'payload_size': 'archivesize',
49 'payload_format': 'payloadformat',
50 'build_host': 'buildhost',
51 'build_time': 'buildtime',
52 'source_rpm': 'sourcerpm',
53 }
54
55 tags = [
56 'name',
57 'epoch',
58 'version',
59 'release',
60 'arch',
61 'description',
62 'summary',
63 'license',
64 'package_group',
65 'rpm_version',
66 'payload_size',
67 'payload_format',
68 'build_host',
69 'build_time',
70 'cookie',
71 'vendor',
72 'source_rpm',
73 'sigmd5',
74 'sigpgp',
75 'siggpg',
76 'sigsize',
77 ]
78
79 result = {}
80 for t in tags:
81 tt = tag_map.get(t, t)
82 result[t] = header[tt]
83
84
85 result['files'] = _extract_files(header)
86
87
88 result['provides'] = _extract_rpm_requires(header)
89 result['requires'] = _extract_rpm_provides(header)
90 result['conflicts'] = _extract_rpm_conflicts(header)
91 result['obsoletes'] = _extract_rpm_obsoletes(header)
92
93 result['changelog'] = _extract_rpm_changelog(header)
94
95
96 file_stream.seek(0, 2)
97 file_size = file_stream.tell()
98 result['package_size'] = file_size
99
100 is_source = 0
101 if header.is_source:
102 is_source = 1
103 result['is_source'] = is_source
104
105 result['package_type'] = 'rpm'
106
107 h = rhn_mpm.MPM_Header(result)
108 p = rhn_mpm.MPM_Package()
109 p.header = h
110 p.payload_stream = file_stream
111
112 return p
113
114
116 tag_maps = {
117 'name': 'filenames',
118 'device': 'filedevices',
119 'inode': 'fileinodes',
120 'file_mode': 'filemodes',
121 'username': 'fileusername',
122 'groupname': 'filegroupname',
123 'rdev': 'filerdevs',
124 'file_size': 'filesizes',
125 'mtime': 'filemtimes',
126 'md5': 'filemd5s',
127 'linkto': 'filelinktos',
128 'flags': 'fileflags',
129 'verifyflags': 'fileverifyflags',
130 'lang': 'filelangs',
131 }
132 files = _extract_array_fields(header, tag_maps)
133
134 for f in files:
135 f['mtime'] = gmtime(f['mtime'])
136 return files
137
138
140 tag_maps = {
141 'name': 'provides',
142 'version': 'provideversion',
143 'flags': 'provideflags',
144 }
145 return _extract_array_fields(header, tag_maps)
146
147
149 tag_maps = {
150 'name': 'requirename',
151 'version': 'requireversion',
152 'flags': 'requireflags',
153 }
154 return _extract_array_fields(header, tag_maps)
155
156
158 tag_maps = {
159 'name': 'conflictname',
160 'version': 'conflictversion',
161 'flags': 'conflictflags',
162 }
163 return _extract_array_fields(header, tag_maps)
164
165
167 tag_maps = {
168 'name': 'obsoletename',
169 'version': 'obsoleteversion',
170 'flags': 'obsoleteflags',
171 }
172 return _extract_array_fields(header, tag_maps)
173
174
176 tag_maps = {
177 'name': 'changelogname',
178 'text': 'changelogtext',
179 'time': 'changelogtime',
180 }
181 cl = _extract_array_fields(header, tag_maps)
182
183 for c in cl:
184 c['time'] = gmtime(c['time'])
185 return cl
186
187
189
190 key = list(tag_maps.keys())[0]
191 rpmtag = tag_maps.get(key)
192 arr = header[rpmtag]
193 if arr is None:
194
195 return []
196 count = len(arr)
197
198 result = []
199 for i in range(count):
200 tag_dict = {}
201 for key, rpmtag in tag_maps.items():
202 arr = header[rpmtag]
203 if not isinstance(arr, (ListType, TupleType)):
204 arr = [arr]
205 tag_dict[key] = arr[i]
206 result.append(tag_dict)
207 return result
208
209
211 ttuple = time.gmtime(timestamp)
212 return "%d-%02d-%02d %02d:%02d:%02d" % ttuple[:6]
213
214 if __name__ == '__main__':
215 sys.exit(main() or 0)
216