]> git.saurik.com Git - apt.git/commitdiff
Merge branch 'debian/sid' into bugfix/bts731738-fancy-progess
authorMichael Vogt <mvo@debian.org>
Fri, 27 Dec 2013 23:31:01 +0000 (00:31 +0100)
committerMichael Vogt <mvo@debian.org>
Fri, 27 Dec 2013 23:31:01 +0000 (00:31 +0100)
Conflicts:
apt-pkg/install-progress.cc

1  2 
apt-pkg/deb/dpkgpm.cc
apt-pkg/install-progress.cc

diff --combined apt-pkg/deb/dpkgpm.cc
index b9f839e828f91bc9bf75afe2c684c3a7ade1dbc3,0d73733d54d3e8370b5df9f368d10d802e3081c2..14ce133cfefd5b2a2810e0780b6a48fc31e7d3ac
@@@ -44,6 -44,7 +44,7 @@@
  #include <unistd.h>
  #include <sys/ioctl.h>
  #include <pty.h>
+ #include <stdio.h>
  
  #include <apti18n.h>
                                                                        /*}}}*/
@@@ -596,7 -597,7 +597,7 @@@ void pkgDPkgPM::ProcessDpkgStatusLine(c
        errors look like this:
        'status: /var/cache/apt/archives/krecipes_0.8.1-0ubuntu1_i386.deb : error : trying to overwrite `/usr/share/doc/kde/HTML/en/krecipes/krectip.png', which is also in package krecipes-data 
        and conffile-prompt like this
-       'status: conffile-prompt: conffile : 'current-conffile' 'new-conffile' useredited distedited
+       'status:/etc/compiz.conf/compiz.conf :  conffile-prompt: 'current-conffile' 'new-conffile' useredited distedited
     */
     if (prefix == "status")
     {
           WriteApportReport(list[1].c_str(), list[3].c_str());
           return;
        }
-       else if(action == "conffile")
+       else if(action == "conffile-prompt")
        {
           d->progress->ConffilePrompt(list[1], PackagesDone, PackagesTotal,
                                       list[3]);
@@@ -1036,7 -1037,10 +1037,10 @@@ void pkgDPkgPM::StartPtyMagic(
     if (tcgetattr(STDOUT_FILENO, &d->tt) == 0)
     {
         ioctl(1, TIOCGWINSZ, (char *)&win);
-        if (openpty(&d->master, &d->slave, NULL, &d->tt, &win) < 0)
+        if (_config->FindB("Dpkg::Use-Pty", true) == false)
+        {
+            d->master = d->slave = -1;
+        } else if (openpty(&d->master, &d->slave, NULL, &d->tt, &win) < 0)
         {
             _error->Errno("openpty", _("Can not write log (%s)"), _("Is /dev/pts mounted?"));
             d->master = d->slave = -1;
@@@ -1182,7 -1186,7 +1186,7 @@@ bool pkgDPkgPM::GoNoABIBreak(APT::Progr
     StartPtyMagic();
  
     // Tell the progress that its starting and fork dpkg 
 -   d->progress->Start();
 +   d->progress->Start(d->master);
  
     // this loop is runs once per dpkg operation
     vector<Item>::const_iterator I = List.begin();
index 0e093a5117cbf358fbe77d638661f8f2aac9ca38,0caf62b6101ae94ea2dea4484f21753ecff140fa..fe065da4ff328bca61d6b439bddcaeb77207a7bd
@@@ -9,7 -9,7 +9,8 @@@
  #include <sys/ioctl.h>
  #include <sstream>
  #include <fcntl.h>
 +#include <algorithm>
+ #include <stdio.h>
  
  namespace APT {
  namespace Progress {
@@@ -222,47 -222,17 +223,47 @@@ bool PackageManagerProgressDeb822Fd::St
     return true;
  }
  
 +
 +PackageManagerFancy::PackageManagerFancy()
 +   : child_pty(-1)
 +{
 +   // setup terminal size
 +   old_SIGWINCH = signal(SIGWINCH, PackageManagerFancy::staticSIGWINCH);
 +   instances.push_back(this);
 +}
 +std::vector<PackageManagerFancy*> PackageManagerFancy::instances;
 +
 +PackageManagerFancy::~PackageManagerFancy()
 +{
 +   instances.erase(find(instances.begin(), instances.end(), this));
 +   signal(SIGWINCH, old_SIGWINCH);
 +}
 +
 +void PackageManagerFancy::staticSIGWINCH(int signum)
 +{
 +   std::vector<PackageManagerFancy *>::const_iterator I;
 +   for(I = instances.begin(); I != instances.end(); I++)
 +      (*I)->HandleSIGWINCH(signum);
 +}
 +
  int PackageManagerFancy::GetNumberTerminalRows()
  {
     struct winsize win;
 +   // FIXME: get from "child_pty" instead?
     if(ioctl(STDOUT_FILENO, TIOCGWINSZ, (char *)&win) != 0)
        return -1;
 +
 +   if(_config->FindB("Debug::InstallProgress::Fancy", false) == true)
 +      std::cerr << "GetNumberTerminalRows: " << win.ws_row << std::endl;
     
     return win.ws_row;
  }
  
  void PackageManagerFancy::SetupTerminalScrollArea(int nr_rows)
  {
 +     if(_config->FindB("Debug::InstallProgress::Fancy", false) == true)
 +        std::cerr << "SetupTerminalScrollArea: " << nr_rows << std::endl;
 +
       // scroll down a bit to avoid visual glitch when the screen
       // area shrinks by one row
       std::cout << "\n";
       std::cout << "\033[s";
           
       // set scroll region (this will place the cursor in the top left)
 -     std::cout << "\033[1;" << nr_rows - 1 << "r";
 +     std::cout << "\033[0;" << nr_rows - 1 << "r";
              
       // restore cursor but ensure its inside the scrolling area
       std::cout << "\033[u";
       static const char *move_cursor_up = "\033[1A";
       std::cout << move_cursor_up;
  
 -     // setup env for (hopefully!) ncurses
 -     string s;
 -     strprintf(s, "%i", nr_rows);
 -     setenv("LINES", s.c_str(), 1);
 -
 +     // ensure its flushed
       std::flush(std::cout);
 -}
  
 -PackageManagerFancy::PackageManagerFancy()
 -{
 -   // setup terminal size
 -   old_SIGWINCH = signal(SIGWINCH, HandleSIGWINCH);
 -}
 -
 -PackageManagerFancy::~PackageManagerFancy()
 -{
 -   signal(SIGWINCH, old_SIGWINCH);
 +     // setup tty size to ensure xterm/linux console are working properly too
 +     // see bug #731738
 +     struct winsize win;
 +     ioctl(child_pty, TIOCGWINSZ, (char *)&win);
 +     win.ws_row = nr_rows - 1;
 +     ioctl(child_pty, TIOCSWINSZ, (char *)&win);
  }
  
  void PackageManagerFancy::HandleSIGWINCH(int)
     SetupTerminalScrollArea(nr_terminal_rows);
  }
  
 -void PackageManagerFancy::Start()
 +void PackageManagerFancy::Start(int a_child_pty)
  {
 +   child_pty = a_child_pty;
     int nr_terminal_rows = GetNumberTerminalRows();
     if (nr_terminal_rows > 0)
        SetupTerminalScrollArea(nr_terminal_rows);
@@@ -314,7 -291,6 +315,7 @@@ void PackageManagerFancy::Stop(
        static const char* clear_screen_below_cursor = "\033[J";
        std::cout << clear_screen_below_cursor;
     }
 +   child_pty = -1;
  }
  
  bool PackageManagerFancy::StatusChanged(std::string PackageName,