[devel] Maintainer's toolbox (was: I: gear-tarimport)

Mikhail Yakshin =?iso-8859-1?q?greycat_=CE=C1_altlinux=2Eorg?=
Пт Фев 2 01:37:26 MSK 2007


Денис Смирнов wrote:
> On Wed, Jan 31, 2007 at 01:22:15PM +0300, Mikhail Yakshin wrote:
> 
>>> Я только за. Потому как по моему личному мнению наличие в сизифе каждого
>>> пакета с именем "<firmname>..." это неявная бага. Если пакет seiros-.*
>>> используется только у меня, то ему не место в сизифе. А если используется
>>> не только мной, то почему бы не объединить все подобные утилиты в один
>>> пакет?
> MY> Ура =) Очень близкая мысль :)
> 
> :)
> 
> Ещё бы ты принял мою мысль о том чтобы жестоко пилить пакеты вроде spt3 и
> comfort на более мелкие пакеты, и мы могли бы наконец объединить наши
> усилия вместо того чтобы трепаться :)

spt3 распилен, пожалуйста, смотри. Как пилить comfort - я пока не очень
понимаю, предлагай.

>>> Сейчас я его использую в следующем случае:
>>>  - rpmbb <spec>
>>>  - В BUILD имеем несобравшийся пакет
>>>  - переименовываю то что пытаюсь править в .orig и запускаю make (чтобы не
>>>    пересобирать весь пакет)
>>>  - повторяю предыдущий шаг до тех пор пока пакет не соберется
>>>  - ptch > 1.patch
>>>  - переношу этот патч в каталог с git, и либо привязываю его как новый
>>>    патч к пакету, либо набираю patch -p0 < 1.patch
> MY> Вот, отлично, еще одна схема workflow у нас появилась :) Как бы ее 
> MY> проапгрейдить для git'а? Например, чтобы собираемый патч автоматически 
> MY> привязывался к пакету в git'е и прописывался как "PatchX: ..." и %patch 
> MY> что-то там?
> 
> Ещё пока не выработалась схема по правильной работе с патчами в git.
> Вообще-то они должны быть в отдельных бранчах. Хранить патчи в виде патчей
> при использовании git это очень нехорошо.

Значит, нам нужен как минимум обратный инструмент - который после
srpmimport конвертит "Patch: ..." + "%patch-что-то-там", заводя их в git.

>>> Вообще многие такие вещи имеет смысл бить на пакеты из-за очень большого
>>> объема requires.
> MY> Согласен. Но некий базовый workflow-пакет с разумным объемом requires 
> MY> IMHO имеет право на существование.
> 
> Думаю скорее группа пакетов для разных workflow. Например gear-svnupdate
> не должен лежать там же где все остальное. Потому что он хочет svn,
> который не всем нужен.

Нам хотя бы один базовый пока набросать %)

> MY> Что бы мне лично хотелось видеть в утилите, которая собирает:
> MY> 1. Возможность запуска без параметров для сборки того пакета, в 
> MY> директории с репозитарием которого я сейчас нахожусь. (Распространяется 
> MY> не только на саму директорию с .git, но и все ее поддиректории).
> 
> Гм. Думал Виталий не будет протестовать против патча :)
> 
> MY> 2. Возможность запуска, указав только имя пакета (пакет найдется в 
> MY> репозитарии $HOME/git/имя-пакета) - типа "rpmbb samba". При 
> MY> невозможности найти такой репозитарий должна быть выведена подсказка, 
> MY> какими способами заполучить такой репозитарий себе (скачать, создать, 
> MY> импортировать и т.п).
> 
> Тогда вопрос о правильной схеме размещения. У меня, например, из-за обилия
> пакетов структура такая:
> git/ALTLinux -- там хранится все пакеты что я отправил на git.alt
> git/ALTLinux/asterisk -- все связаное с астериском
> git/ALTLinux/appliance -- appliance-*
> и т. д. Я не представляю как это сделать пригодным для всех способом.

Ok, понял, в ближайшее время сделаю такую возможность неплоского
размещения пакетов.

determine_package() переделаю так, чтобы он, если указан полный путь
(типа "ALTLinux/asterisk/some-package") - собирал бы его, если нет - то
искал бы соответствующую директорию find'ом; если найдена одна - то
собирал бы оттуда; если их несколько - то ругался бы на то, что не может
однозначно определить, что собирать (как rpm -e, когда под критерий
подпадает >1 пакета).

> MY> 5. Утилиту(ы) с единым синтаксисом для сборки в rpmbuild и hasher - 
> MY> отличающуюся либо суффиксом в названии (build-rpmbuild, build-hasher), 
> MY> либо какой-то опцией (build --engine=rpmbuild, build --engine=hasher). 
> MY> Второе даже предпочительнее, т.к. можно этот самый engine по умолчанию 
> MY> задать через конфиг, кому как удобнее.
> 
> Сейчас так и есть с etersoft-build-utils (правда первый вариант). Так как
> отличия в одной букве утилиты, это вполне приемлимо. И даже удобнее чем
> второй вариант.

Я понял целую одну вещь: есть 2 подхода к именованию утилит:

1. Именовать в жестком unix-style - имена из 2-3, максимум 4 букв, все
аббревиативно, подобрано специально для запоминания. Типичные
представители - программы из coreutils, например.

Плюсы - быстро набирать, при 2-3-4 keystrokes спложно конкурировать с
ними по скорости набора.
Минусы - надо запоминать их все; при наличии множественных вариантов,
незначительно отличающихся друг от друга, получаем сложновоспринимаемые
наборы символов; надо продумывать названия так, чтобы они как можно
лучше ассоциировались с какими-то действиями.

2. Именовать, надеясь на комплишен. Имена тогда значительно длиннее и
максимально описательны. Возникает проблема completion space. Фактически
обязательно использование completion. Как правило, вводится некий
префикс наименования семейства утилит (git-*, gear-*, hsh-*, Sisyphus-*).

В качестве чуть альтернативной реализации - это когда делается одна
"объединяющая" утилита (как в cvs, svn, git, gem) у которой первый
параметр - команда, которую надо выполнить. Удобно, если есть умный
комплишен а ля zsh или bash-completions, довольно неудобно, если нет.

Плюсы - наглядно, не надо запоминать практически ничего, кроме первых
букв префикса.
Минусы - чуть медленнее набирать, большая надежда на completion, надо
продумывать так, чтобы удобно было комплитить и в completion попадали
только нужные команды.

Есть поклонники как одного стиля, так и другого. Поэтому, чтобы не
мешать друг другу и не ломать копий - все равно это абсолютно вопрос
привычки/удобства для конкретного человека - предлагаю сделать и так, и
так - ровно как с опциями (-f и --force). Сделать симлинками или
алиасами 2 варианта вызова - и длинный, и короткий.

-- 
WBR, Mikhail Yakshin AKA GreyCat
ALT Linux [http://www.altlinux.ru] [xmpp:greycat на altlinux.org]



Подробная информация о списке рассылки Devel