Trees | Indices | Help |
---|
|
1 # 2 # Copyright (c) 2010--2016 Red Hat, Inc. 3 # 4 # This software is licensed to you under the GNU General Public License, 5 # version 2 (GPLv2). There is NO WARRANTY for this software, express or 6 # implied, including the implied warranties of MERCHANTABILITY or FITNESS 7 # FOR A PARTICULAR PURPOSE. You should have received a copy of GPLv2 8 # along with this software; if not, see 9 # http://www.gnu.org/licenses/old-licenses/gpl-2.0.txt. 10 # 11 # Red Hat trademarks are not licensed under GPLv2. No permission is 12 # granted to use or replicate Red Hat trademarks that are incorporated 13 # in this software or its documentation. 14 # 15 # 16 # Converts headers to the intermediate format 17 # 18 19 import headerSource 20 import time 21 from importLib import Channel 22 from backendLib import gmtime, localtime 23 from spacewalk.common.usix import IntType, UnicodeType 24 from spacewalk.common.stringutils import to_string 25 262818129 - def __init__(self, header, size, checksum_type, checksum, path=None, org_id=None, 30 channels=[]):31 32 headerSource.rpmBinaryPackage.__init__(self) 33 34 self.tagMap = headerSource.rpmBinaryPackage.tagMap.copy() 35 self.tagMap.update({ 36 'multi_arch': 'Multi-Arch', 37 }) 38 39 # Remove already-mapped tags 40 self._already_mapped = [ 41 'rpm_version', 'payload_size', 'payload_format', 42 'package_group', 'build_time', 'build_host' 43 ] 44 45 for t in self._already_mapped: 46 if t in self.tagMap: 47 del self.tagMap[t] 48 49 # XXX is seems to me that this is the place that 'source_rpm' is getting 50 # set 51 for f in self.keys(): 52 field = f 53 if f in self.tagMap: 54 field = self.tagMap[f] 55 if not field: 56 # Unsupported 57 continue 58 59 # get the db field value from the header 60 val = header[field] 61 if f == 'build_time': 62 if val is not None and isinstance(val, IntType): 63 # A UNIX timestamp 64 val = localtime(val) 65 elif val: 66 # Convert to strings 67 if isinstance(val, UnicodeType): 68 val = to_string(val) 69 else: 70 val = str(val) 71 elif val == []: 72 val = None 73 self[f] = val 74 75 self['package_size'] = size 76 self['checksum_type'] = checksum_type 77 self['checksum'] = checksum 78 self['path'] = path 79 self['org_id'] = org_id 80 self['header_start'] = None 81 self['header_end'] = None 82 self['last_modified'] = localtime(time.time()) 83 if self['sigmd5']: 84 self['sigchecksum_type'] = 'md5' 85 self['sigchecksum'] = self['sigmd5'] 86 del(self['sigmd5']) 87 88 # Fix some of the information up 89 vendor = self['vendor'] 90 if vendor is None: 91 self['vendor'] = 'Debian' 92 payloadFormat = self['payload_format'] 93 if payloadFormat is None: 94 self['payload_format'] = 'ar' 95 if self['payload_size'] is None: 96 self['payload_size'] = 0 97 98 # Populate file information 99 self._populateFiles(header) 100 # Populate dependency information 101 self._populateDependencyInformation(header) 102 # Populate changelogs 103 self._populateChangeLog(header) 104 # Channels 105 self._populateChannels(channels) 106 107 self['source_rpm'] = None 108 109 group = self.get('package_group', '') 110 if group == '' or group is None: 111 self['package_group'] = 'NoGroup'112114 files = [] 115 # for f in header.get('files', []): 116 # fc = headerSource.rpmFile() 117 # fc.populate(f) 118 # files.append(fc) 119 self['files'] = files120122 mapping = { 123 'provides': headerSource.rpmProvides, 124 'requires': headerSource.rpmRequires, 125 'conflicts': headerSource.rpmConflicts, 126 'obsoletes': headerSource.rpmObsoletes, 127 'suggests': headerSource.rpmSuggests, 128 'recommends': headerSource.rpmRecommends, 129 'breaks': headerSource.rpmBreaks, 130 'predepends': headerSource.rpmPredepends, 131 } 132 for k, dclass in mapping.items(): 133 l = [] 134 values = header[k] 135 if values is not None: 136 val = values.split(', ') # split packages 137 i = 0 138 for v in val: 139 relation = 0 140 version = '' 141 if '|' in v: 142 # TODO: store alternative-package-names semantically someday 143 name = v + '_' + str(i) 144 else: 145 nv = v.split('(') 146 name = nv[0] + '_' + str(i) 147 if (len(nv) > 1): 148 version = nv[1].rstrip(')') 149 if version: 150 while version.startswith(("<", ">", "=")): 151 if version.startswith("<"): 152 relation |= 2 153 if version.startswith(">"): 154 relation |= 4 155 if version.startswith("="): 156 relation |= 8 157 version = version[1:] 158 hash = {'name': name, 'version': version, 'flags': relation} 159 finst = dclass() 160 finst.populate(hash) 161 l.append(finst) 162 i += 1 163 self[k] = l164166 l = [] 167 # for cinfo in header.get('changelog', []): 168 # cinst = headerSource.rpmChangeLog() 169 # cinst.populate(cinfo) 170 # l.append(cinst) 171 self['changelog'] = l172
Trees | Indices | Help |
---|
Generated by Epydoc 3.0.1 on Wed Mar 4 07:37:48 2020 | http://epydoc.sourceforge.net |