[devel] Как сделать репозиторий в git

Dmitry V. Levin =?iso-8859-1?q?ldv_=CE=C1_altlinux=2Eorg?=
Чт Апр 27 01:36:33 MSD 2006


On Wed, Apr 26, 2006 at 10:46:06PM +0400, Anton Farygin wrote:
> Интересно было бы взглянуть на:
> 1) формат buildspec

Тот формат, который сформировался на сегодняшний день, устроен следующим
образом.

buildspec - простой текстовый файл, обрабатываемый построчно.
Каждая строка имеет вид "директива: параметры"
Директивы такие: spec, copy, gzip, bzip2, tar, tar.gz, tar.bz2
- т.е. кажется всё, что нужно для извлечения из репозитория.

Параметр spec: путь_к_файлу
Параметры copy|gzip|bzip2: glob_pattern..
Параметры tar|tar.gz|tar.bz2: путь_к_каталогу [options]
  где options это
    spec=путь_к_файлу - путь к specfile'у, из которого можно извлечь имя
      и/или версию для тарболла;
    name=имя_архива - имя для тарболла;
    version=версия_архива - версия для тарболла.

Фраза "spec-файл, из которого можно извлечь имя" означает, что команда
sed '/^Name:[[:space:]]*/!d;s///;q' <spec-файл
выводит нормальное имя.  Имя называется нормальным, если не содержит
недопустимых символов.
Аналогично трактуется и фраза про версию.

Примеры я уже приводил в этом треде.  Могу ещё придумать, если нужно.

> 2) типовой набор команд для того, что бы с этим работать

$ git2tar -h
git2tar - make tarball from git package repository.

Usage: git2tar [options] <path-to-git-directory> <output-tarball-name>

Options:
  -b, --buildspec=FILENAME          buildspec file name;
  --bzip2                           compress output archive using bzip2;
  --gzip                            compress output archive using gzip;
  -t, --tree-ish=ID                 tree, commit or tag object name;
  -q, --quiet                       try to be more quiet;
  -v, --verbose                     print a message for each action;
  -V, --version                     print program version and exit;
  -h, --help                        show this text and exit.
    
Т.е. есть простая утилита, у которой на входе git-репозиторий и tree-ish
(по умолчанию --tree-ish=HEAD) и на выходе tarball специального вида, из
которого hasher скоро научится собирать пакеты.

Ещё раз обращаю внимание: собирать пакеты надо из того, что есть в
репозитории, а не из неза'commit'енного checkout'а.  Те, кто хоть немного
представляют себе, как устроен git, согласятся, что это не создаст
дополнительных сложностей.  Зато появится одно полезное свойство - вряд ли
удастся забыть за'commit'ить нужное изменение.

> - если я правильно понял, то предполагается каждый пакет держать в 
> отдельном GIT репозитарии.

Несомненно.  Я не вижу других вариантов.

> Вопрос собственно простой: каким образом

Я пока не определился, как именно будет устроен центральный репозиторий
для Sisyphus.  Тут есть варианты, надо понять, на чём остановиться.
Я сейчас занимаюсь доработкой попакетного репозитория, объединительные
репозитории - это следующий этап.

> 1) скачать все пакеты

Скачать список всех пакетов.
Скачать (git-clone, git-fetch, etc) каждый пакет из списка.

> 2) добавлять пакеты в центральный репозиторий

Видимо примерно так же, как и обновлять их (git-push).

> 3) удалять пакеты из центрального репозитория

Не думаю что удалить каталог это проблема. :)

> 4) обновлять весь центральный репозиторий (можно конечно сделать for i 
> in *;do... done, то на мой взгляд в этом случае мы не отследим 
> добавление/удаление пакетов.

Весь репозиторий - это каталог с репозиториями.  Можно использовать
какой-нибудь dumb transport (e.g. rsync), можно прочитать список и сделать
git-pull для каждого.


-- 
ldv
----------- следующая часть -----------
Было удалено вложение не в текстовом формате...
Имя     : =?iso-8859-1?q?=CF=D4=D3=D5=D4=D3=D4=D7=D5=C5=D4?=
Тип     : application/pgp-signature
Размер  : 191 байтов
Описание: =?iso-8859-1?q?=CF=D4=D3=D5=D4=D3=D4=D7=D5=C5=D4?=
Url     : <http://lists.altlinux.org/pipermail/devel/attachments/20060427/e648d23d/attachment-0001.bin>


Подробная информация о списке рассылки Devel