From 2b0660b537581e9e65180e4cf1a94d763fd66847 Mon Sep 17 00:00:00 2001 From: David Kalnischkies Date: Sun, 25 Oct 2015 12:35:00 +0100 Subject: new quiet level -qq for apt to hide progress output MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit -q is for logging and -qqq (old -qq) basically kills every output expect errors, so there should be a way of declaring a middleground in which the output of e.g. 'update' isn't as verbose, but still shows some things. The test framework was actually making use of by accident as it ignored the quiet level in output setup for apt before. Eventually we should figure out some better quiet levels for all tools… --- apt-pkg/contrib/progress.cc | 2 +- apt-private/acqprogress.cc | 2 ++ apt-private/private-download.cc | 11 +++++++++-- apt-private/private-download.h | 12 ++++++++++-- apt-private/private-install.cc | 3 +-- apt-private/private-update.cc | 15 +++++++-------- cmdline/apt-get.cc | 13 +++---------- cmdline/apt-helper.cc | 4 +--- cmdline/apt.cc | 18 ++++++++++++------ test/integration/test-apt-cli-update | 4 ++-- test/integration/test-apt-update-nofallback | 2 +- test/integration/test-apt-update-rollback | 4 ++-- 12 files changed, 51 insertions(+), 39 deletions(-) diff --git a/apt-pkg/contrib/progress.cc b/apt-pkg/contrib/progress.cc index 4ff4f181d..b93018154 100644 --- a/apt-pkg/contrib/progress.cc +++ b/apt-pkg/contrib/progress.cc @@ -132,7 +132,7 @@ OpTextProgress::OpTextProgress(Configuration &Config) : { if (Config.FindI("quiet",0) >= 1 || Config.FindB("quiet::NoUpdate", false) == true) NoUpdate = true; - if (Config.FindI("quiet",0) >= 2) + if (Config.FindI("quiet",0) >= 2 || Config.FindB("quiet::NoProgress", false) == true) NoDisplay = true; } /*}}}*/ diff --git a/apt-private/acqprogress.cc b/apt-private/acqprogress.cc index 62b2c13d0..dcc538a39 100644 --- a/apt-private/acqprogress.cc +++ b/apt-private/acqprogress.cc @@ -37,6 +37,8 @@ AcqTextStatus::AcqTextStatus(std::ostream &out, unsigned int &ScreenWidth,unsign // testcases use it to disable pulses without disabling other user messages if (Quiet == 0 && _config->FindB("quiet::NoUpdate", false) == true) this->Quiet = 1; + if (Quiet < 2 && _config->FindB("quiet::NoProgress", false) == true) + this->Quiet = 2; } /*}}}*/ // AcqTextStatus::Start - Downloading has started /*{{{*/ diff --git a/apt-private/private-download.cc b/apt-private/private-download.cc index 8a57ccc86..96d44b1c5 100644 --- a/apt-private/private-download.cc +++ b/apt-private/private-download.cc @@ -10,6 +10,7 @@ #include #include +#include #include #include @@ -39,8 +40,8 @@ bool CheckAuth(pkgAcquire& Fetcher, bool const PromptUser) return AuthPrompt(UntrustedList, PromptUser); } - -bool AuthPrompt(std::vector const &UntrustedList, bool const PromptUser) + /*}}}*/ +bool AuthPrompt(std::vector const &UntrustedList, bool const PromptUser)/*{{{*/ { ShowList(c2out,_("WARNING: The following packages cannot be authenticated!"), UntrustedList, [](std::string const&) { return true; }, @@ -148,3 +149,9 @@ bool CheckFreeSpaceBeforeDownload(std::string const &Dir, unsigned long long Fet return true; } /*}}}*/ + +aptAcquireWithTextStatus::aptAcquireWithTextStatus() : pkgAcquire::pkgAcquire(), + Stat(std::cout, ScreenWidth, _config->FindI("quiet",0)) +{ + SetLog(&Stat); +} diff --git a/apt-private/private-download.h b/apt-private/private-download.h index 80643e0f2..7df8f284a 100644 --- a/apt-private/private-download.h +++ b/apt-private/private-download.h @@ -1,13 +1,14 @@ #ifndef APT_PRIVATE_DOWNLOAD_H #define APT_PRIVATE_DOWNLOAD_H +#include #include +#include + #include #include -class pkgAcquire; - // Check if all files in the fetcher are authenticated APT_PUBLIC bool CheckAuth(pkgAcquire& Fetcher, bool const PromptUser); @@ -19,4 +20,11 @@ APT_PUBLIC bool AcquireRun(pkgAcquire &Fetcher, int const PulseInterval, bool * APT_PUBLIC bool CheckFreeSpaceBeforeDownload(std::string const &Dir, unsigned long long FetchBytes); +class APT_PUBLIC aptAcquireWithTextStatus : public pkgAcquire +{ + AcqTextStatus Stat; +public: + aptAcquireWithTextStatus(); +}; + #endif diff --git a/apt-private/private-install.cc b/apt-private/private-install.cc index dda5b50be..52572ed80 100644 --- a/apt-private/private-install.cc +++ b/apt-private/private-install.cc @@ -134,8 +134,7 @@ bool InstallPackages(CacheFile &Cache,bool ShwKept,bool Ask, bool Safety) return false; // Create the download object - AcqTextStatus Stat(std::cout, ScreenWidth,_config->FindI("quiet",0)); - pkgAcquire Fetcher(&Stat); + aptAcquireWithTextStatus Fetcher; if (_config->FindB("APT::Get::Print-URIs", false) == true) { // force a hashsum for compatibility reasons diff --git a/apt-private/private-update.cc b/apt-private/private-update.cc index 1323771f0..1e5d69512 100644 --- a/apt-private/private-update.cc +++ b/apt-private/private-update.cc @@ -13,6 +13,7 @@ #include #include +#include #include #include @@ -37,20 +38,15 @@ bool DoUpdate(CommandLine &CmdL) return false; pkgSourceList *List = Cache.GetSourceList(); - // Create the progress - AcqTextStatus Stat(std::cout, ScreenWidth,_config->FindI("quiet",0)); - // Just print out the uris an exit if the --print-uris flag was used if (_config->FindB("APT::Get::Print-URIs") == true) { // force a hashsum for compatibility reasons _config->CndSet("Acquire::ForceHash", "md5sum"); - // get a fetcher - pkgAcquire Fetcher(&Stat); - - // Populate it with the source selection and get all Indexes + // Populate it with the source selection and get all Indexes // (GetAll=true) + aptAcquireWithTextStatus Fetcher; if (List->GetIndexes(&Fetcher,true) == false) return false; @@ -70,7 +66,10 @@ bool DoUpdate(CommandLine &CmdL) // do the work if (_config->FindB("APT::Get::Download",true) == true) - ListUpdate(Stat, *List); + { + AcqTextStatus Stat(std::cout, ScreenWidth,_config->FindI("quiet",0)); + ListUpdate(Stat, *List); + } // Rebuild the cache. if (_config->FindB("pkgCacheFile::Generate", true) == true) diff --git a/cmdline/apt-get.cc b/cmdline/apt-get.cc index 1379c607e..2a19360c8 100644 --- a/cmdline/apt-get.cc +++ b/cmdline/apt-get.cc @@ -595,14 +595,12 @@ static bool DoDownload(CommandLine &CmdL) if (verset.empty() == true) return false; - AcqTextStatus Stat(std::cout, ScreenWidth,_config->FindI("quiet",0)); - pkgAcquire Fetcher(&Stat); - pkgRecords Recs(Cache); pkgSourceList *SrcList = Cache.GetSourceList(); // reuse the usual acquire methods for deb files, but don't drop them into // the usual directories - keep everything in the current directory + aptAcquireWithTextStatus Fetcher; std::vector storefile(verset.size()); std::string const cwd = SafeGetCWD(); _config->Set("Dir::Cache::Archives", cwd); @@ -693,10 +691,6 @@ static bool DoSource(CommandLine &CmdL) if (_error->PendingError() == true) return false; - // Create the download object - AcqTextStatus Stat(std::cout, ScreenWidth,_config->FindI("quiet",0)); - pkgAcquire Fetcher(&Stat); - std::unique_ptr Dsc(new DscFile[CmdL.FileSize()]); // insert all downloaded uris into this set to avoid downloading them @@ -711,6 +705,7 @@ static bool DoSource(CommandLine &CmdL) bool const dscOnly = _config->FindB("APT::Get::Dsc-Only", false); // Load the requestd sources into the fetcher + aptAcquireWithTextStatus Fetcher; unsigned J = 0; std::vector UntrustedList; for (const char **I = CmdL.FileList + 1; *I != 0; I++, J++) @@ -1368,13 +1363,11 @@ static bool DoChangelog(CommandLine &CmdL) CmdL.FileList + 1, APT::CacheSetHelper::CANDIDATE, helper); if (verset.empty() == true) return false; - pkgAcquire Fetcher; - AcqTextStatus Stat(std::cout, ScreenWidth,_config->FindI("quiet",0)); - Fetcher.SetLog(&Stat); bool const downOnly = _config->FindB("APT::Get::Download-Only", false); bool const printOnly = _config->FindB("APT::Get::Print-URIs", false); + aptAcquireWithTextStatus Fetcher; for (APT::VersionList::const_iterator Ver = verset.begin(); Ver != verset.end(); ++Ver) diff --git a/cmdline/apt-helper.cc b/cmdline/apt-helper.cc index ff9061dc7..186fded17 100644 --- a/cmdline/apt-helper.cc +++ b/cmdline/apt-helper.cc @@ -50,9 +50,7 @@ static bool DoDownloadFile(CommandLine &CmdL) if (CmdL.FileSize() <= 2) return _error->Error(_("Must specify at least one pair url/filename")); - AcqTextStatus Stat(std::cout, ScreenWidth,_config->FindI("quiet",0)); - pkgAcquire Fetcher(&Stat); - + aptAcquireWithTextStatus Fetcher; size_t fileind = 0; std::vector targetfiles; while (fileind + 2 <= CmdL.FileSize()) diff --git a/cmdline/apt.cc b/cmdline/apt.cc index 98e715625..eb16b561c 100644 --- a/cmdline/apt.cc +++ b/cmdline/apt.cc @@ -39,10 +39,10 @@ static bool ShowHelp(CommandLine &, CommandLine::DispatchWithHelp const * Cmds) { - ioprintf(c1out, "%s %s (%s)\n", PACKAGE, PACKAGE_VERSION, COMMON_ARCH); + ioprintf(std::cout, "%s %s (%s)\n", PACKAGE, PACKAGE_VERSION, COMMON_ARCH); // FIXME: generate from CommandLine - c1out << + std::cout << _("Usage: apt [options] command\n" "\n" "CLI for apt.\n") @@ -87,13 +87,19 @@ int main(int argc, const char *argv[]) /*{{{*/ {nullptr, nullptr, nullptr} }; - // FIXME: Those ignore commandline configuration like -q - InitSignals(); - InitOutput(); - CommandLine CmdL; ParseCommandLine(CmdL, Cmds, "apt", &_config, &_system, argc, argv, ShowHelp); + int const quiet = _config->FindI("quiet", 0); + if (quiet == 2) + { + _config->CndSet("quiet::NoProgress", true); + _config->Set("quiet", 1); + } + + InitSignals(); + InitOutput(); + CheckIfCalledByScript(argc, argv); CheckIfSimulateMode(CmdL); diff --git a/test/integration/test-apt-cli-update b/test/integration/test-apt-cli-update index dad365f7e..5d8503404 100755 --- a/test/integration/test-apt-cli-update +++ b/test/integration/test-apt-cli-update @@ -15,8 +15,8 @@ setupaptarchive --no-update testfailuremsg 'E: The update command takes no arguments' apt update arguments -testsuccessequal "1 package can be upgraded. Run 'apt list --upgradable' to see it." apt update -q +testsuccessequal "1 package can be upgraded. Run 'apt list --upgradable' to see it." apt update -qq cp dpkg.status rootdir/var/lib/dpkg/status insertinstalledpackage 'foo' 'all' '2.0' -testsuccessequal 'All packages are up to date.' apt update -q +testsuccessequal 'All packages are up to date.' apt update -qq diff --git a/test/integration/test-apt-update-nofallback b/test/integration/test-apt-update-nofallback index 1b23d4f11..a12a08ab1 100755 --- a/test/integration/test-apt-update-nofallback +++ b/test/integration/test-apt-update-nofallback @@ -42,7 +42,7 @@ N: See apt-secure(8) manpage for repository creation and user configuration deta assert_repo_is_intact() { - testsuccessequal "foo/unstable 2.0 all" apt list -q + testsuccessequal "foo/unstable 2.0 all" apt list -qq testsuccess aptget install -y -s foo testfailure aptget install -y evil testsuccess aptget source foo --print-uris diff --git a/test/integration/test-apt-update-rollback b/test/integration/test-apt-update-rollback index 12d541055..e19240206 100755 --- a/test/integration/test-apt-update-rollback +++ b/test/integration/test-apt-update-rollback @@ -38,7 +38,7 @@ start_with_good_inrelease() { create_fresh_archive testsuccess aptget update listcurrentlistsdirectory > lists.before - testsuccessequal 'old/unstable 1.0 all' apt list -q + testsuccessequal 'old/unstable 1.0 all' apt list -qq } test_inrelease_to_new_inrelease() { @@ -48,7 +48,7 @@ test_inrelease_to_new_inrelease() { add_new_package '+1hour' testsuccess aptget update -o Debug::Acquire::Transaction=1 testsuccessequal 'new/unstable 1.0 all -old/unstable 1.0 all' apt list -q +old/unstable 1.0 all' apt list -qq } test_inrelease_to_broken_hash_reverts_all() { -- cgit v1.2.3