ALT Linux Team development discussions
 help / color / mirror / Atom feed
From: Igor Vlasenko <vlasenko@imath.kiev.ua>
To: devel@lists.altlinux.org
Subject: [devel] I: документация по утилитам обработки репозитория. v2.
Date: Fri, 26 Jul 2013 23:47:01 +0300
Message-ID: <20130726204700.GA21093@dad.imath.kiev.ua> (raw)

Уважаемые коллеги,

переработал документацию по утилитам уровня репозитория,
к вашему вниманию.

Третий уровень - утилиты обработки репозитория.

От утилит второго уровня - утилит работы с пакетами -утилиты третьего уровня отличаются тем, что к ним подключены библиотеки работы с репозиториями (пакет perl-Source-Repository).

Библиотека Source::Repository::Mass.

Основной режим этой библиотеки  отбор пакетов из исходного репозитория по некоторому критерию. Утилита, пользующаяся библиотекой, указывает ей 2 репозитория: Исходный репозиторий-источник (origin) и целевой (результирующий) репозиторий (destination). Далее на вход подаются имена исходных пакетов, библиотека ищет их в обеих репозиториях, есть критерий сравнения (например, пакет должен быть старше) и если критерий выполнен, то над исходным пакетом выполняется действие, определенное в клиенте этой библиотеки.

Сравнение имен пакетов осуществляется с помошью указания объекта интерфейса Source::Repository::Mass::Matcher. Например, в утилитах python3-copycat для преобразования пакетов модулей python2 в пакеты модулей для python3 для сравнения имен используется класс  Source::Repository::Mass:: Matcher::Py3CopyCat, который имена python-module-foo и python3-module-foo считает равными, а в утилите fcimport используется класс Source::Repository:: Mass:: Matcher:: DistroMap, который для сравнения имен использует базу данных DistroMap.

Свои обьекты есть и для сравнения эпох, версий и релизов. Так, сравниватель релизов для бакпортирования релизы alt3 и alt2.M60T.1 считает равными (т. е.  alt2.M60T.1 считается бакпортом для alt2.M60T.1).

В результате сравнения имя разрешается в пару имен пакетов (например, при импорте из CPAN имени архива A-Foo соответствует имя пакета  perl-A-Foo. Поэтому на самом деле в обработчик передается объект Source::Package::Pair, содержаший пару имен. Если по этим именам найдены реальные пакеты, то соответствующие объекты Source::Package также создаются и передаются в обработчик через Source::Package::Pair.

В Source::Repository::Mass содержится более десятка разных критериев сравнения. 

Критерий newer = (такого пакета еще нет, или он есть но меньше по версии-релизу) используется для генерации пакетов.

Критерий older используется в репозитории autoports для очистки репозитория от устаревших бакпортов.

Критерий both  используется в репозитории autoimports для выявления в нем пересечений с сизифом.

Свои критерии есть для выявления пакетов, присутствующих в одном репозитории, но отсутствующих в другом и т. д.

Выбранные в результате применения критерия сравнения имена исходных пакетов как объект Source::Package::Pair передаются в абстрактный обработчик. 

Обработчики могут быть самыми разными. В скрипте autorepo-purge обработчик удаляет выбранные критерием older пакеты. В скриптах croncopy обработчик просто передает полученное имя в incoming командой
Ssh git.alt build -b $branch copy $name.
Однако чаще всего используется обработчик  Source::Repository::Mass:: Transform::Embedded, который обрабатывает выбранные пакеты как утилита 2-го уровня (утилита преобразования пакетов).
С помощью этого обработчика на базе библиотеки Source::Repository::Mass
можно создавать утилиты массового преобразования пакетов по списку имен.

Соответственно, если пакет дистрибутивный, то на практике гораздо удобнее пользоваться не утилитами 2-го уровня, а соответствующей специально настроенной под этот дистрибутив утилитой 3-го уровня.

Например, для импорта из mageia утилита 2-го уровня - srpmconvert-mga,
утилита 3-го уровня - mgamass; 
для импорта из Fedora утилита 2-го уровня - srpmconvert-fc,
утилита 3-го уровня - fcmass.

Пример.

Соберем пакет fritzing для радиотехники.
 $ fcmass fritzing
Записан: ./OUT/fritzing-0.7.5b-alt1_2.src.rpm
 $ hshS ./OUT/fritzing-0.7.5b-alt1_2.src.rpm  2>&1 | tee hsh.log
[ . . . ]
E: Невозможно найти пакет quazip-devel
 $ fcmass quazip
Записан: ./OUT/quazip-0.5-alt1_1.src.rpm
$ hshS ./OUT/quazip-0.5-alt1_1.src.rpm  2>&1 | tee hsh.log
[ . . . ]
Wrote: /usr/src/RPM/SRPMS/quazip-0.5-alt1_1.src.rpm
Wrote: /usr/src/RPM/RPMS/x86_64/quazip-0.5-alt1_1.x86_64.rpm
Wrote: /usr/src/RPM/RPMS/x86_64/quazip-devel-0.5-alt1_1.x86_64.rpm
Wrote: /usr/src/RPM/RPMS/x86_64/quazip-debuginfo-0.5-alt1_1.x86_64.rpm
8.43user 1.60system 0:17.16elapsed 58%CPU (0avgtext+0avgdata 232464maxresident)k0inputs+0outputs (0major+755716minor)pagefaults 0swaps
 $ hshS ./OUT/fritzing-0.7.5b-alt1_2.src.rpm  2>&1 | tee hsh.log
[ . . . ]
Wrote: /usr/src/RPM/SRPMS/fritzing-0.7.5b-alt1_2.src.rpm
Wrote: /usr/src/RPM/RPMS/x86_64/fritzing-0.7.5b-alt1_2.x86_64.rpm
Wrote:/usr/src/RPM/RPMS/x86_64/fritzing-debuginfo-0.7.5b-alt1_2.x86_64.rpm
391.82user 25.10system 6:59.92elapsed 99%CPU (0avgtext+0avgdata 1826656maxresident)k0inputs+0outputs (0major+8215063minor)pagefaults 0swaps

Как видим, на этом уровне использование утилит автоматизации позволяет существенно ускорить подготовку исходных пакетов.

-- 

Dr. Igor Vlasenko
--------------------
Topology Department
Institute of Math
Kiev, Ukraine


-- 
This message has been scanned for viruses and
dangerous content by MailScanner, and is
believed to be clean.



                 reply	other threads:[~2013-07-26 20:47 UTC|newest]

Thread overview: [no followups] expand[flat|nested]  mbox.gz  Atom feed

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=20130726204700.GA21093@dad.imath.kiev.ua \
    --to=vlasenko@imath.kiev.ua \
    --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