[devel] Еще одно HOWTO про сборку пакета в git.alt и интеграцию с upstream scm
Alexey Tourbin
=?iso-8859-1?q?at_=CE=C1_altlinux=2Eru?=
Пн Апр 9 23:19:17 MSD 2007
On Mon, Apr 09, 2007 at 10:06:52PM +0400, Eugene Prokopiev wrote:
> Мне удобнее всего вести разработку в 2-х бранчах:
>
> 1) dbmail_2_2 - импортируется из upstream scm, причем только тот бранч,
> который соответствует версии нашего пакета
> 2) srpms - все, что необходимо для сборки пакета
Вооще-то бранч srpms по идее предназначен для импорта утилитой
gear-srpmimport. Можно делать гораздо проще: всё необходимое для сборки
rpm пакета, в том числе и дерево исходников, просто деражть в бранче
master.
> Затем необходимо импортировать содержимое последнего пакета (можно не
> только последнего) в в бранч srpms репозитария с помощью gear-srpmimport
> --import-only, перейти в бранч rpms с помощью git-checkout и удалить
> распакованные исходники (git-rm -r -f dbmail), т.к. мы будем
Можно не удалять. Точнее, можно делать pull из scm бранча, с которым
происходит синхронизация. Другими словами, состояние master бранча
может быть максимально приближенным к тому, что получается после rpm -bp.
Я так делаю в большинстве своих пакетов и не вижу серьезных недостатоков
у этого подхода.
> * для git: git-fetch [url] [remote tag]:[local tag] - в нашем
> случае команда будет выглядеть так:
>
> git-fetch http://nfg3.nfgs.net/git/dbmail.git dbmail_2_2:dbmail_2_2
>
> * для svn: ?
git-svnimport или git-svn
> * для cvs: ?
git-cvsimport, то это бывает глюковато на сложных cvs репозитариях.
Я собрал parsecvs, он менее глюкав, но его использование требует некоего
проникновенного понимания. :(
> После импорта необходимо перейти в новый бранч (git-checkout dbmail_2_2)
> найти таг, на основе которого будет генерироваться тарболл, или создать
> его с помощью git-tag, указав идентификатор коммита или имя бранча - в
> этом случае будет взят последний на момент создания тага коммит в
> бранче. Дерево git удобнее всего изучать с помощью gitk --all, список
> тагов - с помощью git-show-ref. В нашем случае команда создания тага
> будет выглядеть так:
>
> git-tag -a -m 'new dbmail 2.2.4 09.04.2007 21:40'
> dbmail/2.2.4.200704092140 a42aa96f31a555c2b20d600cdd6e961c0d9cfb67
>
> Соданный таким образом новый или уже существующий коммит необходимо
> подшить к бранчу srpms (предварительно перейдя в него - git-checkout
> srpms), чтобы он был доступен при генерации тарболла:
>
> git-merge -s ours 'Using upstream branch' HEAD dbmail/2.2.4.200704092140
>
> Затем необходимо обновить .gear-tags с помощью gear-update-tag -a
Вообще-то можно не scm бранч подшивать к srpms бранчу, а прямо сами
src.rpm пакеты подшивать куда надо в scm бранч. Это тоже требует
некоего проникновенного понимания производимых действий. Но мне удалось
уже полуавтоматически импортировать несколько пакетов именно так.
В общем, первый раз было очень сложно всё это понять, а теперь как-то
само стало получаться. :)
Вот небольшой пример того, как я ипортировал src.rpm пакеты к
оригинальному дереву libxml2, которое импортировал сначала из cvs,
а теперь продолжаю импортировать из svn. (Приложил рисунок.)
.gear-tags использовать, по крайней мере сейчас, не обязательно.
.gear-tags, по идее, удобно использовать, когда все релизы привязаны к
определенной версии, или даже к определенному тарболлу. Тогда с помощью
.gear-tags можно легко сгенерировать кумулятивный патч к тарболу. Если
же релизы постоянно перебазируются на всё более свежий snapshot, тогда
для каждого snapshot'а делать отдельный gear-tag, по-моему, смысла нет.
Можно делать просто %name-%version-%release.tar.
gear-srpmimport создает каталог для тарболла, что неудобно при импорте
и подшивании к оригинальному scm дереву. Можно слегка модифицировать
gear-srpmimport (на свой страх и риск), чтобы он не создавал
подкаталога (после этого всё равно должно собираться с оригинальным
тарболлом, хотя уже будет создаваться тарболл со спекфайлом и
.gear-rules). Вот мой наспех модифицированный .gear-rules.
--- /usr/bin/gear-srpmimport 2007-03-20 22:00:01 +0000
+++ /home/at/tmp/gear-srpmimport 2007-04-03 20:04:38 +0000
@@ -295,11 +295,18 @@ import_tree()
[ "$arch_basename" = "$base" ] ||
rule_base=" base=$base"
- printf '%s: %s%s%s%s\n' "$method_pack" "$dir_name" "$rule_name" "$rule_base" "$rule_suffix" |
- sed "s/${quoted:- на version@}/@version@/g" >>"$gear_rules"
-
git ls-files -z --others --modified -- "$dir_name" |
git update-index --add ${verbose:+--verbose} -z --stdin
+ find ./"$dir_name" -not -type d |while IFS= read -r f; do
+ dest=./${f#./$dir_name/}
+ mkdir -p "$(dirname "$dest")"
+ git mv -f "$f" "$dest"
+ done
+
+ rule_name=" name=$dir_name-$spec_version"
+ dir_name=.
+ printf '%s: %s%s%s%s\n' "$method_pack" "$dir_name" "$rule_name" "$rule_base" "$rule_suffix" |
+ sed "s/${quoted:- на version@}/@version@/g" >>"$gear_rules"
}
import_file()
> Для выгрузки необходимо создать файл .git/remotes/origin с таким содержимым:
Я последнее время стал вносить это дело в .git/config, напр.:
[remote "git.alt"]
url = git.alt:/people/at/packages/libixp.git
Соответственно потом можно делать типа
$ git-push git.alt master 0.3-alt0.1
и т.п.
----------- следующая часть -----------
Было удалено вложение не в текстовом формате...
Имя : libxml2-git.png
Тип : image/png
Размер : 12998 байтов
Описание: =?iso-8859-1?q?=CF=D4=D3=D5=D4=D3=D4=D7=D5=C5=D4?=
Url : <http://lists.altlinux.org/pipermail/devel/attachments/20070409/8ca76c74/attachment-0001.png>
----------- следующая часть -----------
Было удалено вложение не в текстовом формате...
Имя : =?iso-8859-1?q?=CF=D4=D3=D5=D4=D3=D4=D7=D5=C5=D4?=
Тип : application/pgp-signature
Размер : 189 байтов
Описание: =?iso-8859-1?q?=CF=D4=D3=D5=D4=D3=D4=D7=D5=C5=D4?=
Url : <http://lists.altlinux.org/pipermail/devel/attachments/20070409/8ca76c74/attachment-0001.bin>
Подробная информация о списке рассылки Devel