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

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

    <bug>
          <bug_id>26482</bug_id>
          
          <creation_ts>2011-10-20 18:53:41 +0400</creation_ts>
          <short_desc>[patch] add gear-update --post-update-script option</short_desc>
          <delta_ts>2011-11-02 15:49: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>gear</component>
          <version>unstable</version>
          <rep_platform>all</rep_platform>
          <op_sys>Linux</op_sys>
          <bug_status>NEW</bug_status>
          <resolution></resolution>
          
          
          <bug_file_loc>http://git.altlinux.org/people/viy/packages/?p=gear.git;a=commit;h=6b3306fa990ce45447cabb0ddc3bbd12e3bf9e46</bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P3</priority>
          <bug_severity>enhancement</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="viy">viy</reporter>
          <assigned_to name="Dmitry V. Levin">ldv</assigned_to>
          <cc>glebfm</cc>
    
    <cc>ldv</cc>
    
    <cc>legion</cc>
    
    <cc>placeholder</cc>
          
          <qa_contact>qa-sisyphus</qa_contact>

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>126401</commentid>
    <comment_count>0</comment_count>
    <who name="viy">viy</who>
    <bug_when>2011-10-20 18:53:41 +0400</bug_when>
    <thetext>нужно чтобы обрабатывать импорт __до__ git add
(в конкретном случае, разжать некоторые вложенные архивы)

пример реализации (тестирован, работает)
http://git.altlinux.org/people/viy/packages/?p=gear.git;a=commit;h=6b3306fa990ce45447cabb0ddc3bbd12e3bf9e46</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>126402</commentid>
    <comment_count>1</comment_count>
    <who name="Alexey Gladkov">legion</who>
    <bug_when>2011-10-20 19:11:54 +0400</bug_when>
    <thetext>Мне кажется, что правильнее сделать так чтобы gear-update сам разжимал вложенные архивы. То что вы предлагаете больше похоже на быстрый хак.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>126404</commentid>
    <comment_count>2</comment_count>
    <who name="viy">viy</who>
    <bug_when>2011-10-20 20:06:32 +0400</bug_when>
    <thetext>&gt; Мне кажется, что правильнее сделать так чтобы gear-update сам разжимал
&gt; вложенные архивы. 
кому-то это наоборот, нежелательное поведение, если он уже их держит в сжатом виде.

кроме того, у скрипта может быть и другое полезное применение.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>126406</commentid>
    <comment_count>3</comment_count>
    <who name="viy">viy</who>
    <bug_when>2011-10-20 20:49:21 +0400</bug_when>
    <thetext>(В ответ на комментарий №2)
&gt; &gt; Мне кажется, что правильнее сделать так чтобы gear-update сам разжимал
&gt; &gt; вложенные архивы. 
&gt; кому-то это наоборот, нежелательное поведение, если он уже их держит в сжатом
&gt; виде.
&gt; 
&gt; кроме того, у скрипта может быть и другое полезное применение.

т.е. опция для разжатия вложенных архивов и опция запуска скрипта друг другу не мешают, их можно реализовать независимо. Это разная функциональность, вообще говоря.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>126414</commentid>
    <comment_count>4</comment_count>
    <who name="Alexey Gladkov">legion</who>
    <bug_when>2011-10-21 01:15:49 +0400</bug_when>
    <thetext>Лично я не вижу смысла в этом патче т.к. то как оно сейчас реализовано проще выполнить gear-update несколько раз для необходимых архивов внутри.

Что экономит этот патч ? один вызов git-add ?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>126416</commentid>
    <comment_count>5</comment_count>
    <who name="viy">viy</who>
    <bug_when>2011-10-21 02:22:16 +0400</bug_when>
    <thetext>(В ответ на комментарий №4)
&gt; Лично я не вижу смысла в этом патче т.к. то как оно сейчас реализовано проще
&gt; выполнить gear-update несколько раз для необходимых архивов внутри.

скажем так, там несколько сот .ppd.gz файлов для разных моделей принтеров.
их я разжимаю до просто ppd, так мне легче отслеживать изменения.

&gt; Что экономит этот патч ? один вызов git-add ?
как видим, гораздо больше, чем один вызов git-add.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>126417</commentid>
    <comment_count>6</comment_count>
    <who name="Alexey Gladkov">legion</who>
    <bug_when>2011-10-21 02:31:38 +0400</bug_when>
    <thetext>Для этой задачи не нужно патчить gear-update. Последовательность

gear-update; find -name &apos;*.ppd.gz&apos; |xargs -r gunzip; git add ...

будет эффективнее.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>126419</commentid>
    <comment_count>7</comment_count>
    <who name="viy">viy</who>
    <bug_when>2011-10-21 02:57:45 +0400</bug_when>
    <thetext>(В ответ на комментарий №6)
&gt; Для этой задачи не нужно патчить gear-update. Последовательность
&gt; 
&gt; gear-update; find -name &apos;*.ppd.gz&apos; |xargs -r gunzip; git add ...
&gt; будет эффективнее.
gear-update уже сделал git add на *.ppd.gz файлы. 
Если выполнять операции после gear-update, то 
дополнительно их придется удалить из индекса и вызвать git gc.
проще сразу обойтись без gear-update :(

Скрипт становится намного проще и понятнее, если не производит манипуляций с индексом.

В чем проблема иметь в gear-update дополнительную опцию?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>126420</commentid>
    <comment_count>8</comment_count>
    <who name="viy">viy</who>
    <bug_when>2011-10-21 02:58:35 +0400</bug_when>
    <thetext>если не нравится название опции, можно поменять на любоее другое по вкусу.
мне без разницы.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>126421</commentid>
    <comment_count>9</comment_count>
    <who name="Alexey Gladkov">legion</who>
    <bug_when>2011-10-21 03:12:27 +0400</bug_when>
    <thetext>Операции над индексом не обязательно производить т.к. сжатых файлов не будет. Следующий за gear-update git-commit закоммитит правильные файлы.

Я считаю саму идею встраивания произвольного кода в gear-update хаком... к тому же ради экономии на git-add. Эта утилита задумывалась для того, чтобы обновлять часть дерева из файла архива. Дополнительные танцы над новыми данными она не производит. Не нужно превращать утилиту в комбайн к тому же с внешними обработчиками.

Если Дима считает нужным, то пусть вносит подобные изменения, но лично я против.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>126427</commentid>
    <comment_count>10</comment_count>
    <who name="viy">viy</who>
    <bug_when>2011-10-21 09:39:23 +0400</bug_when>
    <thetext>(В ответ на комментарий №9)
&gt; Операции над индексом не обязательно производить т.к. сжатых файлов не будет.
&gt; Следующий за gear-update git-commit закоммитит правильные файлы.
но в индексе останется мусор 
#       deleted:    хххх
который придется вычищать :(

&gt; Не нужно превращать утилиту в комбайн к тому же с внешними обработчиками.

Если утилита позиционируется как стандартная дистрибутивная, то она и должна
быть комбайном, который поддерживает возможности, которые автору 100 лет в обед не нужны, но нужны другим людям.

Иначе ей место в другом пакете, в legion-utils.

&gt; Если Дима считает нужным, то пусть вносит подобные изменения, но лично я
&gt; против.

:(</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>126430</commentid>
    <comment_count>11</comment_count>
    <who name="Alexey Gladkov">legion</who>
    <bug_when>2011-10-21 11:08:13 +0400</bug_when>
    <thetext>(В ответ на комментарий №10)
&gt; #       deleted:    хххх
&gt; который придется вычищать :(

Это можно вычищать лишь для эстетики.

&gt; Если утилита позиционируется как стандартная дистрибутивная, то она и должна
&gt; быть комбайном,

Нет.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>126725</commentid>
    <comment_count>12</comment_count>
    <who name="Dmitry V. Levin">ldv</who>
    <bug_when>2011-11-02 05:52:53 +0400</bug_when>
    <thetext>(In reply to comment #9)
&gt; Я считаю саму идею встраивания произвольного кода в gear-update хаком...

Насколько я понимаю, в сам gear-update никто не предлагает встраивать запуск произвольного кода.

&gt; к тому же ради экономии на git-add.

Если после запуска gear-update дерево надо подчищать, то проще обновлять дерево вручную.  Все удобство от использования gear-update образуется в результате того, что у этой утилиты простой интерфейс и она не оставляет за собой хвостов.

&gt; Эта утилита задумывалась для того, чтобы обновлять
&gt; часть дерева из файла архива. Дополнительные танцы над новыми данными она не
&gt; производит.

Вопрос в том, как определять понятие &quot;обновлять часть дерева&quot;.
Например, если внутри архива есть другой архив, то кто-то может сказать, что этот внутренний архив тоже надо распаковать.

Возможно, gear-update стоит обучить работать в режиме --deep=N, где N это глубина рекурсии по расжатию и распаковке.

&gt; Не нужно превращать утилиту в комбайн к тому же с внешними
&gt; обработчиками.

Я не вижу во внешних обработчиках ничего заведомо плохого.  Если от этого интерфейса кому-то может быть польза, а сам по себе он ничего не портит, то зачем от него отказываться?

Кстати, я придумал еще один пример кастомного обработчика, который в принципе может когда-нибудь понадобиться: это удаление нежелательных файлов по какому-нибудь критерию (файлы с недопустимыми условиями распространения, бекап-файлы, скомпилированные файлы, и т.п.)

Было бы логично, если бы кастомный обработчик находился в том же репозитории, что и обновляемые архивы, иначе будет непонятно, каким образом эти архивы были обновлены.  К сожалению, это требование невозможно сделать обязательным (просто потому, что кастомный обработчик все равно выполняет произвольный код из произвольного места).

(In reply to comment #8)
&gt; если не нравится название опции, можно поменять на любоее другое по вкусу.
&gt; мне без разницы.

Мне вообще кажется, что это было бы удобнее настраивать через $GIT_DIR/config,
см. раздел CONFIGURATION в gear-import(1).
Тогда кастомные обработчики естественным образом (через gear-update) встроились бы и в gear-import.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>126739</commentid>
    <comment_count>13</comment_count>
    <who name="Alexey Gladkov">legion</who>
    <bug_when>2011-11-02 14:18:23 +0400</bug_when>
    <thetext>(В ответ на комментарий №12)
&gt; Насколько я понимаю, в сам gear-update никто не предлагает встраивать запуск
&gt; произвольного кода.

В данном случае я имел в виду запуск произвольной программы.
 
&gt; Если после запуска gear-update дерево надо подчищать, то проще обновлять дерево
&gt; вручную.  Все удобство от использования gear-update образуется в результате
&gt; того, что у этой утилиты простой интерфейс и она не оставляет за собой хвостов.

Я проверил результат выполнения gear-update несколько раз на одном и том же дереве (второй запуск был разумеется с --force) и никаких deleted хвотов не обнаружил. Таким образом, рекурсивно распаковывать архивы можно и эстетика не страдает.

Проблема только в том, что разжимая архив внутри дерева нет возможности его сразу удалить после распаковки.
Эту проблему можно решить.
 
&gt; Возможно, gear-update стоит обучить работать в режиме --deep=N, где N это
&gt; глубина рекурсии по расжатию и распаковке.

Примерно эту идею я выдвигал в #1 :)

Но после от неё отказался т.к. пользователь не обязательно хочет распаковывать все архивы внутри N. Эту ситуацию придётся разрешать дополнительными телодвижениями в виде шаблонов имён или ещё как-то.

На мой взгляд, проще и правильнее предоставить пользователю возможность запускать gear-update внутри дерева. Тогда пользователь сможет рекурсивно разжать только нужные архивы.
 
&gt; Я не вижу во внешних обработчиках ничего заведомо плохого.  Если от этого
&gt; интерфейса кому-то может быть польза, а сам по себе он ничего не портит, то
&gt; зачем от него отказываться?

Обоснование такого кастомного обработчика не достаточное в этой баге.
 
&gt; Кстати, я придумал еще один пример кастомного обработчика, который в принципе
&gt; может когда-нибудь понадобиться: это удаление нежелательных файлов по
&gt; какому-нибудь критерию (файлы с недопустимыми условиями распространения,
&gt; бекап-файлы, скомпилированные файлы, и т.п.)

А вот это уже более конкретный  use-case.
Почему тебя не устраивают .gitignore или .git/info/exclude ?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>126740</commentid>
    <comment_count>14</comment_count>
    <who name="Dmitry V. Levin">ldv</who>
    <bug_when>2011-11-02 14:31:42 +0400</bug_when>
    <thetext>(In reply to comment #13)
&gt; Я проверил результат выполнения gear-update несколько раз на одном и том же
&gt; дереве (второй запуск был разумеется с --force) и никаких deleted хвотов не
&gt; обнаружил. Таким образом, рекурсивно распаковывать архивы можно и эстетика не
&gt; страдает.

Конечно, можно, но сейчас есть два ограничения.

&gt; Проблема только в том, что разжимая архив внутри дерева нет возможности его
&gt; сразу удалить после распаковки.
&gt; Эту проблему можно решить.

Это первое ограничение.

&gt; На мой взгляд, проще и правильнее предоставить пользователю возможность
&gt; запускать gear-update внутри дерева. Тогда пользователь сможет рекурсивно
&gt; разжать только нужные архивы.

Необходимость запуска gear-update более одного раза для полного обновления дерева из одного тарболла - это другое ограничение, если иметь в виду gear-import, который запускает gear-update ровно один раз.

&gt; &gt; Кстати, я придумал еще один пример кастомного обработчика, который в принципе
&gt; &gt; может когда-нибудь понадобиться: это удаление нежелательных файлов по
&gt; &gt; какому-нибудь критерию (файлы с недопустимыми условиями распространения,
&gt; &gt; бекап-файлы, скомпилированные файлы, и т.п.)
&gt; 
&gt; А вот это уже более конкретный  use-case.
&gt; Почему тебя не устраивают .gitignore или .git/info/exclude ?

Это, как видно, менее конкретный и менее удачный пример; для его реализации механизма gitignore(5) должно быть достаточно.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>126741</commentid>
    <comment_count>15</comment_count>
    <who name="Alexey Gladkov">legion</who>
    <bug_when>2011-11-02 14:46:34 +0400</bug_when>
    <thetext>(В ответ на комментарий №14)
&gt; Это, как видно, менее конкретный и менее удачный пример; для его реализации
&gt; механизма gitignore(5) должно быть достаточно.

Кстати:

$ gear-update --help |grep exclude=
  --exclude=PATTERN   exclude files matching posix-egrep regular expression PATTERN;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>126742</commentid>
    <comment_count>16</comment_count>
    <who name="Alexey Gladkov">legion</who>
    <bug_when>2011-11-02 14:54:20 +0400</bug_when>
    <thetext>(В ответ на комментарий №14)
&gt; &gt; Проблема только в том, что разжимая архив внутри дерева нет возможности его
&gt; &gt; сразу удалить после распаковки.
&gt; &gt; Эту проблему можно решить.
&gt; 
&gt; Это первое ограничение.

Это исправим. В любом случае это полезная возможность.
 
&gt; Необходимость запуска gear-update более одного раза для полного обновления
&gt; дерева из одного тарболла - это другое ограничение,

Я не считаю это ограничением. Это поведение идентично tar/zip/gzip, которые не пытаются распаковать архивы внутри архива.

&gt; если иметь в виду
&gt; gear-import, который запускает gear-update ровно один раз.

Это &quot;ограничение&quot; тоже можно попробовать решить.

Устранение подобных ограничений более конструктивная задача за которую стоит браться.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>126745</commentid>
    <comment_count>17</comment_count>
    <who name="Dmitry V. Levin">ldv</who>
    <bug_when>2011-11-02 15:09:45 +0400</bug_when>
    <thetext>(In reply to comment #16)
&gt; (В ответ на комментарий №14)
&gt; &gt; &gt; Проблема только в том, что разжимая архив внутри дерева нет возможности его
&gt; &gt; &gt; сразу удалить после распаковки.
&gt; &gt; &gt; Эту проблему можно решить.
&gt; &gt; 
&gt; &gt; Это первое ограничение.
&gt; 
&gt; Это исправим. В любом случае это полезная возможность.

Договорились.

&gt; &gt; Необходимость запуска gear-update более одного раза для полного обновления
&gt; &gt; дерева из одного тарболла - это другое ограничение,
&gt; 
&gt; Я не считаю это ограничением. Это поведение идентично tar/zip/gzip, которые не
&gt; пытаются распаковать архивы внутри архива.
&gt; 
&gt; &gt; если иметь в виду
&gt; &gt; gear-import, который запускает gear-update ровно один раз.
&gt; 
&gt; Это &quot;ограничение&quot; тоже можно попробовать решить.
&gt; 
&gt; Устранение подобных ограничений более конструктивная задача за которую стоит
&gt; браться.

Если рассматривать gear-update как простой низкоуровневый инструмент, тогда алгоритм настраиваемого итерационного запуска gear-update должен быть реализован за его пределами.  Поскольку gear-import использует gear-update, можно предложить реализовать этот алгоритм в gear-import.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>126749</commentid>
    <comment_count>18</comment_count>
    <who name="viy">viy</who>
    <bug_when>2011-11-02 15:21:39 +0400</bug_when>
    <thetext>(В ответ на комментарий №16)
&gt; Устранение подобных ограничений более конструктивная задача за которую стоит
&gt; браться.
А исходное пожелание по поводу обработчика?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>126756</commentid>
    <comment_count>19</comment_count>
    <who name="Alexey Gladkov">legion</who>
    <bug_when>2011-11-02 15:47:47 +0400</bug_when>
    <thetext>(В ответ на комментарий №17)
&gt; Договорились.

Уже в процессе.

&gt; Если рассматривать gear-update как простой низкоуровневый инструмент, тогда
&gt; алгоритм настраиваемого итерационного запуска gear-update должен быть
&gt; реализован за его пределами.  Поскольку gear-import использует gear-update,
&gt; можно предложить реализовать этот алгоритм в gear-import.

Да. Мне это кажется более правильным.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>126757</commentid>
    <comment_count>20</comment_count>
    <who name="Alexey Gladkov">legion</who>
    <bug_when>2011-11-02 15:49:12 +0400</bug_when>
    <thetext>(В ответ на комментарий №18)
&gt; А исходное пожелание по поводу обработчика?

Ваша задача должна решаться не обработчиком.</thetext>
  </long_desc>
      
      

    </bug>

</bugzilla>