def handle(self, action, codename, pkg_type, component, architecture, pkg_name, pkg_version, *files, **options): if action != 'add' and action != 'replace': return if os.environ.get('REPREPRO_CAUSING_COMMAND') not in ('processincoming', 'pull'): # Only create build record if called by processincoming return if 'repository' in options: repository_name = options['repository'] else: repository_name = get_repository_name() repository = Repository.objects.get(name=repository_name) series_name = codename[:-len('-proposed')] series = Series.objects.get(repository=repository, name=series_name) known_archs = dict([(arch.name, arch) for arch in Architecture.objects.all()]) dsc = None for f in files: if f.endswith('.dsc'): dsc = f break if dsc is None: raise Exception('Adding dsc without .dsc file?!?') dsc = parse_dsc_file(os.path.join(repository.reprepro_outdir, dsc)) requested_archs = dsc['Architecture'].split(' ') build_archs = set() for arch in requested_archs: if arch == 'all': build_archs.add(known_archs['i386']) elif arch == 'any': build_archs.update(known_archs.values()) elif arch in known_archs: build_archs.add(known_archs[arch]) print build_archs for arch in build_archs: br = BuildRecord(source_package_name=pkg_name, version=pkg_version, architecture=arch, state=BuildRecord.NEEDS_BUILDING, series=series) br.save()
def test_high_priority_takes_precedence(self): br1 = BuildRecord(series_id=1, architecture_id=1, priority=100, source_package_name='foo1', version='1.2-2ubuntu2') br1.save() br2 = BuildRecord(series_id=1, architecture_id=1, priority=200, source_package_name='foo2', version='1.2-2ubuntu2') br2.save() br3 = BuildRecord(series_id=1, architecture_id=1, priority=150, source_package_name='foo3', version='1.2-2ubuntu2') br3.save() self.assertEquals(BuildRecord.pending_build_count(), 3) bn = BuildNode(cloud_id=1).save() br = BuildRecord.pick_build(bn) self.assertEquals(br, br2)