예제 #1
0
파일: nevra-py.cpp 프로젝트: edynox/libhif
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;
}
예제 #2
0
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;
}
예제 #3
0
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;
}
예제 #4
0
QList<QVariant> Version::toArray()
{
   return {getMajor(), getMinor(), getPatch(), getBuild(), getRelease()};
}