On Thu, Nov 08, 2007 at 10:03:28PM +0300, Alexey Tourbin wrote: > On Thu, Nov 08, 2007 at 08:42:25PM +0300, Dmitry V. Levin wrote: > > Сборка транзакции (A) происходит следующим образом: > > - создаётся репозиторий - снапшот текущего опубликованного Сизифа (Ra); > > использование ссылок делает эту операцию дешевой; > > - на этом снапшоте выполняется сборка --with-stuff исходных пакетов > > транзакции; если хотя бы один не собрался, то транзакция отменяется > > (в первой реализации сборочной системы не вижу смысла оптимизировать > > эту часть); > > Здесь есть тонкость: сборка --with-stuff второго и последующего пакетов > транзакции идёт со СТАРЫМИ contents_index_bin и contents_index_all. > То есть практика сборки --with-stuff потенциально может давать > неправильныме зависимости -- сразу же после фиксации транзакции > второый и последующие пакеты при тестовой пересборке могут получить > отличающиеся зависимости. Так что здесь есть несколько подходов: > 0) забить; 0a) пока забить; 1) делать в хешере локальный > contents_index_bin/all; 2) формировать временный сизиф после каждого > пакета транзакции и вести сборку уже на нём. Это всё равно не до конца > решает вопрос, если зависимостями между пакетами в транзакции > топологически не упорядочены (то есть напр. при сборке первого пакета в > транзакции используется старая сборка одного из последующих пакетов). То есть транзакции является таковой лишь внешне. Внутри же никакой "атомарности" нет, и как бы существует проблема "bootstrap'а" транзакии. Если транзакция не является "слишком паталогической" (не содержит "атаки"), то bootstrap транзакции можно решить двойной пересборкой. 1) Сначала всё собрать в том порядке в каком есть; 2) упорядочить собранные пакеты топологически; 3) переупорядочить соответствующим образом src.rpm пакеты; 4) собрать src.rpm пакеты в новом порядке ещё раз.