Bug 13877 - apt-shell crashes if one answers "no" to commit
: apt-shell crashes if one answers "no" to commit
Status: CLOSED FIXED
: Sisyphus
(All bugs in Sisyphus/apt)
: unstable
: all Linux
: P2 normal
Assigned To:
:
:
:
:
:
  Show dependency tree
 
Reported: 2008-01-05 08:20 by
Modified: 2014-01-09 22:44 (History)


Attachments


Note

You need to log in before you can comment on or make changes to this bug.


Description From 2008-01-05 08:20:11
apt-0.5.15lorg2-alt18

Looks like https://bugzilla.altlinux.org/show_bug.cgi?id=4707#c1 .
Steps to Reproduce:
Valid for any package:

# ftp_proxy= http_proxy= apt-shell 
Reading Package Lists... Done
Building Dependency Tree... Done
Welcome to the APT shell. Type "help" for more information.
apt> install libnotify-devel 
apt> commit 
The following NEW packages will be installed:
  libnotify-devel
0 upgraded, 1 newly installed, 0 removed and 1234 not upgraded.
Need to get 5710B of archives.
After unpacking 8343B of additional disk space will be used.
Do you want to continue? [Y/n] n
Abort.
#
------- Comment #1 From 2010-11-06 13:50:00 -------
Воспроизводится:

# rpm -q apt rpm
apt-0.5.15lorg2-alt33
rpm-4.0.4-alt100.1
------- Comment #2 From 2011-08-08 22:32:59 -------
Reproduced with:

apt-0.5.15lorg2-alt38
rpm-4.0.4-alt100.24
------- Comment #3 From 2012-05-23 19:18:40 -------
Это ужасно неприятная бага, мешающая методом подбора подобрать хорошее решение.
Там специально написан такой код, который вызывает завершение просто при ответе
"нет".

Предлагаю внести следующее исправление (на себе проверил):

diff --git a/apt/cmdline/apt-shell.cc b/apt/cmdline/apt-shell.cc
index 1dcfc06..c26885f 100644
--- a/apt/cmdline/apt-shell.cc
+++ b/apt/cmdline/apt-shell.cc
@@ -1101,8 +1101,7 @@ bool InstallPackages(CacheFile &Cache,bool ShwKept,bool
Ask = true,
       c2out << flush;
       if (AnalPrompt(Prompt) == false)
       {
-        c2out << _("Abort.") << endl;
-        exit(1);
+        return true;
       }     
    }
    else
@@ -1120,8 +1119,7 @@ bool InstallPackages(CacheFile &Cache,bool ShwKept,bool
Ask = true,

            if (YnPrompt() == false)
            {
-              c2out << _("Abort.") << endl;
-              exit(1);
+              return true;
            }     
         }
------- Comment #4 From 2012-05-23 19:22:49 -------
Может быть, любое другое продолжение работы apt-shell после отказа от коммита
переводит apt-shell в неконсистентное состояние?
------- Comment #5 From 2012-05-23 20:25:01 -------
(В ответ на комментарий №4)
> Может быть, любое другое продолжение работы apt-shell после отказа от коммита
> переводит apt-shell в неконсистентное состояние?

Из функции InstallPackage много раз выходят с помощью return. К тому же на этом
этапе ничего ещё дельного не произошло.

Так что я считаю, что никакого неконсистентного состояния там не возникает. На
себе проверил.
------- Comment #6 From 2012-05-24 22:11:47 -------
apt-0.5.15lorg2-alt41 -> sisyphus:

* Thu May 24 2012 Dmitry V. Levin <ldv@altlinux> 0.5.15lorg2-alt41
- apt-get, apt-shell: when a package could not be found, print the
  unmangled package request string (by Igor Vlasenko; closes: #27364).
- apt-shell: do not abort when commit is cancelled (closes: #13877);
  Unlike one may suppose, this change will not cause the cache of
  accumulated changes to be cleared by cancelled "commit" operation, but
  this is exactly what Vitaly Lipatov has proposed in his comments to #13877.
------- Comment #7 From 2012-05-26 15:16:13 -------
Спасибо!
------- Comment #8 From 2014-01-09 22:44:57 -------
Спасибо!