Bug 28762 - Не цепляет зависимости
Summary: Не цепляет зависимости
Status: CLOSED FIXED
Alias: None
Product: Sisyphus
Classification: Development
Component: rpm-build-python3 (show other bugs)
Version: unstable
Hardware: all Linux
: P3 major
Assignee: solo
QA Contact: qa-sisyphus
URL:
Keywords:
Depends on:
Blocks:
 
Reported: 2013-03-29 15:32 MSK by Sergey V Turchin
Modified: 2013-04-08 15:00 MSK (History)
10 users (show)

See Also:


Attachments

Note You need to log in before you can comment on or make changes to this bug.
Description Sergey V Turchin 2013-03-29 15:32:08 MSK
Для
/usr/bin/maliit-exampleapp-gtk3-python.py
успешно цепляется зависомость на python2.7(gi), а для аналогичного "from gi.repository import" из Python3-скрипта
/usr/bin/maliit-exampleapp-settings-python3.py
на цепляется python3.2(gi).
Сейчас скрипт в пакете maliit-framework-examples, но скоро переместится в  maliit-framework-settings.
Comment 1 Ivan A. Melnikov 2013-03-31 08:24:25 MSK
Workaround:

%add_python3_path %_bindir

Не понимаю, почему %_bindir нет в %_python3_path по умолчанию. Наверное забыли.

Ещё меньше понимаю, почему фильтрацией путей занимается python3.req.py, а не python3.req.files.
Comment 2 Dmitry V. Levin 2013-03-31 15:41:14 MSK
(In reply to comment #1)
> Workaround:
> 
> %add_python3_path %_bindir
> 
> Не понимаю, почему %_bindir нет в %_python3_path по умолчанию. Наверное забыли.
> 
> Ещё меньше понимаю, почему фильтрацией путей занимается python3.req.py, а не
> python3.req.files.

По идее, %_python3_path не нужен, python3.req.py должен обрабатывать все, что к нему приехало.  Эх, автора бы спросить...
Comment 3 solo 2013-04-04 12:37:59 MSK
(В ответ на комментарий №2)
...
> По идее, %_python3_path не нужен, python3.req.py должен обрабатывать все, что к
> нему приехало.  Эх, автора бы спросить...

  При отладке картина вообще странная: После python3.req.files, python3.req.py (через python3.req) передаётся только один файл (только строка "/usr/src/tmp/maliit-framework-buildroot/usr/bin/maliit-exampleapp-settings-python3.py"). Но в переменную files (куда должен попадать весь in, если я правельно понял код) данная строка не попадает!

  Содержимое files, формируется так:

files = sys.argv[1:] or [ x.strip() for x in sys.stdin.readlines() ]
files = [p for p in files if is_python3(os.path.abspath(p))]
Comment 4 solo 2013-04-04 13:49:19 MSK
(В ответ на комментарий №3)
...
>   При отладке картина вообще странная: После python3.req.files, python3.req.py
> (через python3.req) передаётся только один файл (только строка
> "/usr/src/tmp/maliit-framework-buildroot/usr/bin/maliit-exampleapp-settings-python3.py").
> Но в переменную files (куда должен попадать весь in, если я правельно понял
> код) данная строка не попадает!

  Точнее:

> 
>   Содержимое files, формируется так:
> 
> files = sys.argv[1:] or [ x.strip() for x in sys.stdin.readlines() ]

  Здесь, есть.

> files = [p for p in files if is_python3(os.path.abspath(p))]

  А здесь -- уже нет.
Comment 5 manowar@altlinux.org 2013-04-04 14:15:28 MSK
> > files = sys.argv[1:] or [ x.strip() for x in sys.stdin.readlines() ]
> 
>   Здесь, есть.

  Видимо потому, что читаем из stdin всё, без проверки условий.

> 
> > files = [p for p in files if is_python3(os.path.abspath(p))]
> 
>   А здесь -- уже нет.

  Ну тут уже есть ограничения в виде условия is_python3. А ещё странный p перед for. Я не являюсь носителем питоньего языка, но кажется, что эта конструкция может заносить в итоговый список ровно один элемент, нет?
Comment 6 solo 2013-04-04 15:19:47 MSK
(В ответ на комментарий №5)
> > > files = sys.argv[1:] or [ x.strip() for x in sys.stdin.readlines() ]
> > 
> >   Здесь, есть.
> 
>   Видимо потому, что читаем из stdin всё, без проверки условий.

  У меня ляп был при отладке -- был уверен что сюда ничего не попадает.

> 
> > 
> > > files = [p for p in files if is_python3(os.path.abspath(p))]
> > 
> >   А здесь -- уже нет.
> 
>   Ну тут уже есть ограничения в виде условия is_python3. А ещё странный p перед
> for. Я не являюсь носителем питоньего языка, но кажется, что эта конструкция
> может заносить в итоговый список ровно один элемент, нет?

  Это один из способов записи цикла для обработки всего списка. Т. е. данная конструкция -- фильтр: оставляет только строки для которых is_python3(os.path.abspath(p)) истина.

(В ответ на комментарий №1)
...
> Ещё меньше понимаю, почему фильтрацией путей занимается python3.req.py, а не
> python3.req.files.

  Похоже, что это связано с тем, что python скрипты тоже попадают на вход python3.req.py (при отладке наблюдаю на входе "/usr/src/tmp/maliit-framework-buildroot/usr/bin/maliit-exampleapp-gtk3-python.py"). Возможно это попытка убрать их...

  Где сдеь причина, а где следствие и к чему приведёт закрутка гаек у python3.req.files -- ещё не разобрался.
Comment 7 Dmitry V. Levin 2013-04-06 05:30:33 MSK
Try rpm-build-python3 commit 0.1.5-alt1-4-g33f386f.
Comment 8 Repository Robot 2013-04-07 02:44:42 MSK
rpm-build-python3-0.1.6-alt1 -> sisyphus:

* Sat Apr 06 2013 Dmitry V. Levin <ldv@altlinux> 0.1.6-alt1
- python3.{prov,req}.files:
  + skip files of type "python script text executable";
  + enhanced "python3 script text executable" type check;
  + added is_python3_path check from python3.{prov,req}.py,
    which is now applied only to files of uncertain type.
- python3.{prov,req}.py: removed is_python3 check (closes: #28762).
Comment 9 Sergey V Turchin 2013-04-08 15:00:43 MSK
Теперь правильно цепляет зависимости при плюрализме в одном пакете.