ALT Linux Team development discussions
 help / color / mirror / Atom feed
From: Sergey Vlasov <vsu@altlinux.ru>
To: devel@lists.altlinux.org
Subject: Re: [devel] gear -- создание тарбола из другого branch
Date: Tue, 26 Sep 2006 15:49:04 +0400
Message-ID: <20060926114904.GE18551@master.mivlgu.local> (raw)
In-Reply-To: <20060926141425.5647173a@localhost.localdomain>

[-- Attachment #1: Type: text/plain, Size: 5038 bytes --]

On Tue, Sep 26, 2006 at 02:14:25PM +0400, Alex V. Myltsev wrote:
> У меня есть такое представление о том, как должен работать gear-release:
> 
> * Читает .gear-tags, в котором написано:
> 	branch1 path1
> 	branch2 path2

branch1 - это имя, которое gear-release в момент запуска преобразует в
sha1?  В таком случае, даже если .gear-tags лежит в репозитории, это само
по себе ничего не значит, так как неизвестно, на что указывала ссылка с
указанным именем в момент запуска gear-release, следовательно, действия
мантейнера невозможно повторить (разве что попытаться найти, куда
показывала ссылка, по совпадению tree id, но в этом случае однозначный
результат не гарантируется)...

> 	...
> * Из каждого бранча извлекает 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
>   То есть пришивает к текущему дереву деревья из нужных бранчей под
>   нужными именами.

...  Разве что модифицировать .gear-tags в этом дереве, добавив туда
реально использованные sha1 пришитых бранчей.

> * Создаёт новый коммит1, который ссылается на новосозданное дерево, а
>   родителем числит прошлый release commit. Создаёт новый коммит2,
>   который ссылается на новосозданное дерево, но не имеет родителей.

Откуда берётся прошлый release commit?  Придётся заводить для таких
коммитов какую-то специальную ветку.

У коммит1, если уж делать его в таком виде, нужно вторым родителем ставить
текущий коммит, иначе у того, что будет собираться, не будет никакой связи
с реальной историей разработки.  Впрочем, в gitk это всё равно будет
выглядеть отвратительно - либо мегапатч, либо мега-merge.

> * Создаёт и подписывает два тэга: release-$version с коммитом1 и
>   release-$version-bare с коммитом2.
> 
> Теперь
> - на новосозданные тэги можно применять gear в неизменённом виде.
> - если .gear-tags пуст, то gear можно применять и на HEAD; если 
>   .gear-tags непуст, то gear не найдёт в нём path* и отвалится.
>   Это напоминание сборщику, что HEAD требует применения gear-release.

Это неудобно - как минимум, нужен wrapper, позволяющий вызвать gear одной
командой (либо поддержка в самом gear).

Вообще предполагалось, что gear-release используется при направлении
окончательного релиза на сборку в Сизиф; в данном случае инструмент для
сшивания деревьев придётся применять существенно чаще - вероятно, это
должен быть не gear-release, а что-то другое.

> - наследственность тэгов вида release-$version по-прежнему можно
>   проверять при входе в Сизиф, если считать, что майнтейнеры честны,
>   хотя, может быть, забывчивы. (Если майнтейнеры нечестны, то проверка
>   наследственности не помогает в любом случае.)

> - тэги release-*-bare можно использовать, если нужно скачать все
>   исходники какой-то версии, и только их. Специальной поддержки со
>   стороны git не требуется. Соответствие $release и $release-bare
>   проверяется тривиально.

От такого release-*-bare пользы примерно столько же, сколько и от
git-archive --remote=... - при отсутствии связей между коммитами все
объекты всегда передаются полностью (точнее, только с gzip-сжатием каждого
объекта отдельно - количеством дельт между объектами одного дерева можно
пренебречь).

Экспериментальная проверка работы git с несвязанными коммитами на
репозитории linux-2.6 показала следующее:

 - Размер pack-файла bare/v2.6.17 - 58M.

 - Размер pack-файла bare/v2.6.18 - 59M.  Именно столько придётся вытянуть
   при получении bare/v2.6.18, не связанного с другими коммитами, даже при
   наличии в локальном репозитории bare/v2.6.17.

 - Размер pack-файла bare/v2.6.18, из которого исключены объекты, общие с
   деревом bare/v2.6.17 - 38M.  Такой pack-файл придётся получить при
   выполнении git-fetch -k ... tag bare/v2.6.18-linked (этот тег указывает
   на коммит с деревом v2.6.18^{tree}, для которого в качестве
   единственного родительского коммита записан bare/v2.6.17^{commit}).
   При отсутствии связей между коммитами не удаётся получить даже такой
   результат.

 - Размер pack-файла bare/v2.6.18-linked, который сформирован с ключом
   --thin в предположении о наличии у клиента bare/v2.6.17 - 5,3M.  Такой
   pack передаётся при выполнении git-fetch ... tag bare/v2.6.18-linked
   без опции -k.  Вот так должен работать нормальный fetch с
   использованием родных протоколов git.

Учитывая то, что на основе release-*-bare нельзя продолжать нормальную
разработку (разве что чуть подпатчить spec - патчи для остальных
компонентов уже не будут накладываться на исходный вариант из-за изменения
путей), такой вариант даёт довольно мало преимуществ.  Кроме того, имея
подобный коммит, никак не связанный с остальной историей, невозможно
получить изменения исходников относительно оригинальной версии (разве что
в дерево для этого коммита будут помещаться оригинальные исходники и
автоматически сформированные патчи).

[-- Attachment #2: Type: application/pgp-signature, Size: 189 bytes --]

  parent reply	other threads:[~2006-09-26 11:49 UTC|newest]

Thread overview: 54+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2006-09-21 19:20 Денис Смирнов
2006-09-22  5:57 ` Alexey Tourbin
2006-09-22 10:44   ` Денис Смирнов
2006-09-22 23:37     ` Dmitry V. Levin
2006-09-23  8:40       ` Денис Смирнов
2006-09-23  8:48         ` Dmitry V. Levin
2006-09-23  9:19           ` Денис Смирнов
2006-09-23 14:07             ` Dmitry V. Levin
2006-09-23 15:23               ` Sergey Vlasov
2006-09-23 15:54                 ` Dmitry V. Levin
2006-09-23 16:04                   ` Aleksey Avdeev
2006-09-23 16:16                     ` Dmitry V. Levin
2006-09-23 16:38                       ` Michael Shigorin
2006-09-23 16:51                   ` Sergey Vlasov
2006-09-23 19:28                     ` Dmitry V. Levin
2006-09-23 19:36                       ` Денис Смирнов
2006-09-23 19:43                         ` Dmitry V. Levin
2006-09-23 19:57                       ` Sergey Vlasov
2006-09-23 22:56                       ` Michael Shigorin
2006-09-26 19:01                       ` Sergey Vlasov
2006-09-30 19:30                         ` Sergey Vlasov
2006-10-03 22:11                           ` Dmitry V. Levin
2006-10-15 16:08                             ` Sergey Vlasov
2006-10-15 22:21                               ` Dmitry V. Levin
2006-10-18 22:55                                 ` Dmitry V. Levin
2006-09-23 22:55                     ` [devel] uranus Michael Shigorin
2006-09-25  5:24                       ` Sergey Pinaev
2006-09-24 19:14                   ` [devel] gear -- создание тарбола из другого branch Sergey Vlasov
2006-09-25 18:06                     ` Sergey Vlasov
2006-09-25 20:01                       ` Dmitry V. Levin
2006-09-26 17:34                       ` Alexey I. Froloff
2006-09-26 18:21                         ` Alexey I. Froloff
2006-09-25  8:09                   ` Anton Farygin
2006-09-25 13:31                     ` Sergey Vlasov
2006-09-25 20:06                       ` Dmitry V. Levin
2006-09-26  8:42                         ` Sergey Vlasov
2006-09-26 22:50                           ` Dmitry V. Levin
2006-09-26 10:14                     ` Alex V. Myltsev
2006-09-26 10:43                       ` Alex V. Myltsev
2006-09-26 11:49                       ` Sergey Vlasov [this message]
2006-09-26 13:01                         ` Alex V. Myltsev
2006-09-26 14:25                           ` Sergey Vlasov
2006-09-26 14:52                             ` Alexey I. Froloff
2006-09-26 15:19                               ` Sergey Vlasov
2006-09-23 15:28               ` Денис Смирнов
2006-10-02 23:32     ` Alexey Tourbin
2006-10-03  7:54       ` Денис Смирнов
2006-10-03  8:05         ` Alexey Tourbin
2006-10-03 11:19           ` Денис Смирнов
2006-10-03 11:25             ` Pavlov Konstantin
2006-10-03 14:36               ` Денис Смирнов
2006-10-03 14:46                 ` Pavlov Konstantin
2006-10-03 22:25                   ` Dmitry V. Levin
2006-10-04  8:02                     ` Денис Смирнов

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=20060926114904.GE18551@master.mivlgu.local \
    --to=vsu@altlinux.ru \
    --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