Browse Source

prevent C++ locale number formatting in text APIs

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
tags/debian/1.3_exp2
David Kalnischkies 5 years ago
parent
commit
b58e2c7c56
15 changed files with 98 additions and 127 deletions
  1. +5
    -5
      apt-pkg/acquire-method.cc
  2. +3
    -7
      apt-pkg/acquire.cc
  3. +1
    -1
      apt-pkg/contrib/strutl.cc
  4. +1
    -1
      apt-pkg/deb/debindexfile.cc
  5. +34
    -55
      apt-pkg/install-progress.cc
  6. +1
    -1
      apt-private/private-install.cc
  7. +2
    -2
      apt-private/private-source.cc
  8. +2
    -2
      apt-private/private-update.cc
  9. +1
    -1
      cmdline/apt-helper.cc
  10. +3
    -3
      ftparchive/writer.cc
  11. +2
    -2
      methods/http.cc
  12. +1
    -1
      methods/server.cc
  13. +3
    -7
      test/integration/test-apt-download-progress
  14. +34
    -34
      test/integration/test-apt-progress-fd
  15. +5
    -5
      test/integration/test-apt-progress-fd-deb822

+ 5
- 5
apt-pkg/acquire-method.cc View File

@@ -145,13 +145,13 @@ void pkgAcqMethod::URIStart(FetchResult &Res)
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)
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";
@@ -184,7 +184,7 @@ void pkgAcqMethod::URIDone(FetchResult &Res, FetchResult *Alt)
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";
@@ -202,7 +202,7 @@ void pkgAcqMethod::URIDone(FetchResult &Res, FetchResult *Alt)
}

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";
@@ -213,7 +213,7 @@ void pkgAcqMethod::URIDone(FetchResult &Res, FetchResult *Alt)
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";


+ 3
- 7
apt-pkg/acquire.cc View File

@@ -1258,13 +1258,9 @@ bool pkgAcquireStatus::Pulse(pkgAcquire *Owner)
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());
}

return true;


+ 1
- 1
apt-pkg/contrib/strutl.cc View File

@@ -1653,7 +1653,7 @@ URI::operator string()
Res << Host;

if (Port != 0)
Res << ':' << Port;
Res << ':' << std::to_string(Port);
}

if (Path.empty() == false)


+ 1
- 1
apt-pkg/deb/debindexfile.cc View File

@@ -194,7 +194,7 @@ bool debDebPkgFileIndex::GetContent(std::ostream &content, std::string const &de
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 {


+ 34
- 55
apt-pkg/install-progress.cc View File

@@ -87,12 +87,10 @@ void PackageManagerProgressFd::StartDpkg()
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()
@@ -104,12 +102,10 @@ void PackageManagerProgressFd::Error(std::string PackageName,
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,
@@ -117,12 +113,10 @@ void PackageManagerProgressFd::ConffilePrompt(std::string PackageName,
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));
}


@@ -135,12 +129,10 @@ bool PackageManagerProgressFd::StatusChanged(std::string PackageName,
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
@@ -171,12 +163,10 @@ void PackageManagerProgressDeb822Fd::StartDpkg()
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()
@@ -188,13 +178,10 @@ void PackageManagerProgressDeb822Fd::Error(std::string PackageName,
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,
@@ -202,13 +189,10 @@ void PackageManagerProgressDeb822Fd::ConffilePrompt(std::string PackageName,
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));
}


@@ -220,15 +204,10 @@ bool PackageManagerProgressDeb822Fd::StatusChanged(std::string PackageName,
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));
return true;
}

@@ -289,7 +268,7 @@ void PackageManagerFancy::SetupTerminalScrollArea(int nr_rows)
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";
@@ -390,7 +369,7 @@ bool PackageManagerFancy::DrawStatusLine()

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


+ 1
- 1
apt-private/private-install.cc View File

@@ -257,7 +257,7 @@ bool InstallPackages(CacheFile &Cache,bool ShwKept,bool Ask, bool Safety)
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;
return true;
}



+ 2
- 2
apt-private/private-source.cc View File

@@ -478,8 +478,8 @@ bool DoSource(CommandLine &CmdL)
{
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;
return true;
}



+ 2
- 2
apt-private/private-update.cc View File

@@ -58,8 +58,8 @@ bool DoUpdate(CommandLine &CmdL)
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;
}
return true;
}


+ 1
- 1
cmdline/apt-helper.cc View File

@@ -102,7 +102,7 @@ static bool DoSrvLookup(CommandLine &CmdL) /*{{{*/
_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);
}
return true;
}


+ 3
- 3
ftparchive/writer.cc View File

@@ -623,12 +623,12 @@ SourcesWriter::SourcesWriter(FileFd * const GivenOutput, string const &DB, strin
// 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;
out << "\n " << Hash->HashValue() << " " << Size << " " << FileName
out << "\n " << Hash->HashValue() << " " << std::to_string(Size) << " " << FileName
<< "\n " << Tags.FindS(FieldName);
return out.str();
}
@@ -802,7 +802,7 @@ bool SourcesWriter::DoPackage(string FileName)
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());
}



+ 2
- 2
methods/http.cc View File

@@ -708,7 +708,7 @@ void HttpMethod::SendReq(FetchItem *Itm)
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";

@@ -717,7 +717,7 @@ void HttpMethod::SendReq(FetchItem *Itm)
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";



+ 1
- 1
methods/server.cc View File

@@ -130,7 +130,7 @@ bool ServerState::HeaderLine(string Line)
{
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"));


+ 3
- 7
test/integration/test-apt-download-progress View File

@@ -11,13 +11,9 @@ setupenvironment
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


+ 34
- 34
test/integration/test-apt-progress-fd View File

@@ -15,15 +15,15 @@ setupaptarchive
# 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: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'
@@ -31,15 +31,15 @@ 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
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: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'
@@ -47,15 +47,15 @@ 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
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: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'
@@ -63,25 +63,25 @@ pmstatus:dpkg-exec:83.3333:Running dpkg'
# 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
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: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'


+ 5
- 5
test/integration/test-apt-progress-fd-deb822 View File

@@ -17,12 +17,12 @@ exec 3> apt-progress.log
testsuccess aptget install testing=0.1 -y -o APT::Status-deb822-Fd=3

testfileequal './apt-progress.log' 'Status: progress
Percent: 0
Percent: 0.0000
Message: Running dpkg

Status: progress
Package: testing:amd64
Percent: 0
Percent: 0.0000
Message: Installing testing (amd64)

Status: progress
@@ -37,16 +37,16 @@ Message: Unpacking testing (amd64)

Status: progress
Package: testing:amd64
Percent: 50
Percent: 50.0000
Message: Preparing to configure testing (amd64)

Status: progress
Percent: 50
Percent: 50.0000
Message: Running dpkg

Status: progress
Package: testing:amd64
Percent: 50
Percent: 50.0000
Message: Configuring testing (amd64)

Status: progress


Loading…
Cancel
Save