def __postprocessChannel(self, channel): if channel.ignored: return arch = channel['channel_arch'] if self.arches[arch] is None: # Mark it as ignored channel.ignored = 1 raise InvalidArchError(arch, "Unsupported channel arch %s" % arch) channel['channel_arch_id'] = self.arches[arch] if channel['checksum_type']: channel['checksum_type_id'] = self.checksum_types[ channel['checksum_type']] else: channel['checksum_type_id'] = None if 'product_name' in channel: channel['product_name_id'] = self.backend.lookupProductNames( channel['product_name']) families = [] for family in channel['families']: # Link back the channel to families channel_family_id = self.families[family['label']] if channel_family_id is None: # Still cant get the id, Unknown channel family raise InvalidChannelFamilyError(family['label']) families.append( {'channel_family_id': self.families[family['label']]}) channel['families'] = families # Dists self.__postprocessChannelMaps(channel, 'dists') # release self.__postprocessChannelMaps(channel, 'release')
def __copyChannels(self, sourcePackage, destPackage): dpHash = destPackage['channels'] for schannelName in sourcePackage.channels: # Check if the package is compatible with the channel channel = self.channels[schannelName] if not channel: # Unknown channel sourcePackage.ignored = 1 raise InvalidChannelError(channel, "Unsupported channel %s" % schannelName) # Check channel-package compatibility charch = channel['channel_arch_id'] archCompat = self.channel_package_arch_compat[charch] if not archCompat: # Invalid architecture sourcePackage.ignored = 1 raise InvalidArchError(charch, "Invalid channel architecture %s" % charch) # Now check if the source package's arch is compatible with the # current channel if not archCompat.has_key(sourcePackage['package_arch_id']): sourcePackage.ignored = 1 raise IncompatibleArchError(sourcePackage.arch, charch, "Package arch %s incompatible with channel %s" % (sourcePackage.arch, schannelName)) dpHash[channel['id']] = schannelName destPackage.channels = dpHash.values()
def __postprocessChannelMaps(self, channel, map): if map in channel and channel[map] is not None: for dict in channel[map]: arch = dict['channel_arch'] if self.arches[arch] is None: # Mark it as ignored channel.ignored = 1 raise InvalidArchError(arch, "Unsupported channel arch %s" % arch) dict['channel_arch_id'] = self.arches[arch]
def fix(self): # Look up arches and channels self.backend.lookupChannelArches(self.arches) self.backend.lookupChannels(self.channels) for dcm in self.batch: arch = self.arches[dcm['arch']] if arch is None: # Invalid arch dcm.ignored = 1 raise InvalidArchError(dcm['arch'], "Invalid dist_channel_map arch %s" % dcm['arch']) channel = self.channels[dcm['channel']] if channel is None: dcm.ignored = 1 raise InvalidChannelError(dcm['channel'], "Invalid dist_channel_map channel %s" % dcm['channel']) dcm['arch'] = arch dcm['channel_id'] = channel['id'] dcm['org_id'] = None