summaryrefslogtreecommitdiff
path: root/apt-pkg/contrib
diff options
context:
space:
mode:
authorJulian Andres Klode <julian.klode@canonical.com>2020-03-06 13:10:04 +0100
committerJulian Andres Klode <julian.klode@canonical.com>2020-03-06 13:14:37 +0100
commit1b81f6bd13bb31e59da3f53cfdc7caab43abf887 (patch)
treecf511b030725b1a7bb97f3c402ff5df773b84382 /apt-pkg/contrib
parent68a83a64cd424385b613f58e23c03e262d840b91 (diff)
Show absolute time while waiting for lock instead of %, rework message
Showing a percentage for a timeout is pretty non-standard. Rework the progress class so it can show an absolute progress (currently hardcoded to use seconds as a unit). If there is a timeout (aka if it's not the maximum long long unsigned -1llu), then show the timeout, otherwise just count up seconds, e.g. Waiting for cache lock: Could not get lock /var/lib/dpkg/lock-frontend. It is held by process 33842 (apt)... 1/120s or Waiting for cache lock: Could not get lock /var/lib/dpkg/lock-frontend. It is held by process 33842 (apt)... 1s Also improve the error message to use "Waiting for cache lock: %s" instead of "... (%s)", as having multiple sentences inside parenthesis is super weird, as is having two closing parens. We pass the information via _config, as that's reasonably easy and avoids ABI hackage. It also provides an interesting debugging tool for other kinds of progress.
Diffstat (limited to 'apt-pkg/contrib')
-rw-r--r--apt-pkg/contrib/progress.cc16
-rw-r--r--apt-pkg/contrib/progress.h1
2 files changed, 13 insertions, 4 deletions
diff --git a/apt-pkg/contrib/progress.cc b/apt-pkg/contrib/progress.cc
index 971198270..03f88d4ce 100644
--- a/apt-pkg/contrib/progress.cc
+++ b/apt-pkg/contrib/progress.cc
@@ -91,7 +91,10 @@ void OpProgress::SubProgress(unsigned long long SubTotal,const string &Op,
an update the display would be swamped and the system much slower.
This provides an upper bound on the update rate. */
bool OpProgress::CheckChange(float Interval)
-{
+{
+ // For absolute progress, we assume every call is relevant.
+ if (_config->FindB("APT::Internal::OpProgress::Absolute", false))
+ return true;
// New major progress indication
if (Op != LastOp)
{
@@ -199,9 +202,14 @@ void OpTextProgress::Update()
Write(S);
cout << endl;
}
-
- // Print the spinner
- snprintf(S,sizeof(S),_("%c%s... %u%%"),'\r',Op.c_str(),(unsigned int)Percent);
+
+ // Print the spinner. Absolute progress shows us a time progress.
+ if (_config->FindB("APT::Internal::OpProgress::Absolute", false) && Total != -1llu)
+ snprintf(S, sizeof(S), _("%c%s... %llu/%llus"), '\r', Op.c_str(), Current, Total);
+ else if (_config->FindB("APT::Internal::OpProgress::Absolute", false))
+ snprintf(S, sizeof(S), _("%c%s... %llus"), '\r', Op.c_str(), Current);
+ else
+ snprintf(S, sizeof(S), _("%c%s... %u%%"), '\r', Op.c_str(), (unsigned int)Percent);
Write(S);
OldOp = Op;
diff --git a/apt-pkg/contrib/progress.h b/apt-pkg/contrib/progress.h
index 4d118ee99..d6a698af3 100644
--- a/apt-pkg/contrib/progress.h
+++ b/apt-pkg/contrib/progress.h
@@ -28,6 +28,7 @@
class Configuration;
class APT_PUBLIC OpProgress
{
+ friend class OpTextProgress;
unsigned long long Current;
unsigned long long Total;
unsigned long long Size;