[devel] I: gear-uupdate second-announce.

Igor Vlasenko vlasenko на imath.kiev.ua
Ср Июн 11 21:10:00 MSK 2014


On Wed, Jun 11, 2014 at 12:50:24PM +0400, Anton Farygin wrote:
> следующий этап - научить rpm-uscan обновлять правильным образом git

Это давно пройденный этап :)

Специально для rpm-uscan я когда-то написал утилиту gear-uupdate(1)
которая тем и занимается, что обновляет правильным образом git
из исходников.

Поскольку утилита малоизвестная, воспользуюсь случаем, чтобы ее
повторно анонсировать.

> Оно умеет читать .gear-rules ? или какие-то настройки из git ?

Именно. gear-uupdate(1) -- это обертка над парой утилит
gear-uupdate-prepare(1) и gear-uupdate-execute.

gear-uupdate-prepare c помощью библиотеки perl-Gear-Rules
читает .gear[-/]rules, изучая директивы tar и diff, вычисляет,
в какой ветке (и каком подкаталоге если есть) находятся исходники,
есть ли отдельные ветви для патчей, если исходники в отдельной ветке,
то как ее потом мержить в ветку с .gear (просто или с -s ours).

Поддерживаются все основные разумные схемы gear.

> у меня исходники лежат в бранче upstream и мержатся в master. 

Эта схема в числе поддерживаемых :)

> Но не всегда ;)

Проверить, поддерживается ли конкретная схема gear репозитория,
можно с помощью утилиты gear-rules-verify.

gear-rules-verify выдаст подробную диагностику,
совместим ли репозиторий с gear-uupdate(1).

В частности, если в репозитории есть коммиты, автор которых
не состоит в team, то gear-uupdate откажется работать.
Логика здесь в том, что похоже, репозиторий ранее обновлялся
из апстримного git/svn/otherVCS, а теперь мы хотим обновить
его из тарбола. как правило, так делать не надо.
Вместо полученного треш-репозитория лучше
завести новый git репозиторий или залить обновление как srpm.

А так, большое количество схем gear репозиториев поддерживается.

Руками его запускают так:
gear-uupdate --upstream-version 6.8.9.3 ImageMagick-6.8.9-3.tar.xz

При первом запуске лучше не запускать сразу gear-uupdate, а запустить 
gear-uupdate-prepare --upstream-version 6.8.9.3 ImageMagick-6.8.9-3.tar.xz

gear-uupdate-prepare сначала выполнит проверки из gear-rules-verify.

Затем, gear-uupdate-prepare (ничего не меняя в репозитории)
генерирует набор shell скриптов. Эти скрипты могут быть созданы
в корне gear репозитория, если апстрим в подкаталоге в текущей ветке.
в остальных случаях скрипты надо прятать от git, поэтому они создаются
в папке .git/uupdate/.
после выполнения gear-uupdate-prepare
в .git/uupdate/ будет что-то вроде

01-checkout-and-update-upstream-branch.sh
02-merge-upstream-to-patch1-branch.sh
...
07-merge-upstream-to-patch6-branch.sh
10-merge-to-main-and-update-spec-and-tags.sh

Эти скрипты можно просмотреть и убедиться еще раз,
что робот понял структуру репозитория правильно.

После чего их можно выполнить с помощью gear-uupdate-execute.
Далее уже сразу можно запускать gear-uupdate.

Впрочем, rpm-uscan (и gear-cronbuild) обучен запускать
gear-uupdate самостоятельно.

gear-cronbuild при наличии watch файла и отсутствии 
cronbuild скриптов просто молча и принудительно запускает 
gear-uupdate.

rpm-uscan с обычным watch файлом так не делает.

Есть 2 варианта, как заставить rpm-uscan сразу после скачивания
вызвать gear-uupdate:
1) вызвать rpm-uscan с опцией,
rpm-uscan --force-action gear-uupdate
2) добавить в watch файл магию - добавить еще одну колонку,
в которой написать uupdate (можно gear-uupdate).

uupdate -- это магическая утилита из debian, которая
обновляет debian репозиторий. у нас gear репозиторий,
поэтому ей на замену я написал gear-uupdate,
которая обновляет gear репозиторий,
так, чтобы она была полностью совместима
с debian --- все, что написано в uscan(1) (тж. rpm-uscan(1))
будет работать и у нас.


--

I V



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