Exemplo n.º 1
0
    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')
Exemplo n.º 2
0
    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()
Exemplo n.º 3
0
 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]
Exemplo n.º 4
0
 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