Ejemplo n.º 1
0
    def execute(self, session, master_collection, new_name, display_name,
                target, dest_tag):
        master = (session.db.query(Collection).filter_by(
            name=master_collection)).one()
        if not master:
            sys.exit("Collection not found")
        forked = (session.db.query(Collection).filter_by(
            name=new_name)).first()
        if forked:
            sys.exit("Forked collection already exists")
        forked = Collection(
            name=new_name,
            target=target,
            dest_tag=dest_tag,
            order=master.order,
            display_name=display_name,
        )
        for key in ('secondary_mode', 'priority_coefficient',
                    'bugzilla_product', 'poll_untracked', 'build_group',
                    'bugzilla_version'):
            setattr(forked, key, getattr(master, key))
        self.set_koji_tags(session, forked)
        session.db.add(forked)
        session.db.flush()
        for group_rel in (session.db.query(CollectionGroupRelation).filter_by(
                collection_id=master.id)):
            session.db.add(
                CollectionGroupRelation(
                    collection_id=forked.id,
                    group_id=group_rel.group_id,
                ))

        data.copy_collection(session, master, forked, minimal=True)
        session.log_user_action("Collection {} forked from {}".format(
            new_name, master_collection))
Ejemplo n.º 2
0
    def execute(self, session, master_collection, new_name, display_name,
                target, dest_tag, bugzilla_version):
        master = (
            session.db.query(Collection)
            .filter_by(name=master_collection)
        ).first()
        if not master:
            sys.exit("Collection not found")
        branched = (
            session.db.query(Collection)
            .filter_by(name=new_name)
        ).first()
        if branched:
            sys.exit("Branched collection exists already")
        branched = Collection(
            display_name=display_name,
            bugzilla_version=bugzilla_version,
        )
        for key in ('secondary_mode', 'priority_coefficient', 'bugzilla_product',
                    'poll_untracked', 'build_group', 'target', 'name', 'order',
                    'dest_tag'):
            setattr(branched, key, getattr(master, key))
        master.name = new_name
        master.target = target
        master.dest_tag = dest_tag
        master.order += 1
        self.set_koji_tags(session, branched)
        self.set_koji_tags(session, master)
        session.db.add(branched)
        session.db.flush()
        for group_rel in (
                session.db.query(CollectionGroupRelation)
                .filter_by(collection_id=master.id)
        ):
            session.db.add(CollectionGroupRelation(
                collection_id=branched.id,
                group_id=group_rel.group_id,
            ))

        data.copy_collection(session, master, branched)
        session.log_user_action(
            "Collection {} branched from {}".format(new_name, master_collection)
        )
Ejemplo n.º 3
0
    def execute(self, session, master_collection, new_name, display_name,
                target, bugzilla_version):
        master = (
            session.db.query(Collection)
            .filter_by(name=master_collection)
        ).first()
        if not master:
            sys.exit("Collection not found")
        branched = (
            session.db.query(Collection)
            .filter_by(name=new_name)
        ).first()
        if branched:
            sys.exit("Branched collection exists already")
        branched = Collection(
            display_name=display_name,
            bugzilla_version=bugzilla_version,
        )
        for key in ('secondary_mode', 'priority_coefficient', 'bugzilla_product',
                    'poll_untracked', 'build_group', 'target', 'name', 'order'):
            setattr(branched, key, getattr(master, key))
        master.name = new_name
        master.target = target
        master.order += 1
        self.set_koji_tags(session, branched)
        self.set_koji_tags(session, master)
        session.db.add(branched)
        session.db.flush()
        for group_rel in (
                session.db.query(CollectionGroupRelation)
                .filter_by(collection_id=master.id)
        ):
            session.db.add(CollectionGroupRelation(
                collection_id=branched.id,
                group_id=group_rel.group_id,
            ))

        data.copy_collection(session, master, branched)
        session.log_user_action(
            "Collection {} branched from {}".format(new_name, master_collection)
        )
Ejemplo n.º 4
0
    def test_copy_collection_minimal(self):
        self.prepare_build('rnv')
        self.prepare_build('eclipse')
        # the next build is old and shouldn't be copied
        base_maven_ancient = self.prepare_build(
            package='maven',
            state=True,
            arches=('ppc', 'sparc'),
            started='2000-01-01',
        )
        base_maven_quondam = self.prepare_build(
            package='maven',
            state=True,
            arches=('ppc', 'sparc'),
            started=datetime.fromtimestamp(time.time() - 29*24*60*60),
            real=True,
        )
        base_maven_current = self.prepare_build(
            package='maven',
            state=True,
            arches=('ppc', 'sparc'),
            started=datetime.fromtimestamp(time.time() - 10),
        )
        base_maven_running = self.prepare_build(
            package='maven',
            state=None,
            arches=('ppc', 'sparc'),
            started=datetime.now(),
        )
        self.prepare_depchange(dep_name='foo',
                               prev_epoch=1, prev_version='v1', prev_release='r1',
                               curr_epoch=2, curr_version='v2', curr_release='r2',
                               build_id=base_maven_current.id, distance=3)
        base_maven = base_maven_current.package
        self.prepare_resolution_change(base_maven, ["It's broken"])

        base = self.collection
        fork = self.prepare_collection('fork')
        data.copy_collection(self.session, base, fork, minimal=True)
        self.db.commit()

        fork_maven = self.db.query(Package).filter_by(collection=fork, name='maven').one()
        self.assertIsNotNone(fork_maven)
        self.assertNotEqual(base_maven.id, fork_maven.id)
        self.assertEqual(base.id, base_maven.collection_id)
        self.assertEqual(fork.id, fork_maven.collection_id)
        self.assertEqual('maven', fork_maven.name)

        self.assertEqual(1, len(fork_maven.all_builds))
        fork_maven_current = fork_maven.all_builds[0]
        self.assertNotEqual(base_maven_current.id, fork_maven_current.id)
        self.assertEqual(base_maven_running.id, base_maven.last_build_id)
        self.assertEqual(base_maven_current.id, base_maven.last_complete_build_id)
        self.assertEqual(fork_maven_current.id, fork_maven.last_build_id)
        self.assertEqual(fork_maven_current.id, fork_maven.last_complete_build_id)

        self.assertEqual(1, len(fork_maven_current.dependency_changes))
        self.assertEqual('r2', fork_maven_current.dependency_changes[0].curr_dep.release)

        self.assertEqual("It's broken", self.db.query(ResolutionChange).
                         filter_by(package_id=fork_maven.id).one().problems[0].problem)
Ejemplo n.º 5
0
    def test_copy_collection(self):
        now = datetime.now()
        source = self.collection
        _, _, maven1 = self.prepare_packages('rnv', 'eclipse', 'maven')
        self.prepare_build('rnv')
        self.prepare_build('eclipse')
        # the next build is old and shouldn't be copied
        self.prepare_build('maven', state=True, started='2016-01-01')
        old_build1 = self.prepare_build(
            'maven', state=True,
            started=datetime.fromtimestamp(time.time() - 10)
        )
        new_build1 = self.prepare_build('maven', started=now)
        copy = Collection(
            name='copy', display_name='copy', target='a', build_tag='b',
            dest_tag='c',
        )
        self.db.add(copy)
        prev_dep = Dependency(
            name='foo', version='1', release='1', arch='x86_64'
        )
        curr_dep = Dependency(
            name='foo', version='1', release='2', arch='x86_64'
        )
        change1 = AppliedChange(
            build_id=old_build1.id,
            prev_dep=prev_dep,
            curr_dep=curr_dep,
        )
        self.db.add(change1)
        task1 = KojiTask(
            build_id=new_build1.id,
            task_id=new_build1.task_id,
            state=1,
            arch='x86_64',
            started=new_build1.started,
        )
        self.db.add(task1)
        rchange1 = ResolutionChange(
            package_id=maven1.id,
            resolved=False,
            timestamp=now,
        )
        self.db.add(rchange1)
        self.db.flush()
        problem1 = ResolutionProblem(
            resolution_id=rchange1.id,
            problem="It's broken",
        )
        self.db.add(problem1)
        self.db.commit()

        data.copy_collection(self.session, source, copy)
        self.db.commit()

        maven2 = self.db.query(Package).filter_by(collection=copy, name='maven').first()
        self.assertIsNotNone(maven2)
        self.assertNotEqual(maven1.id, maven2.id)
        self.assertEqual(source.id, maven1.collection_id)
        self.assertEqual(copy.id, maven2.collection_id)
        self.assertEqual('maven', maven2.name)

        self.assertEqual(2, len(maven2.all_builds))
        new_build2, old_build2 = maven2.all_builds
        self.assertNotEqual(new_build1.id, new_build2.id)
        self.assertNotEqual(old_build1.id, old_build2.id)
        self.assertEqual(new_build1.id, maven1.last_build_id)
        self.assertEqual(old_build1.id, maven1.last_complete_build_id)
        self.assertEqual(new_build2.id, maven2.last_build_id)
        self.assertEqual(old_build2.id, maven2.last_complete_build_id)
        self.assertEqual(1, new_build2.build_arch_tasks[0].state)

        self.assertEqual(1, len(old_build2.dependency_changes))
        change2 = old_build2.dependency_changes[0]
        self.assertEqual('2', change2.curr_dep.release)

        rchange2 = self.db.query(ResolutionChange).filter_by(package_id=maven2.id).one()
        self.assertEqual("It's broken", rchange2.problems[0].problem)
Ejemplo n.º 6
0
    def test_copy_collection(self):
        now = datetime.now()
        source = self.collection
        _, _, maven1 = self.prepare_packages('rnv', 'eclipse', 'maven')
        self.prepare_build('rnv')
        self.prepare_build('eclipse')
        # the next build is old and shouldn't be copied
        self.prepare_build('maven', state=True, started='2016-01-01')
        old_build1 = self.prepare_build(
            'maven',
            state=True,
            started=datetime.fromtimestamp(time.time() - 10))
        new_build1 = self.prepare_build('maven', started=now)
        copy = Collection(
            name='copy',
            display_name='copy',
            target='a',
            build_tag='b',
            dest_tag='c',
        )
        self.db.add(copy)
        prev_dep = Dependency(name='foo',
                              version='1',
                              release='1',
                              arch='x86_64')
        curr_dep = Dependency(name='foo',
                              version='1',
                              release='2',
                              arch='x86_64')
        change1 = AppliedChange(
            build_id=old_build1.id,
            prev_dep=prev_dep,
            curr_dep=curr_dep,
        )
        self.db.add(change1)
        task1 = KojiTask(
            build_id=new_build1.id,
            task_id=new_build1.task_id,
            state=1,
            arch='x86_64',
            started=new_build1.started,
        )
        self.db.add(task1)
        rchange1 = ResolutionChange(
            package_id=maven1.id,
            resolved=False,
            timestamp=now,
        )
        self.db.add(rchange1)
        self.db.flush()
        problem1 = ResolutionProblem(
            resolution_id=rchange1.id,
            problem="It's broken",
        )
        self.db.add(problem1)
        self.db.commit()

        data.copy_collection(self.session, source, copy)
        self.db.commit()

        maven2 = self.db.query(Package).filter_by(collection=copy,
                                                  name='maven').first()
        self.assertIsNotNone(maven2)
        self.assertNotEqual(maven1.id, maven2.id)
        self.assertEqual(source.id, maven1.collection_id)
        self.assertEqual(copy.id, maven2.collection_id)
        self.assertEqual('maven', maven2.name)

        self.assertEqual(2, len(maven2.all_builds))
        new_build2, old_build2 = maven2.all_builds
        self.assertNotEqual(new_build1.id, new_build2.id)
        self.assertNotEqual(old_build1.id, old_build2.id)
        self.assertEqual(new_build1.id, maven1.last_build_id)
        self.assertEqual(old_build1.id, maven1.last_complete_build_id)
        self.assertEqual(new_build2.id, maven2.last_build_id)
        self.assertEqual(old_build2.id, maven2.last_complete_build_id)
        self.assertEqual(1, new_build2.build_arch_tasks[0].state)

        self.assertEqual(1, len(old_build2.dependency_changes))
        change2 = old_build2.dependency_changes[0]
        self.assertEqual('2', change2.curr_dep.release)

        rchange2 = self.db.query(ResolutionChange).filter_by(
            package_id=maven2.id).one()
        self.assertEqual("It's broken", rchange2.problems[0].problem)