Хорошо. Будем исходить из отказа от src.rpm и большой неопределенности на стадии запроса собрать пакет из gear. КТО-ТО попросил собрать КАКОЙ-ТО gear-репозитарий. Применять ACL на данном этапе глупо, gear-репозитарий может называться как угодно, и мы НЕ ЗНАЕМ, что же из него в конечном счёт может собраться. Единственный способ это выяснить -- собрать gear-репозитарий. Общий процесс выглядит так: gear-request = gear-repo commit-id packager = invoker /-> build_arch i586 -> build_arch_status -\ gear-request --> build_arch x86_64 -> build_arch_status --> check_build_status -> pkg_build_status | reject \-> build_arch ... -> build_arch_status -/ Наличие pkg_build_status означает что пакет более-менее собрался, и теперь МЫ ЗНАЕМ что именно у нас собралось. А также мы знаем, что именно нужно будет перекладывать в сизиф, если все последующие проверки пойдут успешно (или если потом поступит подтверждение вручную). Альнернативно, gear-request может получить reject. Это означает, что пакет либо не собрался, либо собрался "совсем плохо". Теперь детализирую эти идеи на псведокоде. Знак "=" касается структур данных, знак "::" означает функцию, стрелка "->" означает тип (сигнатуру) функции. 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 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) 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+ Здесь есть такая идея, что нужно выделить primary архитектуры, на которых ДОЛЖНО собраться, и выделить второстепенные архитектуры, типа arm, для которых не нужно давать reject если он на ней не собрался. Ну и вот. Когда есть pkg_build_status, то уже можно проверять ACL и дальше уже пускать тесты.