QList<QUrl> Core::GetPackageURLs (int packageId) const { QList<QUrl> result; QMap<int, QList<QString> > repo2cmpt = Storage_->GetPackageLocations (packageId); PackageShortInfo info = Storage_->GetPackage (packageId); QString pathAddition = QString ("dists/%1/all/"); QString normalized = NormalizePackageName (info.Name_); pathAddition += QString ("%1/%1-%2.tar.gz") .arg (normalized) .arg (info.Versions_.at (0)); Q_FOREACH (int repoId, repo2cmpt.keys ()) { RepoInfo ri = Storage_->GetRepo (repoId); QUrl url = ri.GetUrl (); QString path = url.path (); if (!path.endsWith ('/')) path += '/'; Q_FOREACH (const QString& component, repo2cmpt [repoId]) { QUrl tmp = url; tmp.setPath (path + pathAddition.arg (component)); result << tmp; } }
int Storage::AddRepo (const RepoInfo& ri) { Util::DBLock lock (DB_); try { lock.Init (); } catch (const std::runtime_error& e) { qWarning () << Q_FUNC_INFO << "could not acquire DB lock"; throw; } QueryAddRepo_.bindValue (":url", Slashize (ri.GetUrl ()).toEncoded ()); QueryAddRepo_.bindValue (":name", ri.GetName ()); QueryAddRepo_.bindValue (":description", ri.GetShortDescr ()); QueryAddRepo_.bindValue (":longdescr", ri.GetLongDescr ()); QueryAddRepo_.bindValue (":maint_name", ri.GetMaintainer ().Name_); QueryAddRepo_.bindValue (":maint_email", ri.GetMaintainer ().Email_); if (!QueryAddRepo_.exec ()) { Util::DBLock::DumpError (QueryAddRepo_); throw std::runtime_error ("Query execution failed."); } QueryAddRepo_.finish (); int repoId = FindRepo (Slashize (ri.GetUrl ())); if (repoId == -1) { qWarning () << Q_FUNC_INFO << "OH SHI~, just inserted repo cannot be found!"; throw std::runtime_error ("Just inserted repo cannot be found."); } Q_FOREACH (const QString& component, ri.GetComponents ()) AddComponent (repoId, component); lock.Good (); return repoId; }
QList<QUrl> Core::GetPackageURLs (int packageId) const { QList<QUrl> result; const auto& repo2cmpt = Storage_->GetPackageLocations (packageId); PackageShortInfo info; try { info = Storage_->GetPackage (packageId); } catch (const std::exception& e) { qWarning () << Q_FUNC_INFO << "error getting package" << packageId << e.what (); return result; } auto pathAddition = QString ("dists/%1/all/"); const auto& normalized = NormalizePackageName (info.Name_); const auto& version = info.Versions_.at (0); pathAddition += QString ("%1/%1-%2.tar.%3") .arg (normalized) .arg (version) .arg (info.VersionArchivers_.value (version, "gz")); Q_FOREACH (int repoId, repo2cmpt.keys ()) { RepoInfo ri = Storage_->GetRepo (repoId); QUrl url = ri.GetUrl (); QString path = url.path (); if (!path.endsWith ('/')) path += '/'; Q_FOREACH (const QString& component, repo2cmpt [repoId]) { QUrl tmp = url; tmp.setPath (path + pathAddition.arg (component)); result << tmp; } }