Bug 13877 - apt-shell crashes if one answers "no" to commit
Summary: apt-shell crashes if one answers "no" to commit
Status: CLOSED FIXED
Alias: None
Product: Sisyphus
Classification: Development
Component: apt (show other bugs)
Version: unstable
Hardware: all Linux
: P2 normal
Assignee: placeholder@altlinux.org
QA Contact: qa-sisyphus
URL:
Keywords:
Depends on:
Blocks:
 
Reported: 2008-01-05 08:20 MSK by Ivan Zakharyaschev
Modified: 2014-01-09 22:44 MSK (History)
7 users (show)

See Also:


Attachments

Note You need to log in before you can comment on or make changes to this bug.
Description Ivan Zakharyaschev 2008-01-05 08:20:11 MSK
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 Lenar Shakirov 2010-11-06 13:50:00 MSK
Воспроизводится:

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

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

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

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 Dmitry V. Levin 2012-05-23 19:22:49 MSK
Может быть, любое другое продолжение работы apt-shell после отказа от коммита переводит apt-shell в неконсистентное состояние?
Comment 5 Vitaly Lipatov 2012-05-23 20:25:01 MSK
(В ответ на комментарий №4)
> Может быть, любое другое продолжение работы apt-shell после отказа от коммита
> переводит apt-shell в неконсистентное состояние?

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

Так что я считаю, что никакого неконсистентного состояния там не возникает. На себе проверил.
Comment 6 Repository Robot 2012-05-24 22:11:47 MSK
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 Vitaly Lipatov 2012-05-26 15:16:13 MSK
Спасибо!
Comment 8 Ivan Zakharyaschev 2014-01-09 22:44:57 MSK
Спасибо!