Gear/gear-uupdate

Материал из ALT Linux Wiki

< Gear(Различия между версиями)
Перейти к: навигация, поиск
(Новая страница: «{{Category navigation|title=gear|category=gear|sortkey={{SUBPAGENAME}}}} {{Category navigation|title=Автоматизация работы с пакетами|cate...»)
 
(16 промежуточных версий не показаны.)
Строка 1: Строка 1:
-
{{Category navigation|title=gear|category=gear|sortkey={{SUBPAGENAME}}}}
+
== Назначение gear-uupdate ==
-
{{Category navigation|title=Автоматизация работы с пакетами|category=Packaging Automation}}
+
-
[[Категория:Справочники]]
+
-
<!-- {{stub}} -->
+
-
== gear-uupdate ==
+
gear-uupdate(1) (uu, два u) ---  утилита для автоматического обновления gear репозитория из архива с исходниками "правильным образом".
 +
Она умеет читать {{path|.gear-rules|.gear/rules}}, находить место и ветвь, где хранятся распакованные исходники,
 +
обновлять их, мержить результат в ветви с патчами и в главную ветвь.
-
gear-uupdate утилита для автоматического обновления gear репозитория из архива с исходниками.
+
Не путать с утилитой gear-update, предназначенной для распаковки архива с исходниками в указанный каталог с регистрацией результата в git.
 +
gear-uupdate вызывает gear-update в процессе своей работы.
-
> следующий этап - научить rpm-uscan обновлять правильным образом git
+
Утилита является аналогом для ALT Linux утилиты uupdate(1) из Debian, предназначенной для обновления .deb пакетов с помощью watch файлов совместно с утилитой uscan(1), и совместима с ней по аргументам и формату вызова.
-
Это давно пройденный этап :)
+
В ALT Linux gear-uupdate(1) может неявно вызываться утилитами rpm-uscan(1) или gear-cronbuild-apply-hooks(1)
 +
для автоматизированного обновления gear репозитория,
 +
либо же ее можно использовать вручную для облегчения процесса обновления gear репозитория.
-
Специально для rpm-uscan я когда-то написал утилиту gear-uupdate(1)
+
== принцип работы и поддерживаемые репозитории.==
-
которая тем и занимается, что обновляет правильным образом git
+
-
из исходников.
+
-
Поскольку утилита малоизвестная, воспользуюсь случаем, чтобы ее
+
gear-uupdate c помощью библиотеки perl-Gear-Rules
-
повторно анонсировать.
+
-
 
+
-
> Оно умеет читать .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[-/]rules, изучая директивы tar и diff, вычисляет,
в какой ветке (и каком подкаталоге если есть) находятся исходники,
в какой ветке (и каком подкаталоге если есть) находятся исходники,
Строка 30: Строка 22:
то как ее потом мержить в ветку с .gear (просто или с -s ours).
то как ее потом мержить в ветку с .gear (просто или с -s ours).
-
Поддерживаются все основные разумные схемы gear.
+
Поддерживаются все основные разумные схемы gear, в частности, описанные в статье
-
 
+
[[Руководство_по_gear#.D0.A0.D0.B5.D0.BF.D0.BE.D0.B7.D0.B8.D1.82.D0.BE.D1.80.D0.B8.D0.B8_.D1.81_.D0.B8.D0.BC.D0.BF.D0.BE.D1.80.D1.82.D0.B8.D1.80.D0.BE.D0.B2.D0.B0.D0.BD.D0.BD.D1.8B.D0.BC.D0.B8_upstream-.D1.82.D0.B0.D1.80.D0.B1.D0.BE.D0.BB.D0.B0.D0.BC.D0.B8|Руководство по gear]]
-
> у меня исходники лежат в бранче upstream и мержатся в master.
+
-
 
+
-
Эта схема в числе поддерживаемых :)
+
-
 
+
-
> Но не всегда ;)
+
Проверить, поддерживается ли конкретная схема gear репозитория,
Проверить, поддерживается ли конкретная схема gear репозитория,
можно с помощью утилиты gear-rules-verify.
можно с помощью утилиты gear-rules-verify.
-
gear-rules-verify выдаст подробную диагностику,
+
gear-rules-verify  
-
совместим ли репозиторий с gear-uupdate(1).
+
выдаст подробную диагностику, совместим ли репозиторий с gear-uupdate(1).
-
 
+
В частности, если в репозитории есть коммиты, автор которых
В частности, если в репозитории есть коммиты, автор которых
не состоит в team, то gear-uupdate откажется работать.
не состоит в team, то gear-uupdate откажется работать.
Строка 51: Строка 37:
завести новый git репозиторий или залить обновление как srpm.
завести новый git репозиторий или залить обновление как srpm.
-
А так, большое количество схем gear репозиториев поддерживается.
+
=== запуск утилиты вручную ===
-
Руками его запускают так:
+
gear-uupdate(1) -- это обертка над парой утилит gear-uupdate-prepare(1) и gear-uupdate-execute.
-
gear-uupdate --upstream-version 6.8.9.3 ImageMagick-6.8.9-3.tar.xz
+
 
 +
Руками gear-uupdate запускают так:
 +
gear-uupdate --upstream-version 6.8.9.3 ImageMagick-6.8.9-3.tar.xz
 +
либо так
 +
gear-uupdate ImageMagick-6.8.9-3.tar.xz 6.8.9.3
При первом запуске лучше не запускать сразу gear-uupdate, а запустить
При первом запуске лучше не запускать сразу gear-uupdate, а запустить
-
gear-uupdate-prepare --upstream-version 6.8.9.3 ImageMagick-6.8.9-3.tar.xz
+
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 сначала выполнит проверки из gear-rules-verify.
-
Затем, gear-uupdate-prepare (ничего не меняя в репозитории)
+
Затем, {{cmd|gear-uupdate-prepare}} (ничего не меняя в репозитории)
генерирует набор shell скриптов. Эти скрипты могут быть созданы
генерирует набор shell скриптов. Эти скрипты могут быть созданы
в корне gear репозитория, если апстрим в подкаталоге в текущей ветке.
в корне gear репозитория, если апстрим в подкаталоге в текущей ветке.
в остальных случаях скрипты надо прятать от git, поэтому они создаются
в остальных случаях скрипты надо прятать от git, поэтому они создаются
в папке .git/uupdate/.
в папке .git/uupdate/.
-
после выполнения gear-uupdate-prepare
+
 
 +
После выполнения {{cmd|gear-uupdate-prepare}}
в .git/uupdate/ будет что-то вроде
в .git/uupdate/ будет что-то вроде
-
01-checkout-and-update-upstream-branch.sh
+
__~.uupdate-step-001-checkout-and-update-upstream-branch.sh
-
02-merge-upstream-to-patch1-branch.sh
+
__~.uupdate-step-002-merge-upstream-to-patch1-branch.sh
-
...
+
...
-
07-merge-upstream-to-patch6-branch.sh
+
__~.uupdate-step-006-merge-upstream-to-patch5-branch.sh
-
10-merge-to-main-and-update-spec-and-tags.sh
+
__~.uupdate-step-007-merge-upstream-to-master.sh
 +
__~.uupdate-step-008-update-spec-and-tags.sh
Эти скрипты можно просмотреть и убедиться еще раз,
Эти скрипты можно просмотреть и убедиться еще раз,
что робот понял структуру репозитория правильно.
что робот понял структуру репозитория правильно.
 +
После чего их можно выполнить с помощью {{cmd|gear-uupdate-execute}}.
-
После чего их можно выполнить с помощью gear-uupdate-execute.
+
Утилита {{cmd|gear-uupdate-execute}} по очереди выполняет сгенерированные скрипты,
-
Далее уже сразу можно запускать gear-uupdate.
+
удаляя скрипт, если он отработал нормально.
 +
Во многих схемах устройства gear репозитория изменения автора и изменения майнтайнера
 +
мержатся с помощью git, при чем, возможно, ветвь с оригинальными исходниками необходимо будет мержить в несколько ветвей.
 +
Для таких операций достаточно часто возникают конфликты.
-
Впрочем, rpm-uscan (и gear-cronbuild) обучен запускать
+
Если конфликт при merge произошел, то {{cmd|gear-uupdate-execute}} остановится на скрипте,
-
gear-uupdate самостоятельно.
+
который завершился с ошибкой.
 +
git при этом будет в той ветви, в которой происходил merge.
 +
В таком случае майнтайнеру необходимо будет вручную разрешить конфликт в исходных файлах,
 +
и закоммитить изменения в git. При этом
 +
скрипт __~.uupdate-step-*, на котором произошел сбой, можно использовать
 +
в качестве готового шаблона команд.
 +
Затем можно удалить этот скрипт, и опять запустить {{cmd|gear-uupdate-execute}},
 +
который выполнит оставшиеся скрипты.
-
gear-cronbuild при наличии watch файла и отсутствии
+
Если убедиться, что gear-uupdate-prepare/gear-uupdate-execute отрабатывают нормально,
-
cronbuild скриптов просто молча и принудительно запускает
+
далее уже сразу можно запускать gear-uupdate.
-
gear-uupdate.
+
-
rpm-uscan с обычным watch файлом так не делает.
+
=== запуск gear-uupdate из-под других утилит ===
-
Есть 2 варианта, как заставить rpm-uscan сразу после скачивания
+
{{cmd|rpm-uscan}} (и {{cmd|gear-cronbuild}}) обучены запускать {{cmd|gear-uupdate}} самостоятельно.
-
вызвать gear-uupdate:
+
-
1) вызвать rpm-uscan с опцией,
+
-
rpm-uscan --force-action gear-uupdate
+
-
2) добавить в watch файл магию - добавить еще одну колонку,
+
-
в которой написать uupdate (можно gear-uupdate).
+
-
uupdate -- это магическая утилита из debian, которая
+
{{cmd|rpm-uscan}} с обычным watch файлом по умолчанию только проверяет наличие обновлений
-
обновляет debian репозиторий. у нас gear репозиторий,
+
и скачивает их. {{cmd|gear-uupdate}} при этом не вызывается.
 +
 
 +
Есть 2 варианта, как заставить {{cmd|rpm-uscan}} сразу после скачивания
 +
вызвать {{cmd|gear-uupdate}}, чтобы тут же обновить gear репозиторий скачанным файлом:
 +
 
 +
'''1)''' вызвать {{cmd|rpm-uscan}} с опцией --force-action <user action>:
 +
rpm-uscan --force-action gear-uupdate
 +
 
 +
'''2)''' добавить в watch файл магию <user action>.
 +
 
 +
В формате watch файла (см. rpm-uscan(1)) предусмотрена дополнительная
 +
колонка  для <user action> -- вызова команды, указанной пользователем.
 +
В Debian, как правило, если эта колонка используется, то в ней написано {{cmd|uupdate}}.
 +
 
 +
uupdate(1) -- это магическая утилита из debian, которая
 +
обновляет debian репозиторий. У нас же gear репозиторий,
поэтому ей на замену я написал gear-uupdate,
поэтому ей на замену я написал gear-uupdate,
-
которая обновляет gear репозиторий,
+
которая обновляет gear репозиторий, так, чтобы она была полностью совместима
-
так, чтобы она была полностью совместима
+
с debian --- все, что написано о watch файлах и uupdate в uscan(1) (тж. rpm-uscan(1))
-
с debian --- все, что написано в uscan(1) (тж. rpm-uscan(1))
+
будет работать и у нас.
будет работать и у нас.
 +
 +
Как следствие, можно добавить еще одну колонку для <user action>, т.е.
 +
команды, указанной пользователем, в которой написать gear-uupdate (можно писать {{cmd|uupdate}},
 +
{{cmd|rpm-uscan}} при этом все равно вызовет {{cmd|gear-uupdate}})
 +
и после скачивания новой версии {{cmd|gear-uupdate}} будет вызван автоматически.
 +
 +
[[Gear/cronbuild|gear-cronbuild]] при наличии watch файла и отсутствии
 +
cronbuild скриптов просто молча запускает rpm-uscan с опцией --force-action gear-uupdate,
 +
что дает эффект принудительного вызова gear-uupdate при наличии обновления.
 +
 +
{{Category navigation|title=gear|category=gear|sortkey={{SUBPAGENAME}}}}
 +
{{Category navigation|title=Автоматизация работы с пакетами|category=Packaging Automation}}
 +
[[Категория:Справочники]]

Текущая версия на 18:15, 16 июля 2015

Содержание

Назначение gear-uupdate

gear-uupdate(1) (uu, два u) --- утилита для автоматического обновления gear репозитория из архива с исходниками "правильным образом". Она умеет читать .gear-rules, находить место и ветвь, где хранятся распакованные исходники, обновлять их, мержить результат в ветви с патчами и в главную ветвь.

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

Утилита является аналогом для ALT Linux утилиты uupdate(1) из Debian, предназначенной для обновления .deb пакетов с помощью watch файлов совместно с утилитой uscan(1), и совместима с ней по аргументам и формату вызова.

В ALT Linux gear-uupdate(1) может неявно вызываться утилитами rpm-uscan(1) или gear-cronbuild-apply-hooks(1) для автоматизированного обновления gear репозитория, либо же ее можно использовать вручную для облегчения процесса обновления gear репозитория.

принцип работы и поддерживаемые репозитории.

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

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

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

gear-rules-verify 

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

запуск утилиты вручную

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

Руками gear-uupdate запускают так:

gear-uupdate --upstream-version 6.8.9.3 ImageMagick-6.8.9-3.tar.xz

либо так

gear-uupdate ImageMagick-6.8.9-3.tar.xz 6.8.9.3

При первом запуске лучше не запускать сразу 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/ будет что-то вроде

__~.uupdate-step-001-checkout-and-update-upstream-branch.sh
__~.uupdate-step-002-merge-upstream-to-patch1-branch.sh
...
__~.uupdate-step-006-merge-upstream-to-patch5-branch.sh
__~.uupdate-step-007-merge-upstream-to-master.sh
__~.uupdate-step-008-update-spec-and-tags.sh

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

Утилита gear-uupdate-execute по очереди выполняет сгенерированные скрипты, удаляя скрипт, если он отработал нормально. Во многих схемах устройства gear репозитория изменения автора и изменения майнтайнера мержатся с помощью git, при чем, возможно, ветвь с оригинальными исходниками необходимо будет мержить в несколько ветвей. Для таких операций достаточно часто возникают конфликты.

Если конфликт при merge произошел, то gear-uupdate-execute остановится на скрипте, который завершился с ошибкой. git при этом будет в той ветви, в которой происходил merge. В таком случае майнтайнеру необходимо будет вручную разрешить конфликт в исходных файлах, и закоммитить изменения в git. При этом скрипт __~.uupdate-step-*, на котором произошел сбой, можно использовать в качестве готового шаблона команд. Затем можно удалить этот скрипт, и опять запустить gear-uupdate-execute, который выполнит оставшиеся скрипты.

Если убедиться, что gear-uupdate-prepare/gear-uupdate-execute отрабатывают нормально, далее уже сразу можно запускать gear-uupdate.

запуск gear-uupdate из-под других утилит

rpm-uscangear-cronbuild) обучены запускать gear-uupdate самостоятельно.

rpm-uscan с обычным watch файлом по умолчанию только проверяет наличие обновлений и скачивает их. gear-uupdate при этом не вызывается.

Есть 2 варианта, как заставить rpm-uscan сразу после скачивания вызвать gear-uupdate, чтобы тут же обновить gear репозиторий скачанным файлом:

1) вызвать rpm-uscan с опцией --force-action <user action>:

rpm-uscan --force-action gear-uupdate

2) добавить в watch файл магию <user action>.

В формате watch файла (см. rpm-uscan(1)) предусмотрена дополнительная колонка для <user action> -- вызова команды, указанной пользователем. В Debian, как правило, если эта колонка используется, то в ней написано uupdate.

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

Как следствие, можно добавить еще одну колонку для <user action>, т.е. команды, указанной пользователем, в которой написать gear-uupdate (можно писать uupdate, rpm-uscan при этом все равно вызовет gear-uupdate) и после скачивания новой версии gear-uupdate будет вызван автоматически.

gear-cronbuild при наличии watch файла и отсутствии cronbuild скриптов просто молча запускает rpm-uscan с опцией --force-action gear-uupdate, что дает эффект принудительного вызова gear-uupdate при наличии обновления.

 
Личные инструменты