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' 2) типовой набор команд для того, что бы с этим работать $ git2tar -h git2tar - make tarball from git package repository. Usage: git2tar [options] 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