Setting the C++ locale via std::locale::global(std::locale("")); which
would otherwise default to the default C locale (aka: unaffected by
setlocale) effects the formatting of numeric types in IO streams, which
for output for humans is perfectly sensible, but breaks our many text
interfaces used and parsed by us and others without expecting the
numbers to be formatted.
Closes: #825396
15 files changed:
std::cout << "200 URI Start\n"
<< "URI: " << Queue->Uri << "\n";
if (Res.Size != 0)
std::cout << "200 URI Start\n"
<< "URI: " << Queue->Uri << "\n";
if (Res.Size != 0)
- std::cout << "Size: " << Res.Size << "\n";
+ std::cout << "Size: " << std::to_string(Res.Size) << "\n";
if (Res.LastModified != 0)
std::cout << "Last-Modified: " << TimeRFC1123(Res.LastModified) << "\n";
if (Res.ResumePoint != 0)
if (Res.LastModified != 0)
std::cout << "Last-Modified: " << TimeRFC1123(Res.LastModified) << "\n";
if (Res.ResumePoint != 0)
- std::cout << "Resume-Point: " << Res.ResumePoint << "\n";
+ std::cout << "Resume-Point: " << std::to_string(Res.ResumePoint) << "\n";
if (UsedMirror.empty() == false)
std::cout << "UsedMirror: " << UsedMirror << "\n";
if (UsedMirror.empty() == false)
std::cout << "UsedMirror: " << UsedMirror << "\n";
std::cout << "Filename: " << Res.Filename << "\n";
if (Res.Size != 0)
std::cout << "Filename: " << Res.Filename << "\n";
if (Res.Size != 0)
- std::cout << "Size: " << Res.Size << "\n";
+ std::cout << "Size: " << std::to_string(Res.Size) << "\n";
if (Res.LastModified != 0)
std::cout << "Last-Modified: " << TimeRFC1123(Res.LastModified) << "\n";
if (Res.LastModified != 0)
std::cout << "Last-Modified: " << TimeRFC1123(Res.LastModified) << "\n";
}
if (Res.ResumePoint != 0)
}
if (Res.ResumePoint != 0)
- std::cout << "Resume-Point: " << Res.ResumePoint << "\n";
+ std::cout << "Resume-Point: " << std::to_string(Res.ResumePoint) << "\n";
if (Res.IMSHit == true)
std::cout << "IMS-Hit: true\n";
if (Res.IMSHit == true)
std::cout << "IMS-Hit: true\n";
std::cout << "Alt-Filename: " << Alt->Filename << "\n";
if (Alt->Size != 0)
std::cout << "Alt-Filename: " << Alt->Filename << "\n";
if (Alt->Size != 0)
- std::cout << "Alt-Size: " << Alt->Size << "\n";
+ std::cout << "Alt-Size: " << std::to_string(Alt->Size) << "\n";
if (Alt->LastModified != 0)
std::cout << "Alt-Last-Modified: " << TimeRFC1123(Alt->LastModified) << "\n";
if (Alt->LastModified != 0)
std::cout << "Alt-Last-Modified: " << TimeRFC1123(Alt->LastModified) << "\n";
snprintf(msg,sizeof(msg), _("Retrieving file %li of %li"), i, TotalItems);
// build the status str
snprintf(msg,sizeof(msg), _("Retrieving file %li of %li"), i, TotalItems);
// build the status str
- status << "dlstatus:" << i
- << ":" << std::setprecision(3) << Percent
- << ":" << msg
- << endl;
-
- std::string const dlstatus = status.str();
- FileFd::Write(fd, dlstatus.c_str(), dlstatus.size());
+ std::string dlstatus;
+ strprintf(dlstatus, "dlstatus:%ld:%.4f:%s\n", i, Percent, msg);
+ FileFd::Write(fd, dlstatus.data(), dlstatus.size());
Res << Host;
if (Port != 0)
Res << Host;
if (Port != 0)
+ Res << ':' << std::to_string(Port);
}
if (Path.empty() == false)
}
if (Path.empty() == false)
return _error->Error("Popen failed");
content << "Filename: " << debfile << "\n";
return _error->Error("Popen failed");
content << "Filename: " << debfile << "\n";
- content << "Size: " << Buf.st_size << "\n";
+ content << "Size: " << std::to_string(Buf.st_size) << "\n";
bool first_line_seen = false;
char buffer[1024];
do {
bool first_line_seen = false;
char buffer[1024];
do {
fcntl(OutStatusFd,F_SETFD,FD_CLOEXEC);
// send status information that we are about to fork dpkg
fcntl(OutStatusFd,F_SETFD,FD_CLOEXEC);
// send status information that we are about to fork dpkg
- std::ostringstream status;
- status << "pmstatus:dpkg-exec:"
- << (StepsDone/float(StepsTotal)*100.0)
- << ":" << _("Running dpkg")
- << std::endl;
- WriteToStatusFd(status.str());
+ std::string status;
+ strprintf(status, "pmstatus:dpkg-exec:%.4f:%s\n",
+ (StepsDone/float(StepsTotal)*100.0), _("Running dpkg"));
+ WriteToStatusFd(std::move(status));
}
APT_CONST void PackageManagerProgressFd::Stop()
}
APT_CONST void PackageManagerProgressFd::Stop()
unsigned int TotalSteps,
std::string ErrorMessage)
{
unsigned int TotalSteps,
std::string ErrorMessage)
{
- std::ostringstream status;
- status << "pmerror:" << PackageName
- << ":" << (StepsDone/float(TotalSteps)*100.0)
- << ":" << ErrorMessage
- << std::endl;
- WriteToStatusFd(status.str());
+ std::string status;
+ strprintf(status, "pmerror:%s:%.4f:%s\n", PackageName.c_str(),
+ (StepsDone/float(TotalSteps)*100.0), ErrorMessage.c_str());
+ WriteToStatusFd(std::move(status));
}
void PackageManagerProgressFd::ConffilePrompt(std::string PackageName,
}
void PackageManagerProgressFd::ConffilePrompt(std::string PackageName,
unsigned int TotalSteps,
std::string ConfMessage)
{
unsigned int TotalSteps,
std::string ConfMessage)
{
- std::ostringstream status;
- status << "pmconffile:" << PackageName
- << ":" << (StepsDone/float(TotalSteps)*100.0)
- << ":" << ConfMessage
- << std::endl;
- WriteToStatusFd(status.str());
+ std::string status;
+ strprintf(status, "pmconffile:%s:%.4f:%s\n", PackageName.c_str(),
+ (StepsDone/float(TotalSteps)*100.0), ConfMessage.c_str());
+ WriteToStatusFd(std::move(status));
StepsTotal = xTotalSteps;
// build the status str
StepsTotal = xTotalSteps;
// build the status str
- std::ostringstream status;
- status << "pmstatus:" << StringSplit(PackageName, ":")[0]
- << ":" << (StepsDone/float(StepsTotal)*100.0)
- << ":" << pkg_action
- << std::endl;
- WriteToStatusFd(status.str());
+ std::string status;
+ strprintf(status, "pmstatus:%s:%.4f:%s\n", StringSplit(PackageName, ":")[0].c_str(),
+ (StepsDone/float(StepsTotal)*100.0), pkg_action.c_str());
+ WriteToStatusFd(std::move(status));
if(_config->FindB("Debug::APT::Progress::PackageManagerFd", false) == true)
std::cerr << "progress: " << PackageName << " " << xStepsDone
if(_config->FindB("Debug::APT::Progress::PackageManagerFd", false) == true)
std::cerr << "progress: " << PackageName << " " << xStepsDone
fcntl(OutStatusFd,F_SETFD,FD_CLOEXEC);
// send status information that we are about to fork dpkg
fcntl(OutStatusFd,F_SETFD,FD_CLOEXEC);
// send status information that we are about to fork dpkg
- std::ostringstream status;
- status << "Status: " << "progress" << std::endl
- << "Percent: " << (StepsDone/float(StepsTotal)*100.0) << std::endl
- << "Message: " << _("Running dpkg") << std::endl
- << std::endl;
- WriteToStatusFd(status.str());
+ std::string status;
+ strprintf(status, "Status: %s\nPercent: %.4f\nMessage: %s\n\n", "progress",
+ (StepsDone/float(StepsTotal)*100.0), _("Running dpkg"));
+ WriteToStatusFd(std::move(status));
}
APT_CONST void PackageManagerProgressDeb822Fd::Stop()
}
APT_CONST void PackageManagerProgressDeb822Fd::Stop()
unsigned int TotalSteps,
std::string ErrorMessage)
{
unsigned int TotalSteps,
std::string ErrorMessage)
{
- std::ostringstream status;
- status << "Status: " << "Error" << std::endl
- << "Package:" << PackageName << std::endl
- << "Percent: " << (StepsDone/float(TotalSteps)*100.0) << std::endl
- << "Message: " << ErrorMessage << std::endl
- << std::endl;
- WriteToStatusFd(status.str());
+ std::string status;
+ strprintf(status, "Status: %s\nPackage: %s\nPercent: %.4f\nMessage: %s\n\n", "Error",
+ PackageName.c_str(), (StepsDone/float(TotalSteps)*100.0), ErrorMessage.c_str());
+ WriteToStatusFd(std::move(status));
}
void PackageManagerProgressDeb822Fd::ConffilePrompt(std::string PackageName,
}
void PackageManagerProgressDeb822Fd::ConffilePrompt(std::string PackageName,
unsigned int TotalSteps,
std::string ConfMessage)
{
unsigned int TotalSteps,
std::string ConfMessage)
{
- std::ostringstream status;
- status << "Status: " << "ConfFile" << std::endl
- << "Package:" << PackageName << std::endl
- << "Percent: " << (StepsDone/float(TotalSteps)*100.0) << std::endl
- << "Message: " << ConfMessage << std::endl
- << std::endl;
- WriteToStatusFd(status.str());
+ std::string status;
+ strprintf(status, "Status: %s\nPackage: %s\nPercent: %.4f\nMessage: %s\n\n", "ConfFile",
+ PackageName.c_str(), (StepsDone/float(TotalSteps)*100.0), ConfMessage.c_str());
+ WriteToStatusFd(std::move(status));
StepsDone = xStepsDone;
StepsTotal = xTotalSteps;
StepsDone = xStepsDone;
StepsTotal = xTotalSteps;
- // build the status str
- std::ostringstream status;
- status << "Status: " << "progress" << std::endl
- << "Package: " << PackageName << std::endl
- << "Percent: " << (StepsDone/float(StepsTotal)*100.0) << std::endl
- << "Message: " << message << std::endl
- << std::endl;
- WriteToStatusFd(status.str());
-
+ std::string status;
+ strprintf(status, "Status: %s\nPackage: %s\nPercent: %.4f\nMessage: %s\n\n", "progress",
+ PackageName.c_str(), (StepsDone/float(StepsTotal)*100.0), message.c_str());
+ WriteToStatusFd(std::move(status));
std::cout << "\0337";
// set scroll region (this will place the cursor in the top left)
std::cout << "\0337";
// set scroll region (this will place the cursor in the top left)
- std::cout << "\033[0;" << nr_rows - 1 << "r";
+ std::cout << "\033[0;" << std::to_string(nr_rows - 1) << "r";
// restore cursor but ensure its inside the scrolling area
std::cout << "\0338";
// restore cursor but ensure its inside the scrolling area
std::cout << "\0338";
std::cout << save_cursor
// move cursor position to last row
std::cout << save_cursor
// move cursor position to last row
- << "\033[" << size.rows << ";0f"
+ << "\033[" << std::to_string(size.rows) << ";0f"
<< set_bg_color
<< set_fg_color
<< progress_str
<< set_bg_color
<< set_fg_color
<< progress_str
pkgAcquire::UriIterator I = Fetcher.UriBegin();
for (; I != Fetcher.UriEnd(); ++I)
std::cout << '\'' << I->URI << "' " << flNotDir(I->Owner->DestFile) << ' ' <<
pkgAcquire::UriIterator I = Fetcher.UriBegin();
for (; I != Fetcher.UriEnd(); ++I)
std::cout << '\'' << I->URI << "' " << flNotDir(I->Owner->DestFile) << ' ' <<
- I->Owner->FileSize << ' ' << I->Owner->HashSum() << std::endl;
+ std::to_string(I->Owner->FileSize) << ' ' << I->Owner->HashSum() << std::endl;
{
pkgAcquire::UriIterator I = Fetcher.UriBegin();
for (; I != Fetcher.UriEnd(); ++I)
{
pkgAcquire::UriIterator I = Fetcher.UriBegin();
for (; I != Fetcher.UriEnd(); ++I)
- std::cout << '\'' << I->URI << "' " << flNotDir(I->Owner->DestFile) << ' ' <<
- I->Owner->FileSize << ' ' << I->Owner->HashSum() << std::endl;
+ std::cout << '\'' << I->URI << "' " << flNotDir(I->Owner->DestFile) << ' ' <<
+ std::to_string(I->Owner->FileSize) << ' ' << I->Owner->HashSum() << std::endl;
if(compExt.empty() == false &&
APT::String::Endswith(FileName, compExt))
FileName = FileName.substr(0, FileName.size() - compExt.size() - 1);
if(compExt.empty() == false &&
APT::String::Endswith(FileName, compExt))
FileName = FileName.substr(0, FileName.size() - compExt.size() - 1);
- c1out << '\'' << I->URI << "' " << FileName << ' ' <<
- I->Owner->FileSize << ' ' << I->Owner->HashSum() << std::endl;
+ c1out << '\'' << I->URI << "' " << FileName << ' ' <<
+ std::to_string(I->Owner->FileSize) << ' ' << I->Owner->HashSum() << std::endl;
_error->Error(_("GetSrvRec failed for %s"), name.c_str());
for (SrvRec const &I : srv_records)
_error->Error(_("GetSrvRec failed for %s"), name.c_str());
for (SrvRec const &I : srv_records)
- c1out << I.target << "\t" << I.priority << "\t" << I.weight << "\t" << I.port << std::endl;
+ ioprintf(c1out, "%s\t%d\t%d\t%d\n", I.target.c_str(), I.priority, I.weight, I.port);
// SourcesWriter::DoPackage - Process a single package /*{{{*/
static std::string getDscHash(unsigned int const DoHashes,
Hashes::SupportedHashes const DoIt, pkgTagSection &Tags, char const * const FieldName,
// SourcesWriter::DoPackage - Process a single package /*{{{*/
static std::string getDscHash(unsigned int const DoHashes,
Hashes::SupportedHashes const DoIt, pkgTagSection &Tags, char const * const FieldName,
- HashString const * const Hash, unsigned long long Size, std::string FileName)
+ HashString const * const Hash, unsigned long long Size, std::string const &FileName)
{
if ((DoHashes & DoIt) != DoIt || Tags.Exists(FieldName) == false || Hash == NULL)
return "";
std::ostringstream out;
{
if ((DoHashes & DoIt) != DoIt || Tags.Exists(FieldName) == false || Hash == NULL)
return "";
std::ostringstream out;
- out << "\n " << Hash->HashValue() << " " << Size << " " << FileName
+ out << "\n " << Hash->HashValue() << " " << std::to_string(Size) << " " << FileName
<< "\n " << Tags.FindS(FieldName);
return out.str();
}
<< "\n " << Tags.FindS(FieldName);
return out.str();
}
if (Tags.Exists(fieldname) == true)
continue;
std::ostringstream streamout;
if (Tags.Exists(fieldname) == true)
continue;
std::ostringstream streamout;
- streamout << "\n " << hs->HashValue() << " " << Db.GetFileSize() << " " << ParseJnk;
+ streamout << "\n " << hs->HashValue() << " " << std::to_string(Db.GetFileSize()) << " " << ParseJnk;
out->append(streamout.str());
}
out->append(streamout.str());
}
C.f. https://tools.ietf.org/wg/httpbis/trac/ticket/158 */
Req << "GET " << requesturi << " HTTP/1.1\r\n";
if (Uri.Port != 0)
C.f. https://tools.ietf.org/wg/httpbis/trac/ticket/158 */
Req << "GET " << requesturi << " HTTP/1.1\r\n";
if (Uri.Port != 0)
- Req << "Host: " << ProperHost << ":" << Uri.Port << "\r\n";
+ Req << "Host: " << ProperHost << ":" << std::to_string(Uri.Port) << "\r\n";
else
Req << "Host: " << ProperHost << "\r\n";
else
Req << "Host: " << ProperHost << "\r\n";
Req << "Cache-Control: no-cache\r\n"
<< "Pragma: no-cache\r\n";
else if (Itm->IndexFile == true)
Req << "Cache-Control: no-cache\r\n"
<< "Pragma: no-cache\r\n";
else if (Itm->IndexFile == true)
- Req << "Cache-Control: max-age=" << _config->FindI("Acquire::http::Max-Age",0) << "\r\n";
+ Req << "Cache-Control: max-age=" << std::to_string(_config->FindI("Acquire::http::Max-Age",0)) << "\r\n";
else if (_config->FindB("Acquire::http::No-Store",false) == true)
Req << "Cache-Control: no-store\r\n";
else if (_config->FindB("Acquire::http::No-Store",false) == true)
Req << "Cache-Control: no-store\r\n";
{
Code[0] = '\0';
if (Owner != NULL && Owner->Debug == true)
{
Code[0] = '\0';
if (Owner != NULL && Owner->Debug == true)
- clog << "HTTP server doesn't give Reason-Phrase for " << Result << std::endl;
+ clog << "HTTP server doesn't give Reason-Phrase for " << std::to_string(Result) << std::endl;
}
else if (elements != 4)
return _error->Error(_("The HTTP server sent an invalid reply header"));
}
else if (elements != 4)
return _error->Error(_("The HTTP server sent an invalid reply header"));
changetohttpswebserver
assertprogress() {
changetohttpswebserver
assertprogress() {
- T="$1"
- testsuccess grep "dlstatus:1:0:Retrieving file 1 of 1" "$T"
- if ! grep -E -q "dlstatus:1:(0\..*|([1-9](\..*)?)|[1-9][0-9](\..*)?):Retrieving file 1 of 1" "$T"; then
- cat "$T"
- msgfail "Failed to detect download progress"
- fi
- testsuccess grep "dlstatus:1:100:Retrieving file 1 of 1" "$T"
+ testsuccess grep "dlstatus:1:0.0000:Retrieving file 1 of 1" "$1"
+ testsuccess grep -E "dlstatus:1:[1-9][0-9]{0,1}\.[0-9]{1,4}:Retrieving file 1 of 1" "$1"
+ testsuccess grep "dlstatus:1:100.0000:Retrieving file 1 of 1" "$1"
}
# we need to ensure the file is reasonable big so that apt has a chance to
}
# we need to ensure the file is reasonable big so that apt has a chance to
# install native
exec 3> apt-progress.log
testsuccess aptget install testing=0.1 -y -o APT::Status-Fd=3
# install native
exec 3> apt-progress.log
testsuccess aptget install testing=0.1 -y -o APT::Status-Fd=3
-testfileequal './apt-progress.log' 'dlstatus:1:0:Retrieving file 1 of 1
-dlstatus:1:100:Retrieving file 1 of 1
-pmstatus:dpkg-exec:0:Running dpkg
-pmstatus:testing:0:Installing testing (amd64)
+testfileequal './apt-progress.log' 'dlstatus:1:0.0000:Retrieving file 1 of 1
+dlstatus:1:100.0000:Retrieving file 1 of 1
+pmstatus:dpkg-exec:0.0000:Running dpkg
+pmstatus:testing:0.0000:Installing testing (amd64)
pmstatus:testing:16.6667:Preparing testing (amd64)
pmstatus:testing:33.3333:Unpacking testing (amd64)
pmstatus:testing:16.6667:Preparing testing (amd64)
pmstatus:testing:33.3333:Unpacking testing (amd64)
-pmstatus:testing:50:Preparing to configure testing (amd64)
-pmstatus:dpkg-exec:50:Running dpkg
-pmstatus:testing:50:Configuring testing (amd64)
+pmstatus:testing:50.0000:Preparing to configure testing (amd64)
+pmstatus:dpkg-exec:50.0000:Running dpkg
+pmstatus:testing:50.0000:Configuring testing (amd64)
pmstatus:testing:66.6667:Configuring testing (amd64)
pmstatus:testing:83.3333:Installed testing (amd64)
pmstatus:dpkg-exec:83.3333:Running dpkg'
pmstatus:testing:66.6667:Configuring testing (amd64)
pmstatus:testing:83.3333:Installed testing (amd64)
pmstatus:dpkg-exec:83.3333:Running dpkg'
# upgrade
exec 3> apt-progress.log
testsuccess aptget install testing=0.8.15 -y -o APT::Status-Fd=3
# upgrade
exec 3> apt-progress.log
testsuccess aptget install testing=0.8.15 -y -o APT::Status-Fd=3
-testfileequal './apt-progress.log' 'dlstatus:1:0:Retrieving file 1 of 1
-dlstatus:1:100:Retrieving file 1 of 1
-pmstatus:dpkg-exec:0:Running dpkg
-pmstatus:testing:0:Installing testing (amd64)
+testfileequal './apt-progress.log' 'dlstatus:1:0.0000:Retrieving file 1 of 1
+dlstatus:1:100.0000:Retrieving file 1 of 1
+pmstatus:dpkg-exec:0.0000:Running dpkg
+pmstatus:testing:0.0000:Installing testing (amd64)
pmstatus:testing:16.6667:Preparing testing (amd64)
pmstatus:testing:33.3333:Unpacking testing (amd64)
pmstatus:testing:16.6667:Preparing testing (amd64)
pmstatus:testing:33.3333:Unpacking testing (amd64)
-pmstatus:testing:50:Preparing to configure testing (amd64)
-pmstatus:dpkg-exec:50:Running dpkg
-pmstatus:testing:50:Configuring testing (amd64)
+pmstatus:testing:50.0000:Preparing to configure testing (amd64)
+pmstatus:dpkg-exec:50.0000:Running dpkg
+pmstatus:testing:50.0000:Configuring testing (amd64)
pmstatus:testing:66.6667:Configuring testing (amd64)
pmstatus:testing:83.3333:Installed testing (amd64)
pmstatus:dpkg-exec:83.3333:Running dpkg'
pmstatus:testing:66.6667:Configuring testing (amd64)
pmstatus:testing:83.3333:Installed testing (amd64)
pmstatus:dpkg-exec:83.3333:Running dpkg'
# reinstall
exec 3> apt-progress.log
testsuccess aptget install testing=0.8.15 --reinstall -y -o APT::Status-Fd=3
# reinstall
exec 3> apt-progress.log
testsuccess aptget install testing=0.8.15 --reinstall -y -o APT::Status-Fd=3
-testfileequal './apt-progress.log' 'dlstatus:1:0:Retrieving file 1 of 1
-dlstatus:1:100:Retrieving file 1 of 1
-pmstatus:dpkg-exec:0:Running dpkg
-pmstatus:testing:0:Installing testing (amd64)
+testfileequal './apt-progress.log' 'dlstatus:1:0.0000:Retrieving file 1 of 1
+dlstatus:1:100.0000:Retrieving file 1 of 1
+pmstatus:dpkg-exec:0.0000:Running dpkg
+pmstatus:testing:0.0000:Installing testing (amd64)
pmstatus:testing:16.6667:Preparing testing (amd64)
pmstatus:testing:33.3333:Unpacking testing (amd64)
pmstatus:testing:16.6667:Preparing testing (amd64)
pmstatus:testing:33.3333:Unpacking testing (amd64)
-pmstatus:testing:50:Preparing to configure testing (amd64)
-pmstatus:dpkg-exec:50:Running dpkg
-pmstatus:testing:50:Configuring testing (amd64)
+pmstatus:testing:50.0000:Preparing to configure testing (amd64)
+pmstatus:dpkg-exec:50.0000:Running dpkg
+pmstatus:testing:50.0000:Configuring testing (amd64)
pmstatus:testing:66.6667:Configuring testing (amd64)
pmstatus:testing:83.3333:Installed testing (amd64)
pmstatus:dpkg-exec:83.3333:Running dpkg'
pmstatus:testing:66.6667:Configuring testing (amd64)
pmstatus:testing:83.3333:Installed testing (amd64)
pmstatus:dpkg-exec:83.3333:Running dpkg'
# and remove
exec 3> apt-progress.log
testsuccess aptget remove testing -y -o APT::Status-Fd=3
# and remove
exec 3> apt-progress.log
testsuccess aptget remove testing -y -o APT::Status-Fd=3
-testfileequal './apt-progress.log' 'pmstatus:dpkg-exec:0:Running dpkg
-pmstatus:testing:0:Removing testing (amd64)
-pmstatus:testing:25:Preparing for removal of testing (amd64)
-pmstatus:testing:50:Removing testing (amd64)
-pmstatus:testing:75:Removed testing (amd64)
-pmstatus:dpkg-exec:75:Running dpkg'
+testfileequal './apt-progress.log' 'pmstatus:dpkg-exec:0.0000:Running dpkg
+pmstatus:testing:0.0000:Removing testing (amd64)
+pmstatus:testing:25.0000:Preparing for removal of testing (amd64)
+pmstatus:testing:50.0000:Removing testing (amd64)
+pmstatus:testing:75.0000:Removed testing (amd64)
+pmstatus:dpkg-exec:75.0000:Running dpkg'
# install non-native and ensure we get proper progress info
exec 3> apt-progress.log
testsuccess aptget install testing2:i386 -y -o APT::Status-Fd=3
# install non-native and ensure we get proper progress info
exec 3> apt-progress.log
testsuccess aptget install testing2:i386 -y -o APT::Status-Fd=3
-testfileequal './apt-progress.log' 'dlstatus:1:0:Retrieving file 1 of 1
-dlstatus:1:100:Retrieving file 1 of 1
-pmstatus:dpkg-exec:0:Running dpkg
-pmstatus:testing2:0:Installing testing2 (i386)
+testfileequal './apt-progress.log' 'dlstatus:1:0.0000:Retrieving file 1 of 1
+dlstatus:1:100.0000:Retrieving file 1 of 1
+pmstatus:dpkg-exec:0.0000:Running dpkg
+pmstatus:testing2:0.0000:Installing testing2 (i386)
pmstatus:testing2:16.6667:Preparing testing2 (i386)
pmstatus:testing2:33.3333:Unpacking testing2 (i386)
pmstatus:testing2:16.6667:Preparing testing2 (i386)
pmstatus:testing2:33.3333:Unpacking testing2 (i386)
-pmstatus:testing2:50:Preparing to configure testing2 (i386)
-pmstatus:dpkg-exec:50:Running dpkg
-pmstatus:testing2:50:Configuring testing2 (i386)
+pmstatus:testing2:50.0000:Preparing to configure testing2 (i386)
+pmstatus:dpkg-exec:50.0000:Running dpkg
+pmstatus:testing2:50.0000:Configuring testing2 (i386)
pmstatus:testing2:66.6667:Configuring testing2 (i386)
pmstatus:testing2:83.3333:Installed testing2 (i386)
pmstatus:dpkg-exec:83.3333:Running dpkg'
pmstatus:testing2:66.6667:Configuring testing2 (i386)
pmstatus:testing2:83.3333:Installed testing2 (i386)
pmstatus:dpkg-exec:83.3333:Running dpkg'
testsuccess aptget install testing=0.1 -y -o APT::Status-deb822-Fd=3
testfileequal './apt-progress.log' 'Status: progress
testsuccess aptget install testing=0.1 -y -o APT::Status-deb822-Fd=3
testfileequal './apt-progress.log' 'Status: progress
Message: Running dpkg
Status: progress
Package: testing:amd64
Message: Running dpkg
Status: progress
Package: testing:amd64
Message: Installing testing (amd64)
Status: progress
Message: Installing testing (amd64)
Status: progress
Status: progress
Package: testing:amd64
Status: progress
Package: testing:amd64
Message: Preparing to configure testing (amd64)
Status: progress
Message: Preparing to configure testing (amd64)
Status: progress
Message: Running dpkg
Status: progress
Package: testing:amd64
Message: Running dpkg
Status: progress
Package: testing:amd64
Message: Configuring testing (amd64)
Status: progress
Message: Configuring testing (amd64)
Status: progress