def accept_source_changes(session, changes, user): group = changes.get('X-Lucy-Group', "default") suite = changes['Distribution'] try: group_suite = session.query(GroupSuite).filter( Group.name==group, Suite.name==suite, ).one() except MultipleResultsFound: return reject_changes(session, changes, "internal-error") except NoResultFound: return reject_changes(session, changes, "invalid-suite-for-group") dsc = changes.get_dsc_obj() if dsc['Source'] != changes['Source']: return reject_changes(session, changes, "dsc-does-not-march-changes") if dsc['Version'] != changes['Version']: return reject_changes(session, changes, "dsc-does-not-march-changes") try: source = session.query(Source).filter( Source.name==dsc['Source'], Source.version==dsc['Version'], GroupSuite.group==group_suite.group, ).one() return reject_changes(session, changes, "source-already-in-group") except MultipleResultsFound: return reject_changes(session, changes, "internal-error") except NoResultFound: pass component = session.query(Component).filter_by(name="main").one() if 'Build-Architecture-Indep' in dsc: valid_affinities = dsc['Build-Architecture-Indep'] elif 'X-Build-Architecture-Indep' in dsc: valid_affinities = dsc['X-Build-Architecture-Indep'] elif 'X-Arch-Indep-Build-Arch' in dsc: valid_affinities = dsc['X-Arch-Indep-Build-Arch'] else: valid_affinities = "any" source = create_source(dsc, group_suite, component, user) create_jobs(source, valid_affinities) session.add(source) # OK. Populated entry. Let's insert. session.commit() # Neato. # OK. We have a changes in order. Let's roll. repo = Repo(group_suite.group.repo_path) repo.add_changes(changes) emit('accept', 'source', source.debilize()) # OK. It's safely in the database and repo. Let's cleanup. for fp in [changes.get_filename()] + changes.get_files(): os.unlink(fp)
def _create_debile_source(self, session, pkg): user = session.query(Person).filter_by(email="*****@*****.**").one() group_suite = ( session.query(GroupSuite) .join(GroupSuite.group) .join(GroupSuite.suite) .filter(Group.name == "default", Suite.name == pkg.suite) .one() ) component = session.query(Component).filter(Component.name == pkg.component).one() aroot = None if pkg.queue_name: # package is in a build-queue aroot = self._buildq_path else: aroot = self._archive_path dsc_fname = "{root}/{directory}/{filename}".format(root=aroot, directory=pkg.directory, filename=pkg.dsc) dsc = Dsc(open(dsc_fname)) if "Build-Architecture-Indep" in dsc: valid_affinities = dsc["Build-Architecture-Indep"] elif "X-Build-Architecture-Indep" in dsc: valid_affinities = dsc["X-Build-Architecture-Indep"] elif "X-Arch-Indep-Build-Arch" in dsc: valid_affinities = dsc["X-Arch-Indep-Build-Arch"] else: valid_affinities = "any" source = create_source(dsc, group_suite, component, user, self._affinity_preference, valid_affinities) source.directory = pkg.directory source.dsc_filename = pkg.dsc session.add(source) for aname in pkg.installed_archs: arch = session.query(Arch).filter_by(name=aname).one() binary = Binary(source=source, arch=arch, uploaded_at=source.uploaded_at) session.add(binary) for name, arch, filename in pkg.binaries: if arch == binary.arch.name: directory, _, filename = filename.rpartition("/") deb = Deb(binary=binary, directory=directory, filename=filename) session.add(deb) create_jobs(source, dose_report="No dose-builddebcheck report available yet.") oldsources = session.query(Source).filter(Source.group_suite == source.group_suite, Source.name == source.name) for oldsource in oldsources: if version_compare(oldsource.version, source.version) >= 0: continue # Drop any old jobs that are still pending. for job in oldsource.jobs: if (job.check.build and not any(job.built_binaries)) or not any(job.results): session.delete(job) elif job.failed is None: job.failed = any(result.failed for result in job.results) job.builder = None job.assigned_at = None job.finished_at = None # Actually remove jobs marked for deletion above. session.commit() # If after cleanup there is no build jobs left, remove the source completely if not any(job.check.build for job in oldsource.jobs): session.delete(oldsource) print("Created source for %s %s" % (source.name, source.version)) emit("accept", "source", source.debilize())
def accept_source_changes(session, changes, user): gid = changes.get('X-Lucy-Group', "default") sid = changes['Distribution'] try: group = session.query(Group).filter_by(name=gid).one() suite = session.query(Suite).filter_by(name=sid).one() except MultipleResultsFound: return reject_changes(session, changes, "internal-error") except NoResultFound: return reject_changes(session, changes, "invalid-group-or-suite") try: source = session.query(Source).filter_by( name=changes['Source'], version=changes['Version'], group=group, ).one() return reject_changes(session, changes, "source-already-in-group") except MultipleResultsFound: return reject_changes(session, changes, "internal-error") except NoResultFound: pass MAINTAINER = re.compile("(?P<name>.*) \<(?P<email>.*)\>") source = Source(uploader=user, name=changes['Source'], version=changes['Version'], group=group, suite=suite, uploaded_at=dt.datetime.utcnow(), updated_at=dt.datetime.utcnow()) source.maintainers.append( Maintainer(comaintainer=False, **MAINTAINER.match(changes['Maintainer']).groupdict())) dsc = changes.get_dsc_obj() whos = (x.strip() for x in dsc.get("Uploaders", "").split(",") if x != "") for who in whos: source.maintainers.append( Maintainer(comaintainer=True, **MAINTAINER.match(who).groupdict())) arches = dsc['Architecture'].split() create_jobs(source, session, arches) session.add(source) # OK. Populated entry. Let's insert. session.commit() # Neato. # OK. We have a changes in order. Let's roll. repo = group.get_repo() repo.add_changes(changes) emit('accept', 'source', source.debilize()) # OK. It's safely in the database and repo. Let's cleanup. for fp in [changes.get_filename()] + changes.get_files(): os.unlink(fp)
def _create_debile_source(self, session, pkg): user = session.query(Person).filter_by(email="*****@*****.**").one() group_suite = session.query(GroupSuite).join(GroupSuite.group).join(GroupSuite.suite).filter( Group.name == "default", Suite.name == pkg.suite, ).one() component = session.query(Component).filter( Component.name == pkg.component ).one() dsc_fname = "{root}/{directory}/{filename}".format( root=self._archive_path, directory=pkg.directory, filename=pkg.dsc, ) dsc = Dsc(open(dsc_fname)) if 'Build-Architecture-Indep' in dsc: valid_affinities = dsc['Build-Architecture-Indep'] elif 'X-Build-Architecture-Indep' in dsc: valid_affinities = dsc['X-Build-Architecture-Indep'] elif 'X-Arch-Indep-Build-Arch' in dsc: valid_affinities = dsc['X-Arch-Indep-Build-Arch'] else: valid_affinities = "any" source = create_source(dsc, group_suite, component, user, self._affinity_preference, valid_affinities) source.directory = pkg.directory source.dsc_filename = pkg.dsc session.add(source) for aname in pkg.installed_archs: arch = session.query(Arch).filter_by(name=aname).one() binary = Binary(source=source, arch=arch, uploaded_at=source.uploaded_at) session.add(binary) for name, arch, filename in pkg.binaries: if arch == binary.arch.name: directory, _, filename = filename.rpartition('/') deb = Deb(binary=binary, directory=directory, filename=filename) session.add(deb) create_jobs(source, dose_report="No dose-builddebcheck report available yet.") # Drop any old jobs that are still pending. oldsources = session.query(Source).filter( Source.group_suite == source.group_suite, Source.name == source.name, ) for oldsource in oldsources: if version_compare(oldsource.version, source.version) >= 0: continue for job in oldsource.jobs: if (not any(job.results) and not any(job.built_binaries)): session.delete(job) elif job.failed is None: job.failed = True if not any(job.check.build for job in oldsource.jobs): session.delete(oldsource) print("Created source for %s %s" % (source.name, source.version)) emit('accept', 'source', source.debilize())
def accept_source_changes(default_group, config, session, changes, user): group = changes.get('X-Debile-Group', default_group) suite = changes['Distribution'] try: group_suite = session.query(GroupSuite).join(GroupSuite.group).join(GroupSuite.suite).filter( Group.name == group, Suite.name == suite, ).one() except MultipleResultsFound: return reject_changes(session, changes, "internal-error") except NoResultFound: return reject_changes(session, changes, "invalid-suite-for-group") dsc = changes.get_dsc_obj() if dsc['Source'] != changes['Source']: return reject_changes(session, changes, "dsc-does-not-march-changes") if dsc['Version'] != changes['Version']: return reject_changes(session, changes, "dsc-does-not-march-changes") try: source = session.query(Source).filter( Source.name == dsc['Source'], Source.version == dsc['Version'], GroupSuite.group == group_suite.group, ).one() return reject_changes(session, changes, "source-already-in-group") except MultipleResultsFound: return reject_changes(session, changes, "internal-error") except NoResultFound: pass oldsources = session.query(Source).filter( Source.group_suite == group_suite, Source.name == dsc['Source'], ) for oldsource in oldsources: if version_compare(oldsource.version, dsc['Version']) > 0: return reject_changes(session, changes, "newer-source-already-in-suite") # Drop any old jobs that are still pending. for oldsource in oldsources: for job in oldsource.jobs: if (not any(job.results) and not any(job.built_binaries)): session.delete(job) elif job.failed is None: job.failed = True if not any(oldsource.jobs): session.delete(oldsource) component = session.query(Component).filter_by(name="main").one() if 'Build-Architecture-Indep' in dsc: valid_affinities = dsc['Build-Architecture-Indep'] elif 'X-Build-Architecture-Indep' in dsc: valid_affinities = dsc['X-Build-Architecture-Indep'] elif 'X-Arch-Indep-Build-Arch' in dsc: valid_affinities = dsc['X-Arch-Indep-Build-Arch'] else: valid_affinities = "any" with session.no_autoflush: source = create_source(dsc, group_suite, component, user, config["affinity_preference"], valid_affinities) create_jobs(source) session.add(source) # We have a changes in order. Let's roll. repo = Repo(group_suite.group.repo_path) repo.add_changes(changes) (source.directory, source.dsc_filename) = repo.find_dsc(source) emit('accept', 'source', source.debilize()) # OK. It's safely in the database and repo. Let's cleanup. for fp in [changes.get_changes_file()] + changes.get_files(): os.unlink(fp)
def _create_debile_source(self, session, pkg): user = session.query(Person).filter_by( email="*****@*****.**").one() group_suite = session.query(GroupSuite).join(GroupSuite.group).join( GroupSuite.suite).filter( Group.name == "default", Suite.name == pkg.suite, ).one() component = session.query(Component).filter( Component.name == pkg.component).one() dsc_fname = "{root}/{directory}/{filename}".format( root=self._archive_path, directory=pkg.directory, filename=pkg.dsc, ) dsc = Dsc(open(dsc_fname)) if 'Build-Architecture-Indep' in dsc: valid_affinities = dsc['Build-Architecture-Indep'] elif 'X-Build-Architecture-Indep' in dsc: valid_affinities = dsc['X-Build-Architecture-Indep'] elif 'X-Arch-Indep-Build-Arch' in dsc: valid_affinities = dsc['X-Arch-Indep-Build-Arch'] else: valid_affinities = "any" source = create_source(dsc, group_suite, component, user, self._affinity_preference, valid_affinities) source.directory = pkg.directory source.dsc_filename = pkg.dsc session.add(source) for aname in pkg.installed_archs: arch = session.query(Arch).filter_by(name=aname).one() binary = Binary(source=source, arch=arch, uploaded_at=source.uploaded_at) session.add(binary) for name, arch, filename in pkg.binaries: if arch == binary.arch.name: directory, _, filename = filename.rpartition('/') deb = Deb(binary=binary, directory=directory, filename=filename) session.add(deb) create_jobs(source, dose_report="No dose-builddebcheck report available yet.") oldsources = session.query(Source).filter( Source.group_suite == source.group_suite, Source.name == source.name, ) for oldsource in oldsources: if version_compare(oldsource.version, source.version) >= 0: continue # Drop any old jobs that are still pending. for job in oldsource.jobs: if (job.check.build and not any(job.built_binaries)) or not any(job.results): session.delete(job) elif job.failed is None: job.failed = any(result.failed for result in job.results) job.builder = None job.assigned_at = None job.finished_at = None # Actually remove jobs marked for deletion above. session.commit() # If after cleanup there is no build jobs left, remove the source completely if not any(job.check.build for job in oldsource.jobs): session.delete(oldsource) print("Created source for %s %s" % (source.name, source.version)) emit('accept', 'source', source.debilize())
def accept_source_changes(default_group, config, session, changes, user): group = changes.get('X-Debile-Group', default_group) suite = changes['Distribution'] try: group_suite = session.query(GroupSuite).join(GroupSuite.group).join( GroupSuite.suite).filter( Group.name == group, Suite.name == suite, ).one() except MultipleResultsFound: return reject_changes(session, changes, "internal-error") except NoResultFound: return reject_changes(session, changes, "invalid-suite-for-group") dsc = changes.get_dsc_obj() if dsc['Source'] != changes['Source']: return reject_changes(session, changes, "dsc-does-not-march-changes") if dsc['Version'] != changes['Version']: return reject_changes(session, changes, "dsc-does-not-march-changes") try: source = session.query(Source).filter( Source.name == dsc['Source'], Source.version == dsc['Version'], GroupSuite.group == group_suite.group, ).one() return reject_changes(session, changes, "source-already-in-group") except MultipleResultsFound: return reject_changes(session, changes, "internal-error") except NoResultFound: pass oldsources = session.query(Source).filter( Source.group_suite == group_suite, Source.name == dsc['Source'], ) for oldsource in oldsources: if version_compare(oldsource.version, dsc['Version']) > 0: return reject_changes(session, changes, "newer-source-already-in-suite") # Drop any old jobs that are still pending. for oldsource in oldsources: for job in oldsource.jobs: if (not any(job.results) and not any(job.built_binaries)): session.delete(job) elif job.failed is None: job.failed = True if not any(oldsource.jobs): session.delete(oldsource) component = session.query(Component).filter_by(name="main").one() if 'Build-Architecture-Indep' in dsc: valid_affinities = dsc['Build-Architecture-Indep'] elif 'X-Build-Architecture-Indep' in dsc: valid_affinities = dsc['X-Build-Architecture-Indep'] elif 'X-Arch-Indep-Build-Arch' in dsc: valid_affinities = dsc['X-Arch-Indep-Build-Arch'] else: valid_affinities = "any" with session.no_autoflush: source = create_source(dsc, group_suite, component, user, config["affinity_preference"], valid_affinities) create_jobs(source) session.add(source) # We have a changes in order. Let's roll. repo = Repo(group_suite.group.repo_path) repo.add_changes(changes) try: (source.directory, source.dsc_filename) = repo.find_dsc(source) except RepoPackageNotFound: return reject_changes(session, changes, "reprepo-package-not-found") emit('accept', 'source', source.debilize()) # OK. It's safely in the database and repo. Let's cleanup. for fp in [changes.get_changes_file()] + changes.get_files(): os.unlink(fp)