[devel] giter-factory: pkg_build_status
Alexey Tourbin
at на altlinux.ru
Чт Авг 30 20:50:04 MSD 2007
On Thu, Aug 30, 2007 at 08:01:48PM +0400, Dmitry V. Levin wrote:
> On Thu, Aug 30, 2007 at 03:06:41PM +0400, Alexey Tourbin wrote:
> > Теперь детализирую эти идеи на псведокоде. Знак "=" касается
> > структур данных, знак "::" означает функцию, стрелка "->"
> > означает тип (сигнатуру) функции.
>
> Не смог понять этот псведокод. Где можно ознакомиться с описанием?
Шелл-код не позволяет определять сигнатуру функции, то есть данные
какого типа функция получает на входе и данные какого типа у неё
на выходе. Поэтому сразу писать на шелле смысла нет, если мы
определяемся с информацией типа чево куда пойдёт.
Вообще-то лучше всего описывать преобразование абстрактных типов данных
позволяет язык типа Хаскелль. Я его плохо знаю. Кажется, два человека
в team хорошо знают Хаскелль, но это прямо сейчас вряд ли поможет.
Мой псевдокод, тем не мене, почти произволен.
Я лишь полагаюсь на то, что он вызовет правильные ассоциации.
Остается только перевести на русский.
gear-request =
gear-repo
commit-id
packager = invoker
gear-request -- это структура данных, которая включает в себя
путь к gear-репозитарию, commit-id для сборки и packager, которым
считается тот, кто дал запрос на сборку.
build_arch :: gear-request -> build_arch_status
can_build_srpm = gear hsh --build-args=-bs
srpm_NSVR = rpm -qp srpm
BuildRequires = rpm -qpR srpm
buildroot_base = hsh --initroot, hsh-shell rpm -qa
buildroot_BR = hsh-install BuildRequires, hsh-shell rpm -qa
buildroot_BR = buildroot_BR \setminus buildroot_base
hasher_exit_status = gear hsh
build_arch_status =
gear-request
can_build_srpm
srpm_NSVR
BuildRequires
buildroot_base
buildroot_BR
hasher_exit_status
RPMS.hasher/*.rpm
Функция build_arch собирает gear-репозитарий для данной архитектуры.
На входе она берёт gear-request, а на выходе отдаёт структуру данных
build_arch_status, которая включает в себя gear-request,
can_build_srpm -- возможность превичной запаковки src.rpm пакета из
gear-репозитария, srpm_NSVR -- "%name %serial:%version-%release",
BuildRequires -- зависимости src.rpm пакета, buildroot_base --
содержимое сборочного чрута после --initroot, buildroot_BR --
дополнительные пакеты, которые поставились в чрут для сборки,
hasher_exit_status -- собрался пакет или нет, и RPMS.hasher/*.rpm --
собранные пакеты.
check_build_status :: build_arch_status+ -> pkg_build_status | reject
all primary arches must build (hasher_exit_status = 0 for primary_arches)
all srpm_NSVR must be the same (map this.srpm_NSVR build_arch_status+ |sort -u |wc -l => 1)
require that $(basename gear-request.gear-repo .git) exactly matches srpm_NSVR.name
if has public gear-request.gear-repo; then
check commit ancestry $(public gear-repo) gear-request.commit-id
fi
if at least one RPMS.hasher/*.rpm is noarch; then
# noarch packages must build essentially the same on all arches
# otherwise we DO NOT KNOW how to move them to sisyphus
RPMS.hasher/*.rpm set must be the same for all arches
rpm -qpl set must be the same for each RPMS.hasher/*.rpm for all arches
rpm -qp --requires set must be the same for each RPMS.hasher/*.rpm for all arches
rpm -qp --provides set must be the same for each RPMS.hasher/*.rpm for all arches, etc.
fi
pkg_build_status =
pkg = srpm_NSVR
build_arch_status+
Фунция check_build_status дает простой ответ на сложный вопрос: собрался
пакет или нет. На входе она берёт массив build_arch_status (результаты
сборки на всех архитектурах), а на выходе возвращает "maybe pkg_build_status"
(в терминах хаскелля), то есть если ответ "да", то она возвращает
структуру pkg_build_status, а если ответ "нет" то она возвращает reject
(аналог NULL + отлуп maintainer'у -- типа всё дело, закрыто).
В псевдокоде подразумевается reject, когда не выполняется какое-то
условие. Условия эти такие:
Пакет должен собраться на всех основных архитектурах.
У всех полученных src.rpm пакетов должен совпадать NSVR.
(новое требование) Название gear-репозитария и src.rpm пакета должны совпадать.
Если в результатах сборки есть хотя бы один noarch пакет, то
На всех архитектурах список RPMS.hasher/*.rpm должен совпадать
На всех архитектурах для каждого собранного пакета вывод rpm -qpl должен совпадать.
Далее вывод rpm -qp --requires, rpm -qp --provides и т.д.
Возвращаемая структура pkg_build_status, по сути содержит всего одно
новое поле -- это имя src.rpm пакета (а также версию-релиз), которые
теперь удалсь точно установить. В остальном она просто "заворачивает"
в себя входной массив build_arch_status.
----------- следующая часть -----------
Было удалено вложение не в текстовом формате...
Имя : отсутствует
Тип : application/pgp-signature
Размер : 189 байтов
Описание: отсутствует
Url : http://lists.altlinux.org/pipermail/devel/attachments/20070830/40e12c41/attachment.bin
Подробная информация о списке рассылки Devel