ALT Linux Team development discussions
 help / color / mirror / Atom feed
From: Alexey Tourbin <at@altlinux.ru>
To: ALT Devel discussion list <devel@lists.altlinux.org>
Subject: Re: [devel] giter-factory: pkg_build_status
Date: Thu, 30 Aug 2007 20:50:04 +0400
Message-ID: <20070830165004.GH1332@solemn.turbinal> (raw)
In-Reply-To: <20070830160148.GG30099@basalt.office.altlinux.org>

[-- Attachment #1: Type: text/plain, Size: 4633 bytes --]

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.

[-- Attachment #2: Type: application/pgp-signature, Size: 189 bytes --]

      reply	other threads:[~2007-08-30 16:50 UTC|newest]

Thread overview: 22+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2007-08-30 11:06 Alexey Tourbin
2007-08-30 12:07 ` Alexey Tourbin
2007-08-30 12:33   ` Kirill A. Shutemov
2007-08-30 12:44     ` Alexey Tourbin
2007-08-30 13:11       ` Kirill A. Shutemov
2007-08-30 13:15         ` Kirill A. Shutemov
2007-08-30 15:12       ` Dmitry V. Levin
2007-08-30 15:24         ` Alexey Tourbin
2007-08-30 15:54           ` Dmitry V. Levin
2007-08-30 16:04             ` Kirill A. Shutemov
2007-08-30 16:11               ` Dmitry V. Levin
2007-08-30 16:14               ` Alexey Tourbin
2007-08-30 20:38             ` Alexey Tourbin
2007-08-30 15:43   ` Alexey Tourbin
2007-08-30 16:00     ` Dmitry V. Levin
2007-08-30 17:27       ` Alexey Tourbin
2007-08-30 17:40         ` Dmitry V. Levin
2007-08-30 17:50           ` Alexey Tourbin
2007-08-30 18:00             ` Dmitry V. Levin
2007-08-30 20:26               ` Kirill Shutemov
2007-08-30 16:01 ` Dmitry V. Levin
2007-08-30 16:50   ` Alexey Tourbin [this message]

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20070830165004.GH1332@solemn.turbinal \
    --to=at@altlinux.ru \
    --cc=devel@lists.altlinux.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link

ALT Linux Team development discussions

This inbox may be cloned and mirrored by anyone:

	git clone --mirror http://lore.altlinux.org/devel/0 devel/git/0.git

	# If you have public-inbox 1.1+ installed, you may
	# initialize and index your mirror using the following commands:
	public-inbox-init -V2 devel devel/ http://lore.altlinux.org/devel \
		devel@altlinux.org devel@altlinux.ru devel@lists.altlinux.org devel@lists.altlinux.ru devel@linux.iplabs.ru mandrake-russian@linuxteam.iplabs.ru sisyphus@linuxteam.iplabs.ru
	public-inbox-index devel

Example config snippet for mirrors.
Newsgroup available over NNTP:
	nntp://lore.altlinux.org/org.altlinux.lists.devel


AGPL code for this site: git clone https://public-inbox.org/public-inbox.git