Bug 25686

Summary: hsh --init заполняет кэш, прямо не говоря об этом
Product: Sisyphus Reporter: IVK <ivk1097>
Component: hasherAssignee: Dmitry V. Levin <ldv>
Status: CLOSED FIXED QA Contact: qa-sisyphus
Severity: enhancement    
Priority: P3 CC: at, dd1email, glebfm, ldv, legion, mike, placeholder, radik
Version: unstableKeywords: usability
Hardware: all   
OS: Linux   
Bug Depends on:    
Bug Blocks: 26217    
Attachments:
Description Flags
Patch using tee(1)
none
Patch using tee(1) none

Description IVK 2011-05-30 13:42:40 MSK
Когда hsh --init заполняет ~/hasher/aptbox/var/cache/apt/archives, то желательно, чтобы он прямо говорил в логе, что качает пакеты. Если хашерницу собирает начинающий, причём пакеты для неё берутся из инета, и канал тощий (а такое всё-таки бывает!), то "зависание" hsh --init на не очень понятной строке 
hsh-initroot: Generated initial package file list.
может сильно озадачить человека ;)
Comment 1 Radik Usupov 2011-05-31 15:47:55 MSK
Полностью согласен с топикстартером.
По началу очень озадачивало, пока не спросил у ребят...
Comment 2 Michael Shigorin 2011-06-01 00:08:30 MSK
Думаю, самым простым способом будет что-то вроде

echo "Obtaining packages (downloading remotely might take a while)..."

перед тем, как.
Comment 3 Dmitry V. Levin 2011-06-01 00:29:10 MSK
Дело в том, что hasher, запуская
apt-get -q -y -o RPM::PM=external -o Dir::Bin::rpm=hsh-rpmi-print-files
(см. print_uris() в hsh-sh-functions)
не знает, что именно делает apt-get, в частности, скачивает ли он файлы.
Например, в случае использования метода file точно ничего не скачивается.

Даже не знаю, чем вам помочь.
Comment 4 Michael Shigorin 2011-06-01 00:51:14 MSK
Это понятно, потому и такую формулировку предложил.  Ну или так:

Obtaining packages (might take a while if downloading remotely)...
Comment 5 Dmitry V. Levin 2011-06-01 01:08:19 MSK
(In reply to comment #4)
> Это понятно, потому и такую формулировку предложил.  Ну или так:
> 
> Obtaining packages (might take a while if downloading remotely)...

1.3.20-alt1-2-g88b0822
Comment 6 Dmitry Chistikov 2011-06-02 09:45:20 MSK
Created attachment 4959 [details]
Patch using tee(1)

Предлагается иной способ обхода с помощью tee(1) - см. прикладываемый патч.
Comment 7 Dmitry V. Levin 2011-06-02 09:48:26 MSK
(In reply to comment #6)
> Created an attachment (id=4959) [details]
> Patch using tee(1)
> 
> Предлагается иной способ обхода с помощью tee(1) - см. прикладываемый патч.

Вариант с tee в принципе плох тем, что статус завершения apt-get безвозвратно теряется.
Comment 8 Dmitry Chistikov 2011-06-02 10:00:39 MSK
Created attachment 4960 [details]
Patch using tee(1)

Поправка: чтобы if работал правильно, нужно временно установить pipefail.
Comment 9 Alexey Gladkov 2011-06-02 10:15:32 MSK
(В ответ на комментарий №8)
> Created an attachment (id=4960) [details]
> Patch using tee(1)

+	if ! out="$("$aptbox/apt-get" $options install -- "$@" 2>&1 | tee /dev/stderr)"; then
+		set +o pipefail

Как Дима и сказал, внутрь if вы никогда не попадёте. tee будет завершаться успешно и код возврата apt будет потерян.
Comment 10 Dmitry Chistikov 2011-06-02 10:26:45 MSK
$ if ! v=$(false | tee /dev/stderr); then echo a; fi
$ set -o pipefail; if ! v=$(false | tee /dev/stderr); then echo a; fi; set +o pipefail
a
Comment 11 Dmitry V. Levin 2011-06-02 10:27:59 MSK
(In reply to comment #9)
> (В ответ на комментарий №8)
> > Created an attachment (id=4960) [details] [details]
> > Patch using tee(1)
> 
> +    if ! out="$("$aptbox/apt-get" $options install -- "$@" 2>&1 | tee
> /dev/stderr)"; then
> +        set +o pipefail
> 
> Как Дима и сказал, внутрь if вы никогда не попадёте. tee будет завершаться
> успешно и код возврата apt будет потерян.

Идея понятна, имелось в виду $(set +o pipefail; apt-get | tee).
Честно говоря, я бы, наверное, не очень бы хотел, чтобы _весь_ вывод apt-get транслировался бы пользователю даже в режиме verbose.  А в обычном режиме пользователю вообще никакого вывода от apt-get не нужно.
Comment 12 Alexey Gladkov 2011-06-02 10:33:07 MSK
(В ответ на комментарий №10)
> $ if ! v=$(false | tee /dev/stderr); then echo a; fi
> $ set -o pipefail; if ! v=$(false | tee /dev/stderr); then echo a; fi; set +o
> pipefail
> a

Прошу прощения, я не заметил этот милый башизм :)
Comment 13 Dmitry Chistikov 2011-06-02 10:45:55 MSK
Устанавливает опцию именно -o, а не +o:

$ set -o pipefail
$ set -o | grep pipefail
pipefail        on
$ set +o pipefail
$ set -o | grep pipefail
pipefail        off

Вообще, мне кажется, что данный баг именно о нужности индикатора состояния (progress bar или чего-нибудь похожего). В конце концов, вывод apt-get можно и порезать (grep).

Использования башизмов не постеснялся из-за:
http://lists.altlinux.org/pipermail/devel/2010-August/183728.html
http://lists.altlinux.org/pipermail/devel/2010-August/183729.html
=)
Comment 14 Dmitry V. Levin 2011-06-02 11:03:13 MSK
(In reply to comment #11)
> (In reply to comment #9)
> > (В ответ на комментарий №8)
> > > Created an attachment (id=4960) [details] [details] [details]
> > > Patch using tee(1)
> > 
> > +    if ! out="$("$aptbox/apt-get" $options install -- "$@" 2>&1 | tee
> > /dev/stderr)"; then
> > +        set +o pipefail
> > 
> > Как Дима и сказал, внутрь if вы никогда не попадёте. tee будет завершаться
> > успешно и код возврата apt будет потерян.
> 
> Идея понятна, имелось в виду $(set -o pipefail; apt-get | tee).
> Честно говоря, я бы, наверное, не очень бы хотел, чтобы _весь_ вывод apt-get
> транслировался бы пользователю даже в режиме verbose.  А в обычном режиме
> пользователю вообще никакого вывода от apt-get не нужно.

Попробуйте 1.3.20-alt1-3-gca1aab7; не кажется ли вам, что режим -v в результате этого изменения стал чрезмерно болтлив?
Comment 15 Dmitry V. Levin 2011-06-10 19:35:03 MSK
(In reply to comment #14)
> Попробуйте 1.3.20-alt1-3-gca1aab7; не кажется ли вам, что режим -v в результате
> этого изменения стал чрезмерно болтлив?

Кто-нибудь уже попробовал?
Comment 16 Michael Shigorin 2011-06-11 02:00:56 MSK
Не-а, но кажется, что одной строчки достаточно (особенно если при загрузке она как раз и болтается последней).
Comment 17 Repository Robot 2011-07-27 01:10:20 MSK
hasher-1.3.21-alt1 -> sisyphus:

* Wed Jul 27 2011 Dmitry V. Levin <ldv@altlinux> 1.3.21-alt1
- hsh-run: disable network isolation when X11 forwarding is requested.
- hsh: added --printenv option (closes: #23955)
- hsh-sh-functions.in (print_uris): in verbose mode, print a message
  about obtaining packages (closes: #25686).