From: Michael Vogt Date: Tue, 8 Oct 2013 17:59:04 +0000 (+0200) Subject: Merge remote-tracking branch 'mvo/feature/upgrade-with-new' into debian/sid X-Git-Tag: 0.9.12~11 X-Git-Url: https://git.saurik.com/apt.git/commitdiff_plain/649d3c5b7df830a67ad946921233da349c13a826?hp=-c Merge remote-tracking branch 'mvo/feature/upgrade-with-new' into debian/sid --- 649d3c5b7df830a67ad946921233da349c13a826 diff --combined apt-private/private-cmndline.cc index 5124ac157,121d72ede..8ba6629a8 --- a/apt-private/private-cmndline.cc +++ b/apt-private/private-cmndline.cc @@@ -62,12 -62,8 +62,12 @@@ bool addArgumentsAPTCache(std::vector #include - +#include #include #include #include @@@ -62,11 -62,9 +62,11 @@@ #include #include +#include +#include + #include #include -#include #include #include #include @@@ -78,6 -76,7 +78,6 @@@ #include #include #include -#include #include #include @@@ -85,8 -84,11 +85,8 @@@ #include /*}}}*/ - using namespace std; - - // TryToInstallBuildDep - Try to install a single package /*{{{*/ // --------------------------------------------------------------------- /* This used to be inlined in DoInstall, but with the advent of regex package @@@ -525,7 -527,7 +525,7 @@@ bool DoDownload(CommandLine &CmdL CacheFile Cache; if (Cache.ReadOnlyOpen() == false) return false; - + APT::CacheSetHelper helper(c0out); APT::VersionList verset = APT::VersionList::FromCommandLine(Cache, CmdL.FileList + 1, APT::VersionList::CANDIDATE, helper); @@@ -533,57 -535,67 +533,57 @@@ if (verset.empty() == true) return false; + AcqTextStatus Stat(ScreenWidth, _config->FindI("quiet", 0)); pkgAcquire Fetcher; - AcqTextStatus Stat(ScreenWidth, _config->FindI("quiet",0)); - if (_config->FindB("APT::Get::Print-URIs") == false) - Fetcher.Setup(&Stat); + if (Fetcher.Setup(&Stat) == false) + return false; pkgRecords Recs(Cache); pkgSourceList *SrcList = Cache.GetSourceList(); - bool gotAll = true; - for (APT::VersionList::const_iterator Ver = verset.begin(); - Ver != verset.end(); - ++Ver) + // reuse the usual acquire methods for deb files, but don't drop them into + // the usual directories - keep everything in the current directory + std::vector storefile(verset.size()); + std::string const cwd = SafeGetCWD(); + _config->Set("Dir::Cache::Archives", cwd); + int i = 0; + for (APT::VersionList::const_iterator Ver = verset.begin(); + Ver != verset.end(); ++Ver, ++i) { - string descr; - // get the right version - pkgCache::PkgIterator Pkg = Ver.ParentPkg(); - pkgRecords::Parser &rec=Recs.Lookup(Ver.FileList()); - pkgCache::VerFileIterator Vf = Ver.FileList(); - if (Vf.end() == true) - { - _error->Error("Can not find VerFile for %s in version %s", Pkg.FullName().c_str(), Ver.VerStr()); - gotAll = false; - continue; - } - pkgCache::PkgFileIterator F = Vf.File(); - pkgIndexFile *index; - if(SrcList->FindIndex(F, index) == false) - { - _error->Error(_("Can't find a source to download version '%s' of '%s'"), Ver.VerStr(), Pkg.FullName().c_str()); - gotAll = false; - continue; - } - string uri = index->ArchiveURI(rec.FileName()); - strprintf(descr, _("Downloading %s %s"), Pkg.Name(), Ver.VerStr()); - // get the most appropriate hash - HashString hash; - if (rec.SHA512Hash() != "") - hash = HashString("sha512", rec.SHA512Hash()); - else if (rec.SHA256Hash() != "") - hash = HashString("sha256", rec.SHA256Hash()); - else if (rec.SHA1Hash() != "") - hash = HashString("sha1", rec.SHA1Hash()); - else if (rec.MD5Hash() != "") - hash = HashString("md5", rec.MD5Hash()); - // get the file - new pkgAcqFile(&Fetcher, uri, hash.toStr(), (*Ver)->Size, descr, Pkg.Name(), "."); + pkgAcquire::Item *I = new pkgAcqArchive(&Fetcher, SrcList, &Recs, *Ver, storefile[i]); + std::string const filename = cwd + flNotDir(storefile[i]); + storefile[i].assign(filename); + I->DestFile.assign(filename); } - if (gotAll == false) - return false; // Just print out the uris and exit if the --print-uris flag was used if (_config->FindB("APT::Get::Print-URIs") == true) { pkgAcquire::UriIterator I = Fetcher.UriBegin(); for (; I != Fetcher.UriEnd(); ++I) - cout << '\'' << I->URI << "' " << flNotDir(I->Owner->DestFile) << ' ' << + cout << '\'' << I->URI << "' " << flNotDir(I->Owner->DestFile) << ' ' << I->Owner->FileSize << ' ' << I->Owner->HashSum() << endl; return true; } - return (Fetcher.Run() == pkgAcquire::Continue); + if (_error->PendingError() == true || CheckAuth(Fetcher, false) == false) + return false; + + bool Failed = false; + if (AcquireRun(Fetcher, 0, &Failed, NULL) == false) + return false; + + // copy files in local sources to the current directory + for (pkgAcquire::ItemIterator I = Fetcher.ItemsBegin(); I != Fetcher.ItemsEnd(); ++I) + if ((*I)->Local == true && (*I)->Status == pkgAcquire::Item::StatDone) + { + std::string const filename = cwd + flNotDir((*I)->DestFile); + std::ifstream src((*I)->DestFile.c_str(), std::ios::binary); + std::ofstream dst(filename.c_str(), std::ios::binary); + dst << src.rdbuf(); + } + + return Failed == false; } /*}}}*/ // DoCheck - Perform the check operation /*{{{*/ @@@ -803,10 -815,27 +803,10 @@@ bool DoSource(CommandLine &CmdL delete[] Dsc; return true; } - - // Run it - if (Fetcher.Run() == pkgAcquire::Failed) - { - delete[] Dsc; - return false; - } - // Print error messages + // Run it bool Failed = false; - for (pkgAcquire::ItemIterator I = Fetcher.ItemsBegin(); I != Fetcher.ItemsEnd(); ++I) - { - if ((*I)->Status == pkgAcquire::Item::StatDone && - (*I)->Complete == true) - continue; - - fprintf(stderr,_("Failed to fetch %s %s\n"),(*I)->DescURI().c_str(), - (*I)->ErrorText.c_str()); - Failed = true; - } - if (Failed == true) + if (AcquireRun(Fetcher, 0, &Failed, NULL) == false || Failed == true) { delete[] Dsc; return _error->Error(_("Failed to fetch some archives.")); @@@ -1596,14 -1625,15 +1596,14 @@@ void SigWinch(int #endif } /*}}}*/ - -bool DoUpgrade(CommandLine &CmdL) +bool DoUpgrade(CommandLine &CmdL) /*{{{*/ { - if (_config->FindB("APT::Get::UpgradeAllowNew", false) == true) + if (_config->FindB("APT::Get::Upgrade-Allow-New", false) == true) return DoUpgradeWithAllowNewPackages(CmdL); else return DoUpgradeNoNewPackages(CmdL); } - + /*}}}*/ int main(int argc,const char *argv[]) /*{{{*/ { CommandLine::Dispatch Cmds[] = {{"update",&DoUpdate}, diff --combined doc/apt-get.8.xml index 18a559c0b,6ccd9e5ec..4c050ec03 --- a/doc/apt-get.8.xml +++ b/doc/apt-get.8.xml @@@ -389,6 -389,18 +389,18 @@@ Configuration Item: APT::Ignore-Hold. + + Allow installing new packages when used in + conjunction with upgrade. This is useful if + the update of a installed package requires new dependencies to be + installed. Instead of holding the package back upgrade + will upgrade the package and install the new dependencies. Note that + upgrade with this option will never remove packages, + only allow adding new ones. + Configuration Item: APT::Get::Upgrade-Allow-New. + + + Do not upgrade packages; when used in conjunction with install, no-upgrade will prevent packages on the command line @@@ -508,15 -520,7 +520,15 @@@ This is useful for tools like pbuilder. Configuration Item: APT::Get::AllowUnauthenticated. - + + + Show user friendly progress information in the + terminal window when packages are installed, upgraded or + removed. For a machine parsable version of this data see + README.progress-reporting in the apt doc directory. + DpkgPM::Progress. + + &apt-commonoptions;