static PyObject * iter(_NevraObject *self) { PyObject *res; auto nevra = self->nevra; if (nevra->getEpoch() == -1) { Py_INCREF(Py_None); res = Py_BuildValue("zOzzz", nevra->getName().c_str(), Py_None, nevra->getVersion().c_str(), nevra->getRelease().c_str(), nevra->getArch().c_str()); } else res = Py_BuildValue("zizzz", nevra->getName().c_str(), nevra->getEpoch(), nevra->getVersion().c_str(), nevra->getRelease().c_str(), nevra->getArch().c_str()); PyObject *iter = PyObject_GetIter(res); Py_DECREF(res); return iter; }
static RPMItemPtr nevraToRPMItem(SQLite3Ptr conn, std::string nevra) { auto nevraObject = new Nevra; if (hy_nevra_possibility(nevra.c_str(), HY_FORM_NEVRA, nevraObject)) { return nullptr; } if (nevraObject->getEpoch() < 0) { nevraObject->setEpoch(0); } auto rpm = std::make_shared< RPMItem >(conn); rpm->setName(nevraObject->getName()); rpm->setEpoch(nevraObject->getEpoch()); rpm->setVersion(nevraObject->getVersion()); rpm->setRelease(nevraObject->getRelease()); rpm->setArch(nevraObject->getArch()); return rpm; }
std::vector<Database::IdType> getSimilarReleases(Wt::Dbo::Session& session, Database::IdType releaseId, std::size_t maxCount) { std::vector<Database::IdType> res; Wt::Dbo::Transaction transaction(session); auto release = Database::Release::getById(session, releaseId); if (!release) return res; auto releaseTracks = release->getTracks(); std::set<Database::IdType> releaseTrackIds; for (const auto& releaseTrack : releaseTracks) releaseTrackIds.insert(releaseTrack.id()); auto trackIds = getSimilarTracks(session, releaseTrackIds, maxCount * 5); for (auto trackId : trackIds) { auto track = Database::Track::getById(session, trackId); if (!track) continue; auto trackRelease = track->getRelease(); if (!trackRelease || trackRelease.id() == releaseId) continue; if (std::find(res.begin(), res.end(), trackRelease.id()) != res.end()) continue; res.push_back(trackRelease.id()); if (res.size() == maxCount) break; } return res; }
QList<QVariant> Version::toArray() { return {getMajor(), getMinor(), getPatch(), getBuild(), getRelease()}; }