<?xml version="1.0" encoding="UTF-8" ?>

<bugzilla version="5.2"
          urlbase="https://bugzilla.altlinux.org/"
          
          maintainer="jenya@basealt.ru"
>

    <bug>
          <bug_id>14244</bug_id>
          
          <creation_ts>2008-01-30 11:32:23 +0300</creation_ts>
          <short_desc>shell.req adds dependency on files inside conditionals</short_desc>
          <delta_ts>2011-08-12 11:40:12 +0400</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>4</classification_id>
          <classification>Development</classification>
          <product>Sisyphus</product>
          <component>rpm-build</component>
          <version>unstable</version>
          <rep_platform>all</rep_platform>
          <op_sys>Linux</op_sys>
          <bug_status>CLOSED</bug_status>
          <resolution>WONTFIX</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="inger@altlinux.org">inger</reporter>
          <assigned_to name="Nobody&apos;s working on this, feel free to take it">nobody</assigned_to>
          <cc>arseny</cc>
    
    <cc>dd1email</cc>
    
    <cc>evg</cc>
    
    <cc>glebfm</cc>
    
    <cc>imz</cc>
    
    <cc>lakostis</cc>
    
    <cc>ldv</cc>
    
    <cc>legion</cc>
    
    <cc>mike</cc>
    
    <cc>placeholder</cc>
    
    <cc>radik</cc>
    
    <cc>viy</cc>
    
    <cc>vt</cc>
    
    <cc>vvk</cc>
          
          <qa_contact>qa-sisyphus</qa_contact>

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>62288</commentid>
    <comment_count>0</comment_count>
    <who name="inger@altlinux.org">inger</who>
    <bug_when>2008-01-30 11:32:23 +0300</bug_when>
    <thetext>Наш мудрый поисковик зависимостей следующие конструкции:

if [ -d &quot;/dev/elan&quot; ] ; then
  FARCH=&quot;meiko&quot;
elif [ -f /usr/bin/uxpm ] &amp;&amp; /usr/bin/uxpm ; then
  FARCH=&quot;UXPM&quot;
elif [ -f /usr/bin/uxpv ] &amp;&amp; /usr/bin/uxpv ; then
  FARCH=&quot;uxpv&quot;
fi

превращает в зависимости на /usr/bin/uxpm и на /usr/bin/uxpv, что совершенно не
правильно.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>62299</commentid>
    <comment_count>1</comment_count>
    <who name="Dmitry V. Levin">ldv</who>
    <bug_when>2008-01-30 14:19:42 +0300</bug_when>
    <thetext>(In reply to comment #0)
&gt; Наш мудрый поисковик зависимостей следующие конструкции:
&gt; 
&gt; if [ -d &quot;/dev/elan&quot; ] ; then
&gt;   FARCH=&quot;meiko&quot;
&gt; elif [ -f /usr/bin/uxpm ] &amp;&amp; /usr/bin/uxpm ; then
&gt;   FARCH=&quot;UXPM&quot;
&gt; elif [ -f /usr/bin/uxpv ] &amp;&amp; /usr/bin/uxpv ; then
&gt;   FARCH=&quot;uxpv&quot;
&gt; fi
&gt; 
&gt; превращает в зависимости на /usr/bin/uxpm и на /usr/bin/uxpv, что совершенно не
&gt; правильно.

Что же тут неправильного?  Он именно так он и должен работать.
</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>62301</commentid>
    <comment_count>2</comment_count>
    <who name="Mikhail Gusarov">dottedmag</who>
    <bug_when>2008-01-30 14:21:52 +0300</bug_when>
    <thetext>Неправильного то, что и uxpm, и uxpv цепляются, а должно что-то одно.
</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>62302</commentid>
    <comment_count>3</comment_count>
    <who name="Dmitry V. Levin">ldv</who>
    <bug_when>2008-01-30 14:24:29 +0300</bug_when>
    <thetext>(In reply to comment #2)
&gt; Неправильного то, что и uxpm, и uxpv цепляются, а должно что-то одно.

Нет, в таком коде в зависимости должно попасть и то и другое.
</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>62303</commentid>
    <comment_count>4</comment_count>
    <who name="Mikhail Gusarov">dottedmag</who>
    <bug_when>2008-01-30 14:26:28 +0300</bug_when>
    <thetext>Т.е. в любом нетривиальном коде такого рода &quot;левые&quot; зависимости будут 
наматываться в огромном количестве?

PS: а где написано, &quot;как должно быть&quot;?
</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>62321</commentid>
    <comment_count>5</comment_count>
    <who name="Dmitry V. Levin">ldv</who>
    <bug_when>2008-01-30 23:59:17 +0300</bug_when>
    <thetext>(In reply to comment #4)
&gt; Т.е. в любом нетривиальном коде такого рода &quot;левые&quot; зависимости будут 
&gt; наматываться в огромном количестве?

Такого рода проверки встречаются в небольшом количестве.

&gt; PS: а где написано, &quot;как должно быть&quot;?

Как должно быть где?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>62322</commentid>
    <comment_count>6</comment_count>
    <who name="Mikhail Gusarov">dottedmag</who>
    <bug_when>2008-01-31 00:00:30 +0300</bug_when>
    <thetext>(In reply to comment #5)
&gt; &gt; PS: а где написано, &quot;как должно быть&quot;?
&gt; Как должно быть где?

Как должно быть &quot;вообще&quot; - т.е. что есть The Right Thing для такой 
зависимостеискалки.
</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>62324</commentid>
    <comment_count>7</comment_count>
    <who name="Dmitry V. Levin">ldv</who>
    <bug_when>2008-01-31 00:04:35 +0300</bug_when>
    <thetext>(In reply to comment #6)
&gt; (In reply to comment #5)
&gt; &gt; &gt; PS: а где написано, &quot;как должно быть&quot;?
&gt; &gt; Как должно быть где?
&gt; 
&gt; Как должно быть &quot;вообще&quot; - т.е. что есть The Right Thing для такой 
&gt; зависимостеискалки.

The Right Thing для такой зависимостеискалки недостижим.
Всегда будут либо ложные срабатывания, либо пропуски, либо и то и другое.

Если и написано, то только как работает нынешняя.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>62345</commentid>
    <comment_count>8</comment_count>
    <who name="inger@altlinux.org">inger</who>
    <bug_when>2008-01-31 10:21:41 +0300</bug_when>
    <thetext>нет, так быть не должно.

Если это сейчас исправить не возможно, то пусть остаётся на будущее.

Одно время в perl цеплялись зависимости типа (код пишу не не перле ;))

if (system == windows)
{
  require Win32
}

Это приводило к тому что в Сизиф цеплялись win32 модули. 

Если это считалось ошибкой, и было в своё время исправлено, то не понимаю почему
шелл такой особенный.

В приведённом коде нигде не было явной зависимости на использование утилит ибо
стояла проверка -f.

Повторюсь ещё раз: Если текущий поисковик зависмостей даёт _надмножество_
возможных зависимостей, а не _подмножество_, то это неправильно.
</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>62352</commentid>
    <comment_count>9</comment_count>
    <who name="Michael Shigorin">mike</who>
    <bug_when>2008-01-31 13:03:52 +0300</bug_when>
    <thetext>(In reply to comment #4)
&gt; Т.е. в любом нетривиальном коде такого рода &quot;левые&quot; зависимости будут 
&gt; наматываться в огромном количестве?
Что особенно радует, когда код чужой и апстрим либо уже помер, либо не
собирается понижать читабельность кода за счёт решения наших собственных проблем.

&gt; PS: а где написано, &quot;как должно быть&quot;?
В devel@ упоминалось:

x=&quot;/usr/sbin/x&quot;
[ -x &quot;$x&quot; ] &amp;&amp; &quot;$x&quot; ||:

Боюсь, на сейчас эта автоматизация будет приводить к возрастанию пакетов с
AutoReq: yes, noshell, как вот в spt.  За что боролись, на то пока и напарываемся :(

Может, получается сделать какой-то регулятор, в котором текущее поведение будет
равно &quot;95%&quot;, а более раннее (год тому там) -- &quot;80%&quot;?  Для своих скриптов может
быть осмысленно стремиться к идеалу сильнее, чем для произвольных чужих.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>62411</commentid>
    <comment_count>10</comment_count>
    <who name="at@altlinux.org">at</who>
    <bug_when>2008-02-01 02:28:36 +0300</bug_when>
    <thetext>Увы, сейчас поиск зависимостей в шелл-скриптах фактически диктует определённый
стиль написания этих скриптов (нужно &quot;скрывать&quot; более условные команды и,
наоборот, явно писать менее условные команды).  Жертва очень большая, да и
вообще автоматический поиск зависимостей в чисто интерпретируемых языках больше
похож на авантюру.  В менее интерпретируемых языках (где зависимости
осуществляются через систему модулей) нежалательные зависимости хотя бы легче
локализовать (и требуется поправить их более-менее &quot;всего в одном месте&quot;), а тут
иногда получается, что весь код целиком нужно просматривать, имея в виду
автоматический поиск зависимостей.

Что тут можно сделать?  Это может быть целый research: нужно научить /bin/sh
дампить syntax tree в виде S-выражения и дальше match&apos;ить это S-выражение по
шаблону типа case analysis.  Так что по идее можно отлавливать некоторые случаи
типа &quot;проверка существования перед использованием&quot;.  Тут опять же есть два
варианта, либо чисто лексический анализ, либо дополнительно ещё контролируемое
частичное исполнение скрипта (c перехватом/запретом fork/exec/dup2).  Но
поскольку в шелле ничего нельзя сделать без форка и exec&apos;а, то контролируемое
частичное исполнение скрипта опять оборачиватеся авантюрой.

Короче, мне в принципе интересно, есть ли в природе какие-нибудь research
papaers на эту тему (анализ условных зависимостей).

Кажется это по-научному называется Value Evolution Graph (VEG) --
http://www.google.com/search?q=%22Value+evolution+graph%22</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>62707</commentid>
    <comment_count>11</comment_count>
    <who name="Dmitry V. Levin">ldv</who>
    <bug_when>2008-02-05 23:17:34 +0300</bug_when>
    <thetext>*** Bug 14327 has been marked as a duplicate of this bug. ***</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>64600</commentid>
    <comment_count>12</comment_count>
    <who name="Dmitry V. Levin">ldv</who>
    <bug_when>2008-02-25 23:10:53 +0300</bug_when>
    <thetext>Я сомневаюсь в том, что этот вопрос будет решён в обозримом будущем.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>114916</commentid>
    <comment_count>13</comment_count>
    <who name="Michael Shigorin">mike</who>
    <bug_when>2010-11-06 13:35:31 +0300</bug_when>
    <thetext>Я тоже.</thetext>
  </long_desc>
      
      

    </bug>

</bugzilla>