diff --git a/autotests/sourceslisttest.cpp b/autotests/sourceslisttest.cpp --- a/autotests/sourceslisttest.cpp +++ b/autotests/sourceslisttest.cpp @@ -24,6 +24,7 @@ #include #include +#include QTEST_MAIN(SourcesListTest); diff --git a/cmake/modules/FindAptPkg.cmake b/cmake/modules/FindAptPkg.cmake --- a/cmake/modules/FindAptPkg.cmake +++ b/cmake/modules/FindAptPkg.cmake @@ -23,6 +23,11 @@ FIND_LIBRARY(APTPKG_LIBRARY_RELEASE NAMES apt-pkg ) FIND_LIBRARY(APTINST_LIBRARY NAMES apt-inst ) +# apt-inst is optional these days! +IF ( NOT APTINST_LIBRARY ) + SET( APTINST_LIBRARY "" ) +ENDIF( ) + FIND_LIBRARY(APTPKG_LIBRARY_DEBUG NAMES apt-pkg apt-pkgd HINTS /usr/lib/debug/usr/lib/ ) IF( APTPKG_LIBRARY_RELEASE OR APTPKG_LIBRARY_DEBUG AND APTPKG_INCLUDE_DIR ) diff --git a/src/backend.cpp b/src/backend.cpp --- a/src/backend.cpp +++ b/src/backend.cpp @@ -26,17 +26,21 @@ #include // Apt includes +#include #include #include #include #include #include #include #include +#include +#include #include #include #include #include +#include // Xapian includes #undef slots @@ -324,7 +328,7 @@ { Q_D(Backend); - string message; + std::string message; if (_error->PopMessage(message)) d->initErrorMessage = QString::fromStdString(message); } @@ -356,7 +360,7 @@ pkgTagSection tags; while (tagFile.Step(tags)) { - string name = tags.FindS("Package"); + std::string name = tags.FindS("Package"); Package *pkg = package(QLatin1String(name.c_str())); if (pkg) pkg->setPinned(true); @@ -635,7 +639,7 @@ return QApt::PackageList(); } - string unsplitSearchString = searchString.toStdString(); + std::string unsplitSearchString = searchString.toStdString(); static int qualityCutoff = 15; PackageList searchResult; @@ -660,17 +664,17 @@ * index is built with the full package name */ // Always search for the package name - string xpString = "name:"; - string::size_type pos = unsplitSearchString.find_first_of(" ,;"); + std::string xpString = "name:"; + std::string::size_type pos = unsplitSearchString.find_first_of(" ,;"); if (pos > 0) { xpString += unsplitSearchString.substr(0,pos); } else { xpString += unsplitSearchString; } Xapian::Query xpQuery = parser.parse_query(xpString); pos = 0; - while ( (pos = unsplitSearchString.find("-", pos)) != string::npos ) { + while ( (pos = unsplitSearchString.find("-", pos)) != std::string::npos ) { unsplitSearchString.replace(pos, 1, " "); pos+=1; } @@ -1022,15 +1026,15 @@ { Q_D(Backend); - pkgAllUpgrade(*d->cache->depCache()); + APT::Upgrade::Upgrade(*d->cache->depCache(), APT::Upgrade::FORBID_REMOVE_PACKAGES | APT::Upgrade::FORBID_INSTALL_NEW_PACKAGES); emit packageChanged(); } void Backend::markPackagesForDistUpgrade() { Q_D(Backend); - pkgDistUpgrade(*d->cache->depCache()); + APT::Upgrade::Upgrade(*d->cache->depCache(), APT::Upgrade::ALLOW_EVERYTHING); emit packageChanged(); } @@ -1513,16 +1517,15 @@ tempFile.close(); QString tempFileName = tempFile.fileName(); - FILE *out = fopen(tempFileName.toUtf8(), "w"); - if (!out) { + FileFd out(tempFileName.toUtf8().toStdString(), FileFd::WriteOnly|FileFd::Create|FileFd::Empty); + if (!out.IsOpen()) { return false; } FileFd Fd(pinPath.toUtf8().data(), FileFd::ReadOnly); pkgTagFile tagFile(&Fd); if (_error->PendingError()) { - fclose(out); return false; } @@ -1536,15 +1539,11 @@ // Include all but the matching name in the new pinfile if (name != package->name()) { - TFRewriteData tfrd; - tfrd.Tag = 0; - tfrd.Rewrite = 0; - tfrd.NewTag = 0; - TFRewrite(out, tags, TFRewritePackageOrder, &tfrd); - fprintf(out, "\n"); + tags.Write(out, TFRewritePackageOrder, {}); + out.Write("\n", 1); } } - fclose(out); + out.Close(); if (!tempFile.open()) { return false; diff --git a/src/dependencyinfo.cpp b/src/dependencyinfo.cpp --- a/src/dependencyinfo.cpp +++ b/src/dependencyinfo.cpp @@ -102,11 +102,11 @@ QList DependencyInfo::parseDepends(const QString &field, DependencyType type) { - string package; - string version; + std::string package; + std::string version; unsigned int op; - string fieldStr = field.toStdString(); + std::string fieldStr = field.toStdString(); const char *start = fieldStr.c_str(); const char *stop = start + strlen(start); diff --git a/src/package.cpp b/src/package.cpp --- a/src/package.cpp +++ b/src/package.cpp @@ -41,6 +41,7 @@ #include #include #include +#include #include #include #include @@ -212,7 +213,10 @@ QLatin1String Package::section() const { - return QLatin1String(d->packageIter.Section()); + const pkgCache::VerIterator &ver = (*d->backend->cache()->depCache()).GetCandidateVersion(d->packageIter); + if (!ver.end()) + return QLatin1String(ver.Section()); + return QLatin1String(""); } QString Package::sourcePackage() const @@ -222,7 +226,7 @@ // In the APT package record format, the only time when a "Source:" field // is present is when the binary package name doesn't match the source // name - const pkgCache::VerIterator &ver = (*d->backend->cache()->depCache()).GetCandidateVer(d->packageIter); + const pkgCache::VerIterator &ver = (*d->backend->cache()->depCache()).GetCandidateVersion(d->packageIter); if (!ver.end()) { pkgRecords::Parser &rec = d->backend->records()->Lookup(ver.FileList()); sourcePackage = QString::fromStdString(rec.SourcePkg()); @@ -240,7 +244,7 @@ QString Package::shortDescription() const { QString shortDescription; - const pkgCache::VerIterator &ver = (*d->backend->cache()->depCache()).GetCandidateVer(d->packageIter); + const pkgCache::VerIterator &ver = (*d->backend->cache()->depCache()).GetCandidateVersion(d->packageIter); if (!ver.end()) { pkgCache::DescIterator Desc = ver.TranslatedDescription(); pkgRecords::Parser & parser = d->backend->records()->Lookup(Desc.FileList()); @@ -253,7 +257,7 @@ QString Package::longDescription() const { - const pkgCache::VerIterator &ver = (*d->backend->cache()->depCache()).GetCandidateVer(d->packageIter); + const pkgCache::VerIterator &ver = (*d->backend->cache()->depCache()).GetCandidateVersion(d->packageIter); if (!ver.end()) { QString rawDescription; @@ -298,7 +302,7 @@ QString Package::maintainer() const { QString maintainer; - const pkgCache::VerIterator &ver = (*d->backend->cache()->depCache()).GetCandidateVer(d->packageIter); + const pkgCache::VerIterator &ver = (*d->backend->cache()->depCache()).GetCandidateVersion(d->packageIter); if (!ver.end()) { pkgRecords::Parser &parser = d->backend->records()->Lookup(ver.FileList()); maintainer = QString::fromUtf8(parser.Maintainer().data()); @@ -312,7 +316,7 @@ QString Package::homepage() const { QString homepage; - const pkgCache::VerIterator &ver = (*d->backend->cache()->depCache()).GetCandidateVer(d->packageIter); + const pkgCache::VerIterator &ver = (*d->backend->cache()->depCache()).GetCandidateVersion(d->packageIter); if (!ver.end()) { pkgRecords::Parser &parser = d->backend->records()->Lookup(ver.FileList()); homepage = QString::fromUtf8(parser.Homepage().data()); @@ -416,7 +420,7 @@ QString Package::priority() const { - const pkgCache::VerIterator &ver = (*d->backend->cache()->depCache()).GetCandidateVer(d->packageIter); + const pkgCache::VerIterator &ver = (*d->backend->cache()->depCache()).GetCandidateVersion(d->packageIter); if (ver.end()) return QString(); @@ -468,7 +472,7 @@ QString Package::origin() const { - const pkgCache::VerIterator &Ver = (*d->backend->cache()->depCache()).GetCandidateVer(d->packageIter); + const pkgCache::VerIterator &Ver = (*d->backend->cache()->depCache()).GetCandidateVersion(d->packageIter); if(Ver.end()) return QString(); @@ -479,7 +483,7 @@ QString Package::site() const { - const pkgCache::VerIterator &Ver = (*d->backend->cache()->depCache()).GetCandidateVer(d->packageIter); + const pkgCache::VerIterator &Ver = (*d->backend->cache()->depCache()).GetCandidateVersion(d->packageIter); if(Ver.end()) return QString(); @@ -490,7 +494,7 @@ QStringList Package::archives() const { - const pkgCache::VerIterator &Ver = (*d->backend->cache()->depCache()).GetCandidateVer(d->packageIter); + const pkgCache::VerIterator &Ver = (*d->backend->cache()->depCache()).GetCandidateVersion(d->packageIter); if(Ver.end()) return QStringList(); @@ -518,20 +522,22 @@ QByteArray Package::md5Sum() const { - const pkgCache::VerIterator &ver = (*d->backend->cache()->depCache()).GetCandidateVer(d->packageIter); + const pkgCache::VerIterator &ver = (*d->backend->cache()->depCache()).GetCandidateVersion(d->packageIter); if(ver.end()) return QByteArray(); pkgRecords::Parser &rec = d->backend->records()->Lookup(ver.FileList()); - return rec.MD5Hash().c_str(); + auto MD5HashString = rec.Hashes().find("MD5Sum"); + + return MD5HashString ? QByteArray::fromStdString(MD5HashString->HashValue()) : ""; } QUrl Package::changelogUrl() const { - const pkgCache::VerIterator &ver = (*d->backend->cache()->depCache()).GetCandidateVer(d->packageIter); + const pkgCache::VerIterator &ver = (*d->backend->cache()->depCache()).GetCandidateVersion(d->packageIter); if (ver.end()) return QUrl(); @@ -603,7 +609,7 @@ QString Package::controlField(QLatin1String name) const { - const pkgCache::VerIterator &ver = (*d->backend->cache()->depCache()).GetCandidateVer(d->packageIter); + const pkgCache::VerIterator &ver = (*d->backend->cache()->depCache()).GetCandidateVersion(d->packageIter); if (ver.end()) { return QString(); } @@ -716,8 +722,8 @@ { // Make deep copies of toStdString(), since otherwise they would // go out of scope when we call c_str() - string s1 = v1.toStdString(); - string s2 = v2.toStdString(); + std::string s1 = v1.toStdString(); + std::string s2 = v2.toStdString(); const char *a = s1.c_str(); const char *b = s2.c_str(); @@ -1006,7 +1012,7 @@ { QStringList recommends; - const pkgCache::VerIterator &Ver = (*d->backend->cache()->depCache()).GetCandidateVer(d->packageIter); + const pkgCache::VerIterator &Ver = (*d->backend->cache()->depCache()).GetCandidateVersion(d->packageIter); if (Ver.end()) { return recommends; @@ -1032,7 +1038,7 @@ { QStringList suggests; - const pkgCache::VerIterator &Ver = (*d->backend->cache()->depCache()).GetCandidateVer(d->packageIter); + const pkgCache::VerIterator &Ver = (*d->backend->cache()->depCache()).GetCandidateVersion(d->packageIter); if (Ver.end()) { return suggests; @@ -1058,7 +1064,7 @@ { QStringList enhances; - const pkgCache::VerIterator &Ver = (*d->backend->cache()->depCache()).GetCandidateVer(d->packageIter); + const pkgCache::VerIterator &Ver = (*d->backend->cache()->depCache()).GetCandidateVersion(d->packageIter); if (Ver.end()) { return enhances; @@ -1096,7 +1102,7 @@ QList Package::brokenReason() const { - const pkgCache::VerIterator &Ver = (*d->backend->cache()->depCache()).GetCandidateVer(d->packageIter); + const pkgCache::VerIterator &Ver = (*d->backend->cache()->depCache()).GetCandidateVersion(d->packageIter); QList reasons; // check if there is actually something to install @@ -1171,7 +1177,7 @@ bool Package::isTrusted() const { - const pkgCache::VerIterator &Ver = (*d->backend->cache()->depCache()).GetCandidateVer(d->packageIter); + const pkgCache::VerIterator &Ver = (*d->backend->cache()->depCache()).GetCandidateVersion(d->packageIter); if (!Ver) return false; diff --git a/src/worker/aptworker.cpp b/src/worker/aptworker.cpp --- a/src/worker/aptworker.cpp +++ b/src/worker/aptworker.cpp @@ -37,6 +37,11 @@ #include #include #include +#include +#include +#include +#include +#include #include // System includes @@ -299,15 +304,14 @@ acquire->setTransaction(m_trans); // Initialize fetcher with our progress watcher - pkgAcquire fetcher; - fetcher.Setup(acquire); + pkgAcquire fetcher(acquire); // Fetch the lists. if (!ListUpdate(*acquire, *m_cache->GetSourceList())) { if (!m_trans->isCancelled()) { m_trans->setError(QApt::FetchError); - string message; + std::string message; while(_error->PopMessage(message)) m_trans->setErrorDetails(m_trans->errorDetails() + QString::fromStdString(message)); @@ -417,7 +421,7 @@ { // We've failed to mark the packages m_trans->setError(QApt::MarkingError); - string message; + std::string message; if (_error->PopMessage(message)) m_trans->setErrorDetails(QString::fromStdString(message)); @@ -430,9 +434,9 @@ void AptWorker::upgradeSystem() { if (m_trans->safeUpgrade()) - pkgAllUpgrade(*m_cache); + APT::Upgrade::Upgrade(*m_cache, APT::Upgrade::FORBID_REMOVE_PACKAGES | APT::Upgrade::FORBID_INSTALL_NEW_PACKAGES); else - pkgDistUpgrade(*m_cache); + APT::Upgrade::Upgrade(*m_cache, APT::Upgrade::ALLOW_EVERYTHING); commitChanges(); } @@ -443,8 +447,7 @@ WorkerAcquire *acquire = new WorkerAcquire(this, 15, 50); acquire->setTransaction(m_trans); - pkgAcquire fetcher; - fetcher.Setup(acquire); + pkgAcquire fetcher(acquire); pkgPackageManager *packageManager; packageManager = _system->CreatePM(*m_cache); @@ -462,7 +465,7 @@ double FetchPBytes = fetcher.PartialPresent(); struct statvfs Buf; - string OutputDir = _config->FindDir("Dir::Cache::Archives"); + std::string OutputDir = _config->FindDir("Dir::Cache::Archives"); if (statvfs(OutputDir.c_str(),&Buf) != 0) { m_trans->setError(QApt::DiskSpaceError); delete acquire; @@ -570,8 +573,7 @@ WorkerAcquire *acquire = new WorkerAcquire(this, 15, 100); acquire->setTransaction(m_trans); - pkgAcquire fetcher; - fetcher.Setup(acquire); + pkgAcquire fetcher(acquire); pkgIndexFile *index; @@ -581,7 +583,7 @@ if (!iter) continue; // Package not found - pkgCache::VerIterator ver = (*m_cache)->GetCandidateVer(iter); + pkgCache::VerIterator ver = (*m_cache)->GetCandidateVersion(iter); if (!ver || !ver.Downloadable() || !ver.Arch()) continue; // Virtual package or not downloadable or broken @@ -594,8 +596,8 @@ if (!m_cache->GetSourceList()->FindIndex(vf.File(), index)) continue; - string fileName = rec.FileName(); - string MD5sum = rec.MD5Hash(); + std::string fileName = rec.FileName(); + auto hashes = rec.Hashes(); if (fileName.empty()) { m_trans->setError(QApt::NotFoundError); @@ -606,7 +608,7 @@ new pkgAcqFile(&fetcher, index->ArchiveURI(fileName), - MD5sum, + hashes, ver->Size, index->ArchiveInfo(ver), ver.ParentPkg().Name(), diff --git a/src/worker/workeracquire.h b/src/worker/workeracquire.h --- a/src/worker/workeracquire.h +++ b/src/worker/workeracquire.h @@ -41,7 +41,7 @@ void Done(pkgAcquire::ItemDesc &Itm); void Fail(pkgAcquire::ItemDesc &Itm); void Stop(); - bool MediaChange(string Media, string Drive); + bool MediaChange(std::string Media, std::string Drive); bool Pulse(pkgAcquire *Owner); diff --git a/src/worker/workeracquire.cpp b/src/worker/workeracquire.cpp --- a/src/worker/workeracquire.cpp +++ b/src/worker/workeracquire.cpp @@ -35,6 +35,8 @@ #include "aptworker.h" #include "transaction.h" +#include + using namespace std; WorkerAcquire::WorkerAcquire(QObject *parent, int begin, int end) @@ -151,7 +153,11 @@ continue; } +#if APT_PKG_ABI >= 590 + (*iter->CurrentItem).Owner->PartialSize = iter->CurrentItem->CurrentSize; +#else (*iter->CurrentItem).Owner->PartialSize = iter->CurrentSize; +#endif updateStatus(*iter->CurrentItem); } @@ -227,8 +233,8 @@ if (downloadStatus == QApt::DoneState && errorMsg.size()) message = errorMsg; - else if (Itm.Owner->Mode) - message = QString::fromUtf8(Itm.Owner->Mode); + else if (!Itm.Owner->ActiveSubprocess.empty()) + message = QString::fromStdString(Itm.Owner->ActiveSubprocess); QApt::DownloadProgress dp(URI, downloadStatus, shortDesc, fileSize, fetchedSize, message); diff --git a/src/worker/workerinstallprogress.cpp b/src/worker/workerinstallprogress.cpp --- a/src/worker/workerinstallprogress.cpp +++ b/src/worker/workerinstallprogress.cpp @@ -27,13 +27,15 @@ #include #include +#include #include #include #include #include #include #include +#include #include #include @@ -107,7 +109,8 @@ // close pipe we don't need close(readFromChildFD[0]); - res = pm->DoInstallPostFork(readFromChildFD[1]); + APT::Progress::PackageManagerProgressFd progress(readFromChildFD[1]); + res = pm->DoInstallPostFork(&progress); // dump errors into cerr (pass it to the parent process) _error->DumpErrors(); diff --git a/utils/qapt-deb-installer/DebInstaller.cpp b/utils/qapt-deb-installer/DebInstaller.cpp --- a/utils/qapt-deb-installer/DebInstaller.cpp +++ b/utils/qapt-deb-installer/DebInstaller.cpp @@ -335,8 +335,8 @@ continue; } - string pkgVer = pkg->version().toStdString(); - string depVer = info.packageVersion().toStdString(); + std::string pkgVer = pkg->version().toStdString(); + std::string depVer = info.packageVersion().toStdString(); ok = _system->VS->CheckDep(pkgVer.c_str(), info.relationType(), @@ -359,7 +359,7 @@ QApt::Package *DebInstaller::checkBreaksSystem() { QApt::PackageList systemPackages = m_backend->availablePackages(); - string debVer = m_debFile->version().toStdString(); + std::string debVer = m_debFile->version().toStdString(); foreach (QApt::Package *pkg, systemPackages) { if (!pkg->isInstalled()) { @@ -373,7 +373,7 @@ continue; } - string depVer = dep.packageVersion().toStdString(); + std::string depVer = dep.packageVersion().toStdString(); if (!_system->VS->CheckDep(debVer.c_str(), dep.relationType(), depVer.c_str())) { @@ -390,7 +390,7 @@ continue; } - string conflictVer = conflict.packageVersion().toStdString(); + std::string conflictVer = conflict.packageVersion().toStdString(); if (_system->VS->CheckDep(debVer.c_str(), conflict.relationType(), @@ -419,11 +419,11 @@ continue; } - string debVersion = dep.packageVersion().toStdString(); + std::string debVersion = dep.packageVersion().toStdString(); // If we're installed, see if we already satisfy the dependency if (pkg->isInstalled()) { - string pkgVersion = pkg->installedVersion().toStdString(); + std::string pkgVersion = pkg->installedVersion().toStdString(); if (_system->VS->CheckDep(pkgVersion.c_str(), dep.relationType(), @@ -434,7 +434,7 @@ } // else check if cand ver will satisfy, then mark - string candVersion = pkg->availableVersion().toStdString(); + std::string candVersion = pkg->availableVersion().toStdString(); if (!_system->VS->CheckDep(candVersion.c_str(), dep.relationType(),