[devel] gear -- создание тарбола из другого branch
Alex V. Myltsev
=?iso-8859-1?q?avm_=CE=C1_altlinux=2Eru?=
Вт Сен 26 14:14:25 MSD 2006
On Mon, 25 Sep 2006 12:09:04 +0400
Anton Farygin wrote:
> Т.е. - вопрос, как скачивать сорцы определённых версий пакетов ?
У меня есть такое представление о том, как должен работать gear-release:
* Читает .gear-tags, в котором написано:
branch1 path1
branch2 path2
...
* Из каждого бранча извлекает tree id посредством git-rev-parse и
git-cat-file.
* Создаёт новое дерево следующим путём:
{
git-ls-tree HEAD
for (tree, path) in .gear-tags:
echo "040000 tree $tree $path"
} >git-mktree
То есть пришивает к текущему дереву деревья из нужных бранчей под
нужными именами.
* Создаёт новый коммит1, который ссылается на новосозданное дерево, а
родителем числит прошлый release commit. Создаёт новый коммит2,
который ссылается на новосозданное дерево, но не имеет родителей.
* Создаёт и подписывает два тэга: release-$version с коммитом1 и
release-$version-bare с коммитом2.
Теперь
- на новосозданные тэги можно применять gear в неизменённом виде.
- если .gear-tags пуст, то gear можно применять и на HEAD; если
.gear-tags непуст, то gear не найдёт в нём path* и отвалится.
Это напоминание сборщику, что HEAD требует применения gear-release.
- наследственность тэгов вида release-$version по-прежнему можно
проверять при входе в Сизиф, если считать, что майнтейнеры честны,
хотя, может быть, забывчивы. (Если майнтейнеры нечестны, то проверка
наследственности не помогает в любом случае.)
- тэги release-*-bare можно использовать, если нужно скачать все
исходники какой-то версии, и только их. Специальной поддержки со
стороны git не требуется. Соответствие $release и $release-bare
проверяется тривиально.
(Прим.: HEAD всюду можно заменить на любой tree-ish.)
Подробная информация о списке рассылки Devel