ALT Linux Team development discussions
 help / color / mirror / Atom feed
From: Igor Vlasenko <vlasenko@imath.kiev.ua>
To: ALT Linux Team development discussions <devel@lists.altlinux.org>
Subject: Re: [devel] Gear и внешние   VCS.
Date: Thu, 19 Jun 2014 14:08:16 +0300
Message-ID: <20140619110814.GA10173@dad.imath.kiev.ua> (raw)
In-Reply-To: <CANM4Ruh-cz8JW+L0x=WsKUE7dfPri8VyZy7VYhHO+nJd0MXoOA@mail.gmail.com>

На примере netxms расскажу планы по автоматизации работы 
с VCS - обновляемыми gear репозиториями.

Итак, если у нас один VCS - обновляемый gear репозиторий,
то проверить, есть ли обновление, тривиально. заходим,
запускаем git fetch <upstream>, глазами смотрим, что приехало.

Если же у нас 100 gear репозиториев, то, тратя по 20 секунд
на репозиторий, их ручная проверка заберет у нас больше, чем пол часа.

Хотелось бы в духе unix-way напустить на нашу коллекцию
gear репозиториев какой-нибудь умный скрипт, скажем,
будущий rpm-uscan, который меньше чем за минуту
проверил бы все репозитории, съэкономив бы нам полчаса,
и даже эту минуту, пока он работал, можно было бы потратить с пользой,
сделав новую чашку кофе.

С tarball обновляемыми gear репозиториями справляется 
и старый rpm-uscan, осталось научиться работать 
с VCS - обновляемыми gear репозиториями.
Там тоже простой алгоритм - руками мы 
запускаем git fetch <upstream>, глазами смотрим, что приехало.

Просмотр робот будет делать так: запускает git tags, фильтрует
(по умолчанию будет фильтр ^ v?([0-9\.]+[0-9]) $,
если апстрим любит теги в другом формате, к примеру,
1.2-release, то для них надо будет создать специальный
файл, скажем, .gear/upstream/tag-filter, формат и опции 
будут похожи на debian/watch),
сравнивает версии из отфильтрованных тегов с текущей,
и если найдет бОльшую, то приехало обновление.

но, перед просмотром, робот должен знать remote <upstream>.
просто просмотреть теги ему достаточно будет git ls-remote --tags <upstream>
а для обновления ему понадобится сделать git fetch <upstream>.

Соответственно, нужно указать роботу, какой remote использовать.
для этого нужен будет специальный файл, скажем, .gear/upstream/remotes.

Формат этого файла, думаю, формат git-config(1).
в нем должен находиться фрагмент .git/config,
который отвечает за текущие используемые remotes.

Для netxms .gear/upstream/remotes будет иметь вид:
==== .gear/upstream/remotes =========================
[remote "upstream"]
        url = git://git.netxms.org/public/netxms.git
        fetch = +refs/heads/*:refs/remotes/upstream/*
=====================================================
если бы использовался мерж в локальную ветвь upstream, 
то там могло бы быть что-то вроде
==== .gear/upstream/remotes =========================
[remote "upstream"]
        url = git://git.netxms.org/public/netxms.git
        fetch = +refs/heads/*:refs/remotes/upstream/*
 [branch "upstream"]
        remote = upstream
        merge = refs/heads/upstream
=====================================================
его можно легко создать руками, скопировав туда нужный 
кусок из .git/config.
Обратно восстановить рабочий .git/config в клоне из
неполноценной копии на git.alt тоже тривиально:
cat .gear/upstream/remotes >> .git/config.

Но, конечно, лучше иметь специализированные утилиты
gear-store-remotes / gear-restore-remotes.
так, gear-restore-remotes сделает backup .git/config,
проверит, нет ли уже там тех ключей, и не 
запустится, если найдет.

gear-store-remotes проверит сначала, есть ли .git/remotes/*.
если найдется .git/remotes/foo, не указывающий на git.alt,
gear-store-remotes посоветует сначала сконвертировать его
в новый формат (в .git/config) командой
git remote rename foo foo
и с таким сообщением завершится.
Далее, в случае .git/config для netxms внизу,
gear-store-remotes проигнорирует [remote "origin"],
так как он указывает на git.alt.
Для netxms останется 2 remote:
[svn-remote "svn"] и [remote "upstream"].
если бы остался только один,
gear-store-remotes его бы молча и выбрал,
а также, если есть, связанные с этим remotes бранчи.

Поскольку найдено 2 remote, то утилита спросит у майнтайнера, 
какие из них сохранить. можно ей указать опциями, --all-remotes, 
или --remotes=upstream, или же она выведет dialog(1)
чтобы майнтайнер отметил, какие remotes он светит наружу,
для того, чтобы другие майнтайнеры и роботы могли пользоваться
его gear репозиторием.
Затем утилита записывает выбранный фрагмент конфига
 в .gear/upstream/remotes и вызывает 
git add .gear/upstream/remotes.

Теперь репозиторий, в котором есть .gear/upstream/remotes,
становится полноценным с точки зрения возможности совместной рааботы.

Работа с ним выглядит приблизительно так:

$ girar-clone-build-commit foo
$ cd foo.git
$ gear-restore-remotes
$ gear-fetch
$ fix bugs (например, оформляем апстримный коммит с исправлением как патч)
$ srpmnmu -i *.spec
$ girar-nmu-helper-git-push-build -c -T
$ cd ..
$ rm -rf foo.git

Соответственно, когда такие утилиты будут готовы,
надо будет просить всех майнтайнеров, использующих
VCS - обновляемые gear репозитории, создать и опубликовать
в этих репозиториях .gear/upstream/remotes,
а если есть желание ограничить доступ к своему репозиторию,
то делать это с помощью acl, а не сокрытием его служебной
информации.


On Thu, Jun 19, 2014 at 12:00:08PM +0400, Eugene Prokopiev wrote:
> 19 июня 2014 г., 11:52 Igor Vlasenko написал:
> > Прошу прощения, пришлите, пожалуйста, из netxms.git еще для опытов
> > .git/config и, если есть что-то в .git/remotes/ (в старом формате),
> > то и их.
> Пожалуйста:
> 
> $ cat git/netxms/.git/config
> [core]
>         repositoryformatversion = 0
>         filemode = true
>         bare = false
>         logallrefupdates = true
> [svn-remote "svn"]
>         url = https://svn.netxms.org/public/netxms
>         fetch = trunk:refs/remotes/trunk
>         branches = branches/*:refs/remotes/*
>         tags = tags/*:refs/remotes/tags/*
> [remote "origin"]
>         url = git.alt:packages/netxms
>         fetch = +refs/heads/*:refs/remotes/origin/*
> [branch "master"]
>         remote = origin
>         merge = refs/heads/master
> [remote "upstream"]
>         url = git://git.netxms.org/public/netxms.git
>         fetch = +refs/heads/*:refs/remotes/upstream/*
> 
> $ ls git/netxms/.git/remotes
> ls: невозможно получить доступ к git/netxms/.git/remotes: Нет такого
> файла или каталога
> 
> Апстрим переехал с svn на git некоторое время назад

-- 

I V


  reply	other threads:[~2014-06-19 11:08 UTC|newest]

Thread overview: 34+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2014-06-17 19:42 [devel] Q: редкие примеры .gear/rules ? Igor Vlasenko
2014-06-18  4:45 ` Eugene Prokopiev
2014-06-18 17:53   ` Igor Vlasenko
2014-06-19  7:52   ` Igor Vlasenko
2014-06-19  8:00     ` Eugene Prokopiev
2014-06-19 11:08       ` Igor Vlasenko [this message]
2014-06-19 11:10         ` [devel] Gear и внешние VCS Anton Farygin
2014-06-19 11:55           ` Igor Vlasenko
2014-06-19 12:10             ` Anton Farygin
2014-06-19 12:17               ` Igor Vlasenko
2014-06-19 12:49                 ` Anton Farygin
2014-06-19 13:09                   ` Anton Farygin
2014-06-19 14:38                     ` Igor Vlasenko
2014-06-19 14:24                   ` Igor Vlasenko
2014-06-19 17:02                     ` Anton Farygin
2014-06-19 18:20                       ` Igor Vlasenko
2014-06-19 18:35                         ` Anton Farygin
2014-06-19 18:52                           ` Igor Vlasenko
2014-06-19 19:08                             ` Anton Farygin
2014-06-19 19:46                               ` Igor Vlasenko
2014-06-19 19:50                                 ` Igor Vlasenko
2014-06-20  5:51                                 ` Anton Farygin
2014-06-20 12:23                                   ` Igor Vlasenko
2014-06-20  5:01                         ` Eugene Prokopiev
2014-06-20 12:11                           ` Igor Vlasenko
2014-06-20 12:20                             ` Eugene Prokopiev
2014-06-18  6:14 ` [devel] Q: редкие примеры .gear/rules ? Anton Farygin
2014-06-18 10:30   ` Dmitry V. Levin
2014-06-18 17:54     ` Igor Vlasenko
2014-06-18 18:30   ` Igor Vlasenko
2014-06-18 18:40     ` Pavel Vainerman
2014-06-18 19:08       ` Anton Farygin
2014-06-18  9:50 ` Anton V. Boyarshinov
2014-06-18 10:53 ` Sergey V Turchin

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20140619110814.GA10173@dad.imath.kiev.ua \
    --to=vlasenko@imath.kiev.ua \
    --cc=devel@lists.altlinux.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link

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