[Devel] Текущий порядок сборки uniset

Evgeny Sinelnikov sin на etersoft.ru
Пн Мар 21 19:56:08 MSK 2011


21 марта 2011 г. 18:09 пользователь Pavel Vaynerman <pv на etersoft.ru> написал:
>> $ git push
>> $ ssh git.eter rebuild /projects/asu/uniset
>>
>> Куда уж проще? Ну, можно сделать ещё одну обёртку. но я не уверен, что
>> она будет полезна.
>   Это конечно. Я не понял, что за специальный тег я должен сделать.
> И где это делается в приведённых тобой командах..

Тег имелся в виду тот, который нужен для сборки с помощью команды
build, которую запускает rpmbb.
$ ssh git.eter build ИМЯ_РЕПОЗИТОРИЯ ИМЯ_ТЕГА
или
$ ssh git.alt build ИМЯ_РЕПОЗИТОРИЯ ИМЯ_ТЕГА

$ ssh git.alt build --help
Usage: girar-build [--test-only] [-b <binary_repository_name>]
<build_source_1> <build_name_1> ...
where `<build_source> <build_name>' pair is either `<gear_repo> <gear_tag>'
or `srpm <srpm_file>' or `del <package_name>' or `copy <package_name>'.

У нас есть дополнительная команда - rebuild, которая собирает не по
тегу, а по последнему коммиту в ветке.
$ ssh git.eter rebuild --help
Usage: girar-rebuild [--test-only] {[-b <binary_repository_name>]|[-p
<pocket_repository_name>]} <build_source_1> <build_branch_1> ...
where `<build_source> <build_name>' pair is either `<gear_repo>
[<gear_branch>]', where default branch is master

Подробнее здесь:
http://wiki.etersoft.ru/UsesGitEtersoft#h257-9

>> PS: В целом, конечно, хотелось бы единообразия в действиях по сборке.
>> Думаю, что детальная документация на etersoft-build-utils и
>   Не? http://www.altlinux.org/Etersoft-build-utils

Я почему-то искал на нашем wiki. Это лучше, конечно... Но всё также
ужасно, если честно... Впрочем, как и это, и т.п.:
http://wiki.etersoft.ru/UsesGitEtersoft
Вся эта документация применима для типовых случаев. Но совершенно не
детальная, в смысле понимая действий. Она похоже, скорее на мантру,
которую нужно заучить.

В нашем случае, для еtersoft-build-utils, не указаны ограничения, о
которых я упоминал:
- в rpmbb предполагается, что имя пакета совпадает с именем удалённого
репозитория и находится в каталоге packages/ИМЯ_РЕПОЗИОРИЯ
- имена бранчей для бекпортирования фиксированы и я не помню какие, а
у меня где-как - M51, 5.1, p5...
- действия по сборке в карман не предусмотрены, потому что
предполагаются из имени пакета
- ...

Поскольку, команды высокоуровневые и сложные, мне кажется, что при их
описании, нужно не просто указывать выполняемые действия, а развёрнуто
представлять, какие реально команды выполняются.

Например, с ходу. Мне понравилась утилита ginit:
Работа с удалённым репозиторием
    * ginit [git.NAME] - создание удалённого репозитория
- создаю каталог /home/sin/git/testpack
- делаю его текущим
- пробую выполнить
$ ginit
Error in /usr/bin/ginit: Can't detect project name. Run inside git repo.
$ ginit --help
Error in /usr/bin/ginit: Can't detect project name. Run inside git repo.

Где предусловия и постусловия? Пробую так:
$ git init
Initialized empty Git repository in /home/sin/git/testpack/.git/
$ ginit
Create remote testpack repo in git.alt:
girar-init-db:  /people/sin/packages/testpack.git
Create git.alt remote repo alias

Отлично! Где был создан удалённый репозиторий?
$ git remote show
git.alt
$ git remote show git.alt
* remote git.alt
  Fetch URL: git.alt:packages/testpack.git
  Push  URL: git.alt:packages/testpack.git
  HEAD branch: (unknown)

Хорошо. Как создать на git.eter?
$ ginit git.eter
Create remote testpack repo in git.eter:
girar-init-db:  /people/sin/packages/testpack.git
Create git.eter remote repo alias
$ git remote show git.eter
* remote git.eter
  Fetch URL: git.eter:packages/testpack.git
  Push  URL: git.eter:packages/testpack.git
  HEAD branch: (unknown)

Замечательно! Но я должен был об этом всём догадаться. Какая же это
детальная документация? Я только после прочтения всего текста понял,
что [git.NAME] - это предполагаемый псевдоним из ~/.ssh/config для
соответствующего удалённого узла. Об этом тоже нигде не сказано.

Что же, в итоге делает утилита:
#!/usr/bin/ginit
ssh git.NAME init-db GIT_DIR_NAME
git remote add git.NAME git.NAME:package/GIT_DIR_NAME

Я обычно выполняю это вручную.... Иначе я должен помнить, что имя
репозитория будет соответствовать имени каталога, но ведь так не
всегда бывает. Удалённый репозиторий должен иметь такое же имя, а что
если такой уже есть?

Слишком много контекста... Нельзя рассчитывать, что у того, кто читает
документацию, есть какой бы то ни было контекст. Либо об этом нужно
указывать ссылками на другие документы.


>> Думаю, что это тема отдельной задачи.
>  Хорошо. Мне просто хочется сейчас ряд простых действий, для того чтобы
> отправить на сборку новую версию. Если достаточно того, что ты написал выше
> git push
> ssh git.eter rebuild
> пусть так..

нет....
$ ssh git.eter rebuild PACKAGE_NAME [BRANCH_NAME]




-- 
Sin (Sinelnikov Evgeny)


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