ALT Linux Team development discussions
 help / color / mirror / Atom feed
* [devel] Gear и внешние VCS.
@ 2014-06-17 22:59 Igor Vlasenko
  2014-06-18  6:07 ` Anton Farygin
  0 siblings, 1 reply; 4+ messages in thread
From: Igor Vlasenko @ 2014-06-17 22:59 UTC (permalink / raw)
  To: devel; +Cc: Anton Farygin

Господа,

переношу вопросы автоматизации работы с gear репозиториями,
которые обновляются из удаленнного VCS, в отдельную тему.

Здесь хотел бы обсудить, какие утилиты должны быть добавлены
извне к gear и какие изменения должны быть в самом gear сделаны,
чтобы сделать совместную работу с gear репозиториями,
которые обновляются из удаленнного VCS, 
1) удобной для стороннего человека
2) удобной для робота.

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

Итак, представим себя в роли члена qa@. Все майнтайнеры на море,
а в это время как раз обнаружена страшная увязвимость headbleed.
Апстримы оперативно выпустили исправления,
майнтайнеров нет, и нужно вместо них обновить их пакеты,
абсолютно чужие, т.е. их gear репозиторий будем видеть в
первый раз.

Что должно быть:
клонируем с git.alt: последнюю собранную версию.

запускаем волшебную команду gear-fetch.
волшебная команда gear-fetch (в gear)
* выкачивает обновление через git (и в идеале, может и git-svn)

над ней может быть моя волшебная надстройка (сакжем,
gear-vcs-update), которая
* (опционально) расставляет при необходимости теги в формате,
который вписан в .gear/rules (например, v@version@).
* (опционально) мержит обновления в ветки с патчами и в master,
вносит изменения в spec.

qa-инженеру остатется только просмотреть изменения и отправить пакет в Сизиф.

но и без волшебной надстройки после gear-fetch все тривиально:
руками мержим, руками add_changelog и послали в Сизиф.

Таперь приземлимся и посмотрим, на что, что есть.

клонируем репозиторий с git.alt и пытаемся руками проэмулировать
волшебную команду gear-fetch, поскольку она еще не существует.

и здесь нас ждет ряд засад. забудем о git-svn, то сплошной ужас.
для простоты пусть будет git. хотим сделать git fetch.

Засада1.  А откуда?

Эта информация есть локально у майнтайнера, но у нас она утеряна --
в нашем клоне репозитория информации о его remotes нет.
Майнтайнер в отпуске на море, слишком далеко, чтобы использовать телепатию.

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

И эта запись должна быть понятной для утилит.
к примеру, запись в спеке
# VCS: ...
может помочь для репозитория Андрея, а в остальных 9 из 10 случаев
означает только, что пакет был основан на Fedor'овском пакете. 
Возможно, роботом дернут, возможно, руками взят.

Т.е. нужен файл в недрах .gear,
.gear/upstream/откуда.

далее, * Засада2 *.

Узнали <Где>, можем написать git getch <Где>. 
но что брать?
git getch <Где> <что>.

Есть commit с исправлениями. и в master, и cherry-pick'ed в ветвях.
Пока думаем и гадаем, приходим к выводу, что нужна запись в недрах .gear,
.gear/upstream[что].

Альтернативно, можно подождать месяц, когда будет <релиз>, а с ним <тег>,
на который можно будет ориентироваться вместо удаленного бранча.

И тут же плавно проваливаемся в *Засаду 3*.

* Засада3 *. куда? 

напомню, полная команда имеет вид 
git fetch <Где> <что>:<куда>

> IV>> поэтому желательно иметь указание, в какие ветви что куда должно идти.
> AF> честно говоря не понял, зачем это ? вижу всё так-же как и в случае с
> тарболлом и исходниками в отдельном бранче. Ну совсем никакой разницы
> -просто вместо gear update будет git pull. остальные этапы точно такие-же.

Для некоторых репозиториев действительно прокатит,
назвать ее как-то устрашающе gearobersturmbannbranch
и сделать fetch в branch gearobersturmbannbranch:

git fetch <Где> <что>:gearobersturmbannbranch

но, во первых, не все .gear/rules основаны на tags,
к примеру, в virt-viewer
$ cat virt-viewer.git/.gear/rules
tar: upstream:.
и волшебная команда gear-fetch должна поддерживать
и такие rules.

Во вторых, для NMU с одноразовым репозиторием это еще 
прокатит, сделали NMU, а репозиторий выбросили.

Но волшебная команда gear-fetch должна быть
в первую очередь удобна для основного майнтайнера.
У него и так есть волшебная команда git fetch origin,
основанная на тайном знании remotes.
Если там записано, что fetch делается в ветку upstream,
то он делается в ветку upstream.

Приходим к выводу, что нужна запись в недрах .gear,
.gear/upstream[куда].

С ней волшебная команда gear-fetch отработает точно так, как 
git fetch origin.

Иначе она просто намусорит: за ней придется прибрать руками,
ветку upstream передвинуть руками, мусор gearobersturmbannbranch
удалить.

далее, ветка(ветки), записанные в .gear/upstream[куда],
должн(ы) отражаться и в .gear/tags.
т.е. gear-update-tag должна поддерживать .gear/upstream[куда],
т.е. записывать в .gear/tags/list текущие позиции этих 
ветвей, чтобы их можно было восстановить, просто
склонировав репозиторий с git.alt и запустив
волшебную команду gear-fetch.

Так я представляю функциональность базовой
волшебной команды gear-fetch.

Функциональность волшебных надстроек над gear-fetch
можно будет обсудить позже, обсуждение лучше начать
с базовых вещей.

-- 

I V


^ permalink raw reply	[flat|nested] 4+ messages in thread

* Re: [devel] Gear и внешние VCS.
  2014-06-17 22:59 [devel] Gear и внешние VCS Igor Vlasenko
@ 2014-06-18  6:07 ` Anton Farygin
  2014-06-18 21:28   ` Igor Vlasenko
  0 siblings, 1 reply; 4+ messages in thread
From: Anton Farygin @ 2014-06-18  6:07 UTC (permalink / raw)
  To: Igor Vlasenko, devel

On 18.06.2014 02:59, Igor Vlasenko wrote:
> Засада1.  А откуда?
Это же просто. С репозитория, указанного в watch файле. Если такого нет, 
то два варианта:
1) автоматическое обновление не работает
2) добавить свой watch файл, нагуглив репозиторий апстрима.
> далее, * Засада2 *.
>
> Узнали <Где>, можем написать git getch <Где>.
> но что брать?
> git getch <Где> <что>.
>
> Есть commit с исправлениями. и в master, и cherry-pick'ed в ветвях.
> Пока думаем и гадаем, приходим к выводу, что нужна запись в недрах .gear,
> .gear/upstream[что].
Нет. нужна запись в watch файле - регексп, описывающий тэг на основании 
которого можно сделать вывод о новом релизе.
и брать надо именно тэг - не ветки же тащить с апстрима.

>
> Альтернативно, можно подождать месяц, когда будет <релиз>, а с ним <тег>,
> на который можно будет ориентироваться вместо удаленного бранча.
Эээ... а кто-то хочет собирать не-релизы ? а зачем ?
>
> И тут же плавно проваливаемся в *Засаду 3*.
>
> * Засада3 *. куда?
>
> напомню, полная команда имеет вид
> git fetch <Где> <что>:<куда>
см. ниже. На самом деле, ответ "куда" должен сформироваться из 
.gear/rules - это сильно зависит от того, как устроен обрабатываемый гит.
>
>> IV>> поэтому желательно иметь указание, в какие ветви что куда должно идти.
>> AF> честно говоря не понял, зачем это ? вижу всё так-же как и в случае с
>> тарболлом и исходниками в отдельном бранче. Ну совсем никакой разницы
>> -просто вместо gear update будет git pull. остальные этапы точно такие-же.
> Для некоторых репозиториев действительно прокатит,
> назвать ее как-то устрашающе gearobersturmbannbranch
> и сделать fetch в branch gearobersturmbannbranch:
>
> git fetch <Где> <что>:gearobersturmbannbranch
>
> но, во первых, не все .gear/rules основаны на tags,
> к примеру, в virt-viewer
> $ cat virt-viewer.git/.gear/rules
> tar: upstream:.
> и волшебная команда gear-fetch должна поддерживать
> и такие rules.
А должна ли ? почему-то rpm-uscan не поддерживает репозитории без watch 
файлов.
>
> Во вторых, для NMU с одноразовым репозиторием это еще
> прокатит, сделали NMU, а репозиторий выбросили.
>
> Но волшебная команда gear-fetch должна быть
> в первую очередь удобна для основного майнтайнера.
> У него и так есть волшебная команда git fetch origin,
> основанная на тайном знании remotes.
> Если там записано, что fetch делается в ветку upstream,
> то он делается в ветку upstream.
>
> Приходим к выводу, что нужна запись в недрах .gear,
> .gear/upstream[куда].
или в watch файле, да.

например:
git://git.kernel.org/pub/scm/fs/squashfs/squashfs-tools.git 
v([0-9]*\.[0-9]*) local:upstream


Кстати, это же "полечит" проблему из virt-viewer, хотя я по прежднему 
думаю что указывать ветку в качестве источника тарболла - криво.
>
> С ней волшебная команда gear-fetch отработает точно так, как
> git fetch origin.
>
> Иначе она просто намусорит: за ней придется прибрать руками,
> ветку upstream передвинуть руками, мусор gearobersturmbannbranch
> удалить.
>
> далее, ветка(ветки), записанные в .gear/upstream[куда],
> должн(ы) отражаться и в .gear/tags.
> т.е. gear-update-tag должна поддерживать .gear/upstream[куда],
> т.е. записывать в .gear/tags/list текущие позиции этих
> ветвей, чтобы их можно было восстановить, просто
> склонировав репозиторий с git.alt и запустив
> волшебную команду gear-fetch.
зачем ? эта информация не несёт никакого смысла.
>
> Так я представляю функциональность базовой
> волшебной команды gear-fetch.
>
> Функциональность волшебных надстроек над gear-fetch
> можно будет обсудить позже, обсуждение лучше начать
> с базовых вещей.
>



^ permalink raw reply	[flat|nested] 4+ messages in thread

* Re: [devel] Gear и внешние  VCS.
  2014-06-18  6:07 ` Anton Farygin
@ 2014-06-18 21:28   ` Igor Vlasenko
  2014-06-19 10:08     ` Anton Farygin
  0 siblings, 1 reply; 4+ messages in thread
From: Igor Vlasenko @ 2014-06-18 21:28 UTC (permalink / raw)
  To: ALT Linux Team development discussions

On Wed, Jun 18, 2014 at 10:07:48AM +0400, Anton Farygin wrote:
> git://git.kernel.org/pub/scm/fs/squashfs/squashfs-tools.git
> v([0-9]*\.[0-9]*) local:upstream

да, что-то такое я и думаю сделать в обвязках над.
но, разбить этот файл на 2 части:
aналог watch, скажем release-tag-filter,
в котором будет только

v?([0-9]*\.[0-9]*)

и, скажем, .gear/upstream-remotes,

в котором будет храниться информация, которую в старом формате 
remotes можно было записать как

URL: git://git.kernel.org/pub/scm/fs/squashfs/squashfs-tools.git
Pull: master:upstream

а в формате git config --list ее можно записать как
#remote.origin.fetch=+refs/heads/*:refs/remotes/origin/*
remote.origin.url=git://git.kernel.org/pub/scm/fs/squashfs/squashfs-tools.git
branch.upstream.remote=origin
branch.upstream.merge=refs/heads/upstream

За день осмыслилось, что и gear-fetch не нужен,
достаточно 2-х более простых утилит,
gear-save-remotes и gear-restore-remotes.

Зачем так важно выделить информацию о remotes в отдельный файл?
чтобы сразу вдобавок к возможности отслеживания решить
и другую, на мой взгляд более важную, задачу:

Дать стандартный способ майнтайнерам поделиться с коллегами,
как же обновлять их репозиторий.

Потому что в текущем виде gear репозитории не дружественны
к совместной работе. tarball-обновляемые gear репозитории
дружественны, src.rpm дружественны, а VCS-обновляемые - нет.

Представьте себе, что ваш обновляемый из апстримного git
репозиторий какой-то добрый человек поверх обновил из
tarball'а и отправил на сборку в Сизиф.

Похожее чувство я испытываю, когда нужно обновить перловую
зависимость, но соответствуюший пакет обновляется из VCS.
Там весь пакет на 200 строчек. Я знаю, какая там версия. 
У меня под рукой свежий апстримный tarball. 
Но я не могу взять и обновить - надо рыться в VCS-помойках
и искать, где этот ****ов git и затем настраивать (каждый раз!)
клонированный репозиторий, и все только для того, 
чтобы сделать git fetch origin.

И майнтайнер, который разместил свой пакет в VCS-обновляемом 
gear репозитории не виноват --- это дыра в дизайне gear,
которая делает VCS-обновляемые gear репозитории гораздо худшим
средством для _совместной_ разработки, чем src.rpm.

И всего-то надо инструмент, чтобы gear репозиторий
хранил в себе свои remotes.

как минимум, что-то вроде
gear-save-remotes и gear-restore-remotes

Это удобно и NMUшникам, и основному майнтайнеру:
если remotes не сохраняются, то на git.alt копии его 
репозиториев неполноценные, и если слетит диск,
то не достаточно будет склонировать их с git.alt,
придется заново тратить время на восстановление 
локальных настроек remotes (а если использовался
git-svn, то там все вообще печально).

Да и на даче / в походе удобнее -
не нужно таскать с собой диски 
или тратить время на настройку git-клона.

-- 

I V


^ permalink raw reply	[flat|nested] 4+ messages in thread

* Re: [devel] Gear и внешние  VCS.
  2014-06-18 21:28   ` Igor Vlasenko
@ 2014-06-19 10:08     ` Anton Farygin
  0 siblings, 0 replies; 4+ messages in thread
From: Anton Farygin @ 2014-06-19 10:08 UTC (permalink / raw)
  To: devel

On 19.06.2014 01:28, Igor Vlasenko wrote:
> On Wed, Jun 18, 2014 at 10:07:48AM +0400, Anton Farygin wrote:
>> git://git.kernel.org/pub/scm/fs/squashfs/squashfs-tools.git
>> v([0-9]*\.[0-9]*) local:upstream
>
> да, что-то такое я и думаю сделать в обвязках над.
> но, разбить этот файл на 2 части:
> aналог watch, скажем release-tag-filter,
> в котором будет только
>
> v?([0-9]*\.[0-9]*)
>
> и, скажем, .gear/upstream-remotes,
<skip>
>
> И всего-то надо инструмент, чтобы gear репозиторий
> хранил в себе свои remotes.
>
> как минимум, что-то вроде
> gear-save-remotes и gear-restore-remotes
>
> Это удобно и NMUшникам, и основному майнтайнеру:
> если remotes не сохраняются, то на git.alt копии его
> репозиториев неполноценные, и если слетит диск,
> то не достаточно будет склонировать их с git.alt,
> придется заново тратить время на восстановление
> локальных настроек remotes (а если использовался
> git-svn, то там все вообще печально).
>
> Да и на даче / в походе удобнее -
> не нужно таскать с собой диски
> или тратить время на настройку git-клона.
>

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

ветка upstream легко восстанавливается из
$cat .gear/tags/list
206e6dc17b4a7f4aaac1f8c87ffdc7cd6e7a0ce6 v4.3

единственная проблема - это понять откуда брать апстрим, и эту 
информацию как раз удобно хранить в watch файле.

Если хочется быстрого восстановления, то можно сделать тривиальный 
скрипт, который посмотрит на локальные настройки (как мейнтейнеру 
хочется хранить апстримную ветку локально и название remote ветки)
и сделает два шага:
1) из .gear/tags/list соорудит ветку upstream
2) из watch файла соорудит remote для upstream

Всё очень просто.

Сложно будет в случае нескольких тарболлов из разных веток и двух remote 
upstream Я с таким где-то сталкивался, но и там можно что-то придумать.



^ permalink raw reply	[flat|nested] 4+ messages in thread

end of thread, other threads:[~2014-06-19 10:08 UTC | newest]

Thread overview: 4+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2014-06-17 22:59 [devel] Gear и внешние VCS Igor Vlasenko
2014-06-18  6:07 ` Anton Farygin
2014-06-18 21:28   ` Igor Vlasenko
2014-06-19 10:08     ` Anton Farygin

ALT Linux Team development discussions

This inbox may be cloned and mirrored by anyone:

	git clone --mirror http://lore.altlinux.org/devel/0 devel/git/0.git

	# If you have public-inbox 1.1+ installed, you may
	# initialize and index your mirror using the following commands:
	public-inbox-init -V2 devel devel/ http://lore.altlinux.org/devel \
		devel@altlinux.org devel@altlinux.ru devel@lists.altlinux.org devel@lists.altlinux.ru devel@linux.iplabs.ru mandrake-russian@linuxteam.iplabs.ru sisyphus@linuxteam.iplabs.ru
	public-inbox-index devel

Example config snippet for mirrors.
Newsgroup available over NNTP:
	nntp://lore.altlinux.org/org.altlinux.lists.devel


AGPL code for this site: git clone https://public-inbox.org/public-inbox.git