From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.2.5 (2008-06-10) on sa.int.altlinux.org X-Spam-Level: X-Spam-Status: No, score=-2.1 required=5.0 tests=AWL,BAYES_00,SPF_PASS autolearn=ham version=3.2.5 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=imath.kiev.ua; s=hydra; t=1403175945; bh=eU+j3Jmn5QlFRAc9IMat6CPvxxhY4PZGGw0EI0Hd/WY=; h=Date:From:To:Subject:References:In-Reply-To; b=IxO1UPYZoh9NrW4CvkO53LhI4qfVCKfJ6/WfQTAYChZ11ZpFzAqYmopKQfAUP3hsE uYUauIdlJEg2eXHA7zO7/L6jHGd80gJg0zkfSmUmkxv4vsVkaYSXCeszqZihoLd58i 7U8Tnhd8PGo9y2FB7LZ7mS0DpNQ00y+xLs1n07t8= X-Virus-Scanned: amavisd-new at imath.kiev.ua DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=imath.kiev.ua; s=hydra; t=1403175940; bh=eU+j3Jmn5QlFRAc9IMat6CPvxxhY4PZGGw0EI0Hd/WY=; h=Date:From:To:Subject:References:In-Reply-To; b=OYWe3MBBhq99+gFdB0byUlGBIOxN6hZgv2BWnjMEX/cPBSQgfOSqdbu3g/Of/j5UH 5SFzSybFzxBI8kDr6Xwp60UlVRpFVURz6TKOWv/vyePCd+UpdiI0B5YIIHKYxMJ3kk 9FH1X6R39FLZhmMACAPHO1w/nHq4sOBhwKSvlODE= Date: Thu, 19 Jun 2014 14:08:16 +0300 From: Igor Vlasenko To: ALT Linux Team development discussions Message-ID: <20140619110814.GA10173@dad.imath.kiev.ua> References: <20140617194200.GA27630@dad.imath.kiev.ua> <20140619075237.GA9295@dad.imath.kiev.ua> MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Disposition: inline Content-Transfer-Encoding: 8bit In-Reply-To: User-Agent: Mutt/1.5.21 (2010-09-15) Subject: Re: [devel] =?utf-8?b?R2VhciDQuCDQstC90LXRiNC90LjQtSAgIFZDUy4=?= X-BeenThere: devel@lists.altlinux.org X-Mailman-Version: 2.1.12 Precedence: list Reply-To: ALT Linux Team development discussions List-Id: ALT Linux Team development discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 19 Jun 2014 11:05:55 -0000 Archived-At: List-Archive: List-Post: На примере netxms расскажу планы по автоматизации работы с VCS - обновляемыми gear репозиториями. Итак, если у нас один VCS - обновляемый gear репозиторий, то проверить, есть ли обновление, тривиально. заходим, запускаем git fetch , глазами смотрим, что приехало. Если же у нас 100 gear репозиториев, то, тратя по 20 секунд на репозиторий, их ручная проверка заберет у нас больше, чем пол часа. Хотелось бы в духе unix-way напустить на нашу коллекцию gear репозиториев какой-нибудь умный скрипт, скажем, будущий rpm-uscan, который меньше чем за минуту проверил бы все репозитории, съэкономив бы нам полчаса, и даже эту минуту, пока он работал, можно было бы потратить с пользой, сделав новую чашку кофе. С tarball обновляемыми gear репозиториями справляется и старый rpm-uscan, осталось научиться работать с VCS - обновляемыми gear репозиториями. Там тоже простой алгоритм - руками мы запускаем git fetch , глазами смотрим, что приехало. Просмотр робот будет делать так: запускает git tags, фильтрует (по умолчанию будет фильтр ^ v?([0-9\.]+[0-9]) $, если апстрим любит теги в другом формате, к примеру, 1.2-release, то для них надо будет создать специальный файл, скажем, .gear/upstream/tag-filter, формат и опции будут похожи на debian/watch), сравнивает версии из отфильтрованных тегов с текущей, и если найдет бОльшую, то приехало обновление. но, перед просмотром, робот должен знать remote . просто просмотреть теги ему достаточно будет git ls-remote --tags а для обновления ему понадобится сделать git fetch . Соответственно, нужно указать роботу, какой 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