From d3e8fbb395f57954acd7a2095f02ce530a05ec6a Mon Sep 17 00:00:00 2001 From: David Kalnischkies Date: Thu, 27 Feb 2014 01:20:53 +0100 Subject: =?UTF-8?q?warning:=20extra=20=E2=80=98;=E2=80=99=20[-Wpedantic]?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Git-Dch: Ignore Reported-By: gcc -Wpedantic --- apt-pkg/install-progress.cc | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'apt-pkg/install-progress.cc') diff --git a/apt-pkg/install-progress.cc b/apt-pkg/install-progress.cc index a3a4cc0e1..aec744360 100644 --- a/apt-pkg/install-progress.cc +++ b/apt-pkg/install-progress.cc @@ -371,5 +371,5 @@ bool PackageManagerText::StatusChanged(std::string PackageName, -}; // namespace progress -}; // namespace apt +} // namespace progress +} // namespace apt -- cgit v1.2.3 From 655122418d714f342b5d9789f45f8035f3fe8b9a Mon Sep 17 00:00:00 2001 From: David Kalnischkies Date: Sat, 1 Mar 2014 15:11:42 +0100 Subject: =?UTF-8?q?warning:=20unused=20parameter=20=E2=80=98foo=E2=80=99?= =?UTF-8?q?=20[-Wunused-parameter]?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Reported-By: gcc -Wunused-parameter Git-Dch: Ignore --- apt-pkg/install-progress.cc | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'apt-pkg/install-progress.cc') diff --git a/apt-pkg/install-progress.cc b/apt-pkg/install-progress.cc index aec744360..657330b60 100644 --- a/apt-pkg/install-progress.cc +++ b/apt-pkg/install-progress.cc @@ -41,10 +41,10 @@ PackageManager* PackageManagerProgressFactory() return progress; } -bool PackageManager::StatusChanged(std::string PackageName, +bool PackageManager::StatusChanged(std::string /*PackageName*/, unsigned int StepsDone, unsigned int TotalSteps, - std::string HumanReadableAction) + std::string /*HumanReadableAction*/) { int reporting_steps = _config->FindI("DpkgPM::Reporting-Steps", 1); percentage = StepsDone/(float)TotalSteps * 100.0; -- cgit v1.2.3 From 453b82a388013e522b3a1b9fcd6ed0810dab1f4f Mon Sep 17 00:00:00 2001 From: David Kalnischkies Date: Wed, 5 Mar 2014 22:11:25 +0100 Subject: cleanup headers and especially #includes everywhere Beside being a bit cleaner it hopefully also resolves oddball problems I have with high levels of parallel jobs. Git-Dch: Ignore Reported-By: iwyu (include-what-you-use) --- apt-pkg/install-progress.cc | 30 ++++++++++++++++++------------ 1 file changed, 18 insertions(+), 12 deletions(-) (limited to 'apt-pkg/install-progress.cc') diff --git a/apt-pkg/install-progress.cc b/apt-pkg/install-progress.cc index 657330b60..6f43e0bc0 100644 --- a/apt-pkg/install-progress.cc +++ b/apt-pkg/install-progress.cc @@ -1,17 +1,23 @@ +#include + #include #include #include #include -#include - -#include +#include +#include +#include +#include +#include #include #include #include #include #include +#include + namespace APT { namespace Progress { @@ -329,15 +335,15 @@ bool PackageManagerFancy::StatusChanged(std::string PackageName, int row = GetNumberTerminalRows(); - static string save_cursor = "\033[s"; - static string restore_cursor = "\033[u"; - - static string set_bg_color = "\033[42m"; // green - static string set_fg_color = "\033[30m"; // black - - static string restore_bg = "\033[49m"; - static string restore_fg = "\033[39m"; - + static std::string save_cursor = "\033[s"; + static std::string restore_cursor = "\033[u"; + + static std::string set_bg_color = "\033[42m"; // green + static std::string set_fg_color = "\033[30m"; // black + + static std::string restore_bg = "\033[49m"; + static std::string restore_fg = "\033[39m"; + std::cout << save_cursor // move cursor position to last row << "\033[" << row << ";0f" -- cgit v1.2.3 From a02db58fd50ef7fc2f0284852c6b3f98e458a232 Mon Sep 17 00:00:00 2001 From: David Kalnischkies Date: Thu, 6 Mar 2014 00:33:10 +0100 Subject: follow method attribute suggestions by gcc Git-Dch: Ignore Reported-By: gcc -Wsuggest-attribute={pure,const,noreturn} --- apt-pkg/install-progress.cc | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'apt-pkg/install-progress.cc') diff --git a/apt-pkg/install-progress.cc b/apt-pkg/install-progress.cc index 6f43e0bc0..dfe4fb18c 100644 --- a/apt-pkg/install-progress.cc +++ b/apt-pkg/install-progress.cc @@ -93,7 +93,7 @@ void PackageManagerProgressFd::StartDpkg() WriteToStatusFd(status.str()); } -void PackageManagerProgressFd::Stop() +APT_CONST void PackageManagerProgressFd::Stop() { } @@ -176,7 +176,7 @@ void PackageManagerProgressDeb822Fd::StartDpkg() WriteToStatusFd(status.str()); } -void PackageManagerProgressDeb822Fd::Stop() +APT_CONST void PackageManagerProgressDeb822Fd::Stop() { } -- cgit v1.2.3 From c34d1202e991a6f0ab5bed82c2e1ca0d155038b1 Mon Sep 17 00:00:00 2001 From: Michael Vogt Date: Thu, 27 Mar 2014 06:48:57 +0100 Subject: make fancy-progress fg/bg color configurable Add two new options: Dpkg::Progress-Fancy::Progress-{fg,bg} that allows customizing the colors in the dpkg fancy progress output. --- apt-pkg/install-progress.cc | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) (limited to 'apt-pkg/install-progress.cc') diff --git a/apt-pkg/install-progress.cc b/apt-pkg/install-progress.cc index dfe4fb18c..96334b006 100644 --- a/apt-pkg/install-progress.cc +++ b/apt-pkg/install-progress.cc @@ -338,8 +338,12 @@ bool PackageManagerFancy::StatusChanged(std::string PackageName, static std::string save_cursor = "\033[s"; static std::string restore_cursor = "\033[u"; - static std::string set_bg_color = "\033[42m"; // green - static std::string set_fg_color = "\033[30m"; // black + // green + static std::string set_bg_color = DeQuoteString( + _config->Find("Dpkg::Progress-Fancy::Progress-fg", "%1b[42m")); + // black + static std::string set_fg_color = DeQuoteString( + _config->Find("Dpkg::Progress-Fancy::Progress-bg", "%1b[30m")); static std::string restore_bg = "\033[49m"; static std::string restore_fg = "\033[39m"; -- cgit v1.2.3 From fa211e2d3b0305cfdd184cdba9750259f6d9c98e Mon Sep 17 00:00:00 2001 From: Michael Vogt Date: Thu, 27 Mar 2014 07:56:42 +0100 Subject: Add progressbar to "Dpkg::Progress-Fancy" A text progressbar is now displayed in the Dpkg::Progress-Fancy mode. It can be turned off via the apt option Dpkg::Progress-Fancy::Progress-Bar=false --- apt-pkg/install-progress.cc | 63 +++++++++++++++++++++++++++++++++++++-------- 1 file changed, 52 insertions(+), 11 deletions(-) (limited to 'apt-pkg/install-progress.cc') diff --git a/apt-pkg/install-progress.cc b/apt-pkg/install-progress.cc index 96334b006..8bb587f67 100644 --- a/apt-pkg/install-progress.cc +++ b/apt-pkg/install-progress.cc @@ -252,17 +252,22 @@ void PackageManagerFancy::staticSIGWINCH(int signum) (*I)->HandleSIGWINCH(signum); } -int PackageManagerFancy::GetNumberTerminalRows() +PackageManagerFancy::TermSize +PackageManagerFancy::GetTerminalSize() { struct winsize win; + PackageManagerFancy::TermSize s; + // FIXME: get from "child_pty" instead? if(ioctl(STDOUT_FILENO, TIOCGWINSZ, (char *)&win) != 0) - return -1; + return s; if(_config->FindB("Debug::InstallProgress::Fancy", false) == true) - std::cerr << "GetNumberTerminalRows: " << win.ws_row << std::endl; - - return win.ws_row; + std::cerr << "GetTerminalSize: " << win.ws_row << std::endl; + + s.rows = win.ws_row; + s.columns = win.ws_col; + return s; } void PackageManagerFancy::SetupTerminalScrollArea(int nr_rows) @@ -298,21 +303,21 @@ void PackageManagerFancy::SetupTerminalScrollArea(int nr_rows) void PackageManagerFancy::HandleSIGWINCH(int) { - int nr_terminal_rows = GetNumberTerminalRows(); + int nr_terminal_rows = GetTerminalSize().rows; SetupTerminalScrollArea(nr_terminal_rows); } void PackageManagerFancy::Start(int a_child_pty) { child_pty = a_child_pty; - int nr_terminal_rows = GetNumberTerminalRows(); + int nr_terminal_rows = GetTerminalSize().rows; if (nr_terminal_rows > 0) SetupTerminalScrollArea(nr_terminal_rows); } void PackageManagerFancy::Stop() { - int nr_terminal_rows = GetNumberTerminalRows(); + int nr_terminal_rows = GetTerminalSize().rows; if (nr_terminal_rows > 0) { SetupTerminalScrollArea(nr_terminal_rows + 1); @@ -324,6 +329,26 @@ void PackageManagerFancy::Stop() child_pty = -1; } +std::string +PackageManagerFancy::GetTextProgressStr(float Percent, int OutputSize) +{ + std::string output; + int i; + + // should we raise a exception here instead? + if (Percent < 0.0 || Percent > 1.0 || OutputSize < 3) + return output; + + int BarSize = OutputSize - 2; // bar without the leading "[" and trailing "]" + output += "["; + for(i=0; i < BarSize*Percent; i++) + output += "#"; + for (/*nothing*/; i < BarSize; i++) + output += "."; + output += "]"; + return output; +} + bool PackageManagerFancy::StatusChanged(std::string PackageName, unsigned int StepsDone, unsigned int TotalSteps, @@ -333,7 +358,7 @@ bool PackageManagerFancy::StatusChanged(std::string PackageName, HumanReadableAction)) return false; - int row = GetNumberTerminalRows(); + PackageManagerFancy::TermSize size = GetTerminalSize(); static std::string save_cursor = "\033[s"; static std::string restore_cursor = "\033[u"; @@ -350,14 +375,30 @@ bool PackageManagerFancy::StatusChanged(std::string PackageName, std::cout << save_cursor // move cursor position to last row - << "\033[" << row << ";0f" + << "\033[" << size.rows << ";0f" << set_bg_color << set_fg_color << progress_str - << restore_cursor << restore_bg << restore_fg; std::flush(std::cout); + + // draw text progress bar + if (_config->FindB("Dpkg::Progress-Fancy::Progress-Bar", true)) + { + int padding = 4; + float progressbar_size = size.columns - padding - progress_str.size(); + float current_percent = (float)StepsDone/(float)TotalSteps; + std::cout << " " + << GetTextProgressStr(current_percent, progressbar_size) + << " "; + std::flush(std::cout); + } + + // restore + std::cout << restore_cursor; + std::flush(std::cout); + last_reported_progress = percentage; return true; -- cgit v1.2.3