Explorar el Código

new quiet level -qq for apt to hide progress output

-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…
David Kalnischkies hace 10 años
padre
commit
2b0660b537

+ 1 - 1
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)
    if (Config.FindI("quiet",0) >= 1 || Config.FindB("quiet::NoUpdate", false) == true)
       NoUpdate = true;
       NoUpdate = true;
-   if (Config.FindI("quiet",0) >= 2)
+   if (Config.FindI("quiet",0) >= 2 || Config.FindB("quiet::NoProgress", false) == true)
       NoDisplay = true;
       NoDisplay = true;
 }
 }
 									/*}}}*/
 									/*}}}*/

+ 2 - 0
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
    // testcases use it to disable pulses without disabling other user messages
    if (Quiet == 0 && _config->FindB("quiet::NoUpdate", false) == true)
    if (Quiet == 0 && _config->FindB("quiet::NoUpdate", false) == true)
       this->Quiet = 1;
       this->Quiet = 1;
+   if (Quiet < 2 && _config->FindB("quiet::NoProgress", false) == true)
+      this->Quiet = 2;
 }
 }
 									/*}}}*/
 									/*}}}*/
 // AcqTextStatus::Start - Downloading has started			/*{{{*/
 // AcqTextStatus::Start - Downloading has started			/*{{{*/

+ 9 - 2
apt-private/private-download.cc

@@ -10,6 +10,7 @@
 
 
 #include <apt-private/private-output.h>
 #include <apt-private/private-output.h>
 #include <apt-private/private-download.h>
 #include <apt-private/private-download.h>
+#include <apt-private/acqprogress.h>
 
 
 #include <fstream>
 #include <fstream>
 #include <string>
 #include <string>
@@ -39,8 +40,8 @@ bool CheckAuth(pkgAcquire& Fetcher, bool const PromptUser)
 
 
    return AuthPrompt(UntrustedList, PromptUser);
    return AuthPrompt(UntrustedList, PromptUser);
 }
 }
-
-bool AuthPrompt(std::vector<std::string> const &UntrustedList, bool const PromptUser)
+									/*}}}*/
+bool AuthPrompt(std::vector<std::string> const &UntrustedList, bool const PromptUser)/*{{{*/
 {
 {
    ShowList(c2out,_("WARNING: The following packages cannot be authenticated!"), UntrustedList,
    ShowList(c2out,_("WARNING: The following packages cannot be authenticated!"), UntrustedList,
 	 [](std::string const&) { return true; },
 	 [](std::string const&) { return true; },
@@ -148,3 +149,9 @@ bool CheckFreeSpaceBeforeDownload(std::string const &Dir, unsigned long long Fet
    return true;
    return true;
 }
 }
 									/*}}}*/
 									/*}}}*/
+
+aptAcquireWithTextStatus::aptAcquireWithTextStatus() : pkgAcquire::pkgAcquire(),
+   Stat(std::cout, ScreenWidth, _config->FindI("quiet",0))
+{
+   SetLog(&Stat);
+}

+ 10 - 2
apt-private/private-download.h

@@ -1,13 +1,14 @@
 #ifndef APT_PRIVATE_DOWNLOAD_H
 #ifndef APT_PRIVATE_DOWNLOAD_H
 #define APT_PRIVATE_DOWNLOAD_H
 #define APT_PRIVATE_DOWNLOAD_H
 
 
+#include <apt-pkg/acquire.h>
 #include <apt-pkg/macros.h>
 #include <apt-pkg/macros.h>
 
 
+#include <apt-private/acqprogress.h>
+
 #include <string>
 #include <string>
 #include <vector>
 #include <vector>
 
 
-class pkgAcquire;
-
 // Check if all files in the fetcher are authenticated
 // Check if all files in the fetcher are authenticated
 APT_PUBLIC bool CheckAuth(pkgAcquire& Fetcher, bool const PromptUser);
 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);
 APT_PUBLIC bool CheckFreeSpaceBeforeDownload(std::string const &Dir, unsigned long long FetchBytes);
 
 
+class APT_PUBLIC aptAcquireWithTextStatus : public pkgAcquire
+{
+   AcqTextStatus Stat;
+public:
+   aptAcquireWithTextStatus();
+};
+
 #endif
 #endif

+ 1 - 2
apt-private/private-install.cc

@@ -134,8 +134,7 @@ bool InstallPackages(CacheFile &Cache,bool ShwKept,bool Ask, bool Safety)
       return false;
       return false;
 
 
    // Create the download object
    // 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)
    if (_config->FindB("APT::Get::Print-URIs", false) == true)
    {
    {
       // force a hashsum for compatibility reasons
       // force a hashsum for compatibility reasons

+ 7 - 8
apt-private/private-update.cc

@@ -13,6 +13,7 @@
 
 
 #include <apt-private/acqprogress.h>
 #include <apt-private/acqprogress.h>
 #include <apt-private/private-cachefile.h>
 #include <apt-private/private-cachefile.h>
+#include <apt-private/private-download.h>
 #include <apt-private/private-output.h>
 #include <apt-private/private-output.h>
 #include <apt-private/private-update.h>
 #include <apt-private/private-update.h>
 
 
@@ -37,20 +38,15 @@ bool DoUpdate(CommandLine &CmdL)
       return false;
       return false;
    pkgSourceList *List = Cache.GetSourceList();
    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
    // Just print out the uris an exit if the --print-uris flag was used
    if (_config->FindB("APT::Get::Print-URIs") == true)
    if (_config->FindB("APT::Get::Print-URIs") == true)
    {
    {
       // force a hashsum for compatibility reasons
       // force a hashsum for compatibility reasons
       _config->CndSet("Acquire::ForceHash", "md5sum");
       _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)
       // (GetAll=true)
+      aptAcquireWithTextStatus Fetcher;
       if (List->GetIndexes(&Fetcher,true) == false)
       if (List->GetIndexes(&Fetcher,true) == false)
 	 return false;
 	 return false;
 
 
@@ -70,7 +66,10 @@ bool DoUpdate(CommandLine &CmdL)
 
 
    // do the work
    // do the work
    if (_config->FindB("APT::Get::Download",true) == true)
    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.
    // Rebuild the cache.
    if (_config->FindB("pkgCacheFile::Generate", true) == true)
    if (_config->FindB("pkgCacheFile::Generate", true) == true)

+ 3 - 10
cmdline/apt-get.cc

@@ -595,14 +595,12 @@ static bool DoDownload(CommandLine &CmdL)
    if (verset.empty() == true)
    if (verset.empty() == true)
       return false;
       return false;
 
 
-   AcqTextStatus Stat(std::cout, ScreenWidth,_config->FindI("quiet",0));
-   pkgAcquire Fetcher(&Stat);
-
    pkgRecords Recs(Cache);
    pkgRecords Recs(Cache);
    pkgSourceList *SrcList = Cache.GetSourceList();
    pkgSourceList *SrcList = Cache.GetSourceList();
 
 
    // reuse the usual acquire methods for deb files, but don't drop them into
    // reuse the usual acquire methods for deb files, but don't drop them into
    // the usual directories - keep everything in the current directory
    // the usual directories - keep everything in the current directory
+   aptAcquireWithTextStatus Fetcher;
    std::vector<std::string> storefile(verset.size());
    std::vector<std::string> storefile(verset.size());
    std::string const cwd = SafeGetCWD();
    std::string const cwd = SafeGetCWD();
    _config->Set("Dir::Cache::Archives", cwd);
    _config->Set("Dir::Cache::Archives", cwd);
@@ -693,10 +691,6 @@ static bool DoSource(CommandLine &CmdL)
    if (_error->PendingError() == true)
    if (_error->PendingError() == true)
       return false;
       return false;
 
 
-   // Create the download object
-   AcqTextStatus Stat(std::cout, ScreenWidth,_config->FindI("quiet",0));
-   pkgAcquire Fetcher(&Stat);
-
    std::unique_ptr<DscFile[]> Dsc(new DscFile[CmdL.FileSize()]);
    std::unique_ptr<DscFile[]> Dsc(new DscFile[CmdL.FileSize()]);
    
    
    // insert all downloaded uris into this set to avoid downloading them
    // 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);
    bool const dscOnly = _config->FindB("APT::Get::Dsc-Only", false);
 
 
    // Load the requestd sources into the fetcher
    // Load the requestd sources into the fetcher
+   aptAcquireWithTextStatus Fetcher;
    unsigned J = 0;
    unsigned J = 0;
    std::vector<std::string> UntrustedList;
    std::vector<std::string> UntrustedList;
    for (const char **I = CmdL.FileList + 1; *I != 0; I++, J++)
    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);
 		CmdL.FileList + 1, APT::CacheSetHelper::CANDIDATE, helper);
    if (verset.empty() == true)
    if (verset.empty() == true)
       return false;
       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 downOnly = _config->FindB("APT::Get::Download-Only", false);
    bool const printOnly = _config->FindB("APT::Get::Print-URIs", false);
    bool const printOnly = _config->FindB("APT::Get::Print-URIs", false);
 
 
+   aptAcquireWithTextStatus Fetcher;
    for (APT::VersionList::const_iterator Ver = verset.begin();
    for (APT::VersionList::const_iterator Ver = verset.begin();
         Ver != verset.end();
         Ver != verset.end();
         ++Ver)
         ++Ver)

+ 1 - 3
cmdline/apt-helper.cc

@@ -50,9 +50,7 @@ static bool DoDownloadFile(CommandLine &CmdL)
    if (CmdL.FileSize() <= 2)
    if (CmdL.FileSize() <= 2)
       return _error->Error(_("Must specify at least one pair url/filename"));
       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;
    size_t fileind = 0;
    std::vector<std::string> targetfiles;
    std::vector<std::string> targetfiles;
    while (fileind + 2 <= CmdL.FileSize())
    while (fileind + 2 <= CmdL.FileSize())

+ 12 - 6
cmdline/apt.cc

@@ -39,10 +39,10 @@
 
 
 static bool ShowHelp(CommandLine &, CommandLine::DispatchWithHelp const * Cmds)
 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
    // FIXME: generate from CommandLine
-   c1out <<
+   std::cout <<
     _("Usage: apt [options] command\n"
     _("Usage: apt [options] command\n"
       "\n"
       "\n"
       "CLI for apt.\n")
       "CLI for apt.\n")
@@ -87,13 +87,19 @@ int main(int argc, const char *argv[])					/*{{{*/
       {nullptr, nullptr, nullptr}
       {nullptr, nullptr, nullptr}
    };
    };
 
 
-   // FIXME: Those ignore commandline configuration like -q
-   InitSignals();
-   InitOutput();
-
    CommandLine CmdL;
    CommandLine CmdL;
    ParseCommandLine(CmdL, Cmds, "apt", &_config, &_system, argc, argv, ShowHelp);
    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);
    CheckIfCalledByScript(argc, argv);
    CheckIfSimulateMode(CmdL);
    CheckIfSimulateMode(CmdL);
 
 

+ 2 - 2
test/integration/test-apt-cli-update

@@ -15,8 +15,8 @@ setupaptarchive --no-update
 
 
 testfailuremsg 'E: The update command takes no arguments' apt update arguments
 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
 cp dpkg.status rootdir/var/lib/dpkg/status
 insertinstalledpackage 'foo' 'all' '2.0'
 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

+ 1 - 1
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()
 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
     testsuccess aptget install -y -s foo
     testfailure aptget install -y evil
     testfailure aptget install -y evil
     testsuccess aptget source foo --print-uris
     testsuccess aptget source foo --print-uris

+ 2 - 2
test/integration/test-apt-update-rollback

@@ -38,7 +38,7 @@ start_with_good_inrelease() {
     create_fresh_archive
     create_fresh_archive
     testsuccess aptget update
     testsuccess aptget update
     listcurrentlistsdirectory > lists.before
     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() {
 test_inrelease_to_new_inrelease() {
@@ -48,7 +48,7 @@ test_inrelease_to_new_inrelease() {
     add_new_package '+1hour'
     add_new_package '+1hour'
     testsuccess aptget update -o Debug::Acquire::Transaction=1
     testsuccess aptget update -o Debug::Acquire::Transaction=1
     testsuccessequal 'new/unstable 1.0 all
     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() {
 test_inrelease_to_broken_hash_reverts_all() {