]> git.saurik.com Git - apt.git/commitdiff
format multiline errors properly in acquire progress
authorDavid Kalnischkies <david@kalnischkies.de>
Sat, 12 Mar 2016 17:05:55 +0000 (18:05 +0100)
committerDavid Kalnischkies <david@kalnischkies.de>
Mon, 25 Apr 2016 13:35:52 +0000 (15:35 +0200)
Together with the GlobalError change this allows us to add errors
spanning multiple lines, just that we control GlobalError while the
acquire progress is dealt with potentially by individual clients which
might or might not need to be adapted.

This isn't critical through as it either just works as expected anyhow
or is a minor styling thing (after all, all this commit does it add two
spaces to indent the lines a bit…).

apt-private/acqprogress.cc

index a33d51c7178d60d631586c03f768d2c46ed74dcf..c182fa02dfd4ebd9379d8595656976e61c4773e1 100644 (file)
@@ -121,24 +121,40 @@ void AcqTextStatus::Fail(pkgAcquire::ItemDesc &Itm)
    AssignItemID(Itm);
    clearLastLine();
 
+   bool ShowErrorText = true;
    if (Itm.Owner->Status == pkgAcquire::Item::StatDone || Itm.Owner->Status == pkgAcquire::Item::StatIdle)
    {
       // TRANSLATOR: Very short word to be displayed for files in 'apt-get update'
       // which failed to download, but the error is ignored (compare "Err:")
       ioprintf(out, _("Ign:%lu %s"), Itm.Owner->ID, Itm.Description.c_str());
-      if (Itm.Owner->ErrorText.empty() == false &&
-           _config->FindB("Acquire::Progress::Ignore::ShowErrorText", false) == true)
-        out << std::endl << "  " << Itm.Owner->ErrorText;
-      out << std::endl;
+      if (Itm.Owner->ErrorText.empty() ||
+           _config->FindB("Acquire::Progress::Ignore::ShowErrorText", false) == false)
+        ShowErrorText = false;
    }
    else
    {
       // TRANSLATOR: Very short word to be displayed for files in 'apt-get update'
       // which failed to download and the error is critical (compare "Ign:")
       ioprintf(out, _("Err:%lu %s"), Itm.Owner->ID, Itm.Description.c_str());
-      out << std::endl << "  " << Itm.Owner->ErrorText << std::endl;
    }
 
+   if (ShowErrorText)
+   {
+      std::string::size_type line_start = 0;
+      std::string::size_type line_end;
+      while ((line_end = Itm.Owner->ErrorText.find_first_of("\n\r", line_start)) != std::string::npos) {
+        out << std::endl << "  " << Itm.Owner->ErrorText.substr(line_start, line_end - line_start);
+        line_start = Itm.Owner->ErrorText.find_first_not_of("\n\r", line_end + 1);
+        if (line_start == std::string::npos)
+           break;
+      }
+      if (line_start == 0)
+        out << std::endl << "  " << Itm.Owner->ErrorText;
+      else if (line_start != std::string::npos)
+        out << std::endl << "  " << Itm.Owner->ErrorText.substr(line_start);
+   }
+   out << std::endl;
+
    Update = true;
 }
                                                                        /*}}}*/