[devel] Еще одно HOWTO про сборку пакета в git.alt и интеграцию с upstream scm

Eugene Prokopiev =?iso-8859-1?q?prokopiev_=CE=C1_stc=2Edonpac=2Eru?=
Пн Апр 9 22:06:52 MSD 2007


Здравствуйте!

Нечто подобное уже описывалось здесь:

http://wiki.sisyphus.ru/devel/gear/ImportUpstreamVBranch
http://wiki.sisyphus.ru/devel/gear/ImportSeparateUpstream

Но в процессе выполнения у меня возникло множество вопросов, поэтому я
попытался описать примерно то же самое, но более доступно для таких, как
я сам ;) Отправляю пока сюда, а не в вики, потому что надеюсь на
конструктивную критику: очень интересно, что я сделал неправильно и не
оптимально. Также прошу дополнить пример соответствующими примерами для
работы с svn и cvs (у меня в качестве upstream scm рассматривается
только git, о своих проблемах с svn я писал несколько выше)

Спасибо всем, кто мне помогал: Алексею Авдееву, Владимиру Камарзину, 
Сергею Власову и многим другим ...

------------------------------------------------------------------------

<< Сопровождение пакета в git.alt и взаимодействие с upstream scm на
примере dbmail >>

Мне удобнее всего вести разработку в 2-х бранчах:

1) dbmail_2_2 - импортируется из upstream scm, причем только тот бранч,
который соответствует версии нашего пакета
2) srpms - все, что необходимо для сборки пакета

В самом начале необходимо создать каталог dbmail, в котором будет
вестись разработка, и инициализировать репозитарий c помощью
git-init-db, перейдя в этот каталог. Это необходимо сделать каждому
разработчику, принимающему участие в разработке пакета.

Затем необходимо импортировать содержимое последнего пакета (можно не
только последнего) в в бранч srpms репозитария с помощью gear-srpmimport
--import-only, перейти в бранч rpms с помощью git-checkout и удалить
распакованные исходники (git-rm -r -f dbmail), т.к. мы будем 
генерировать тарболл с исходниками из бранча upstream scm. Эта операция 
выполняется один раз одним разработчиком.

Остальные операции будут выполняться разработчиками регулярно по мере
необходмости:

1) Импорт из upstream scm и сборка пакета:

    * для git:  git-fetch [url] [remote tag]:[local tag] - в нашем
случае команда будет выглядеть так:

git-fetch http://nfg3.nfgs.net/git/dbmail.git dbmail_2_2:dbmail_2_2

    * для svn: ?
    * для cvs: ?

После импорта необходимо перейти в новый бранч (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

Идентификатор тага необходимо указать в файле .gear-rules, заменив
строку, начинающуюся с tar.[gz|bz2] на:

tar.[gz|bz2]: [tag]:. name=[tarball]

В нашем случае запись будет основана на текущей дате/времени импорта из
upstream scm и будет выглядеть так:

tar.gz: dbmail/2.2.4.200704090940:. name=dbmail-2.2.4.git200704090940

После этих подготовительных операций необходимо описать в спеке, что же
мы сделали (как минимум увеличить номер версии и добавить запись в
%changelog), и попытаться собрать src.rpm с помощью:

gear --commit --rpmbuild -- rpm -bs --nodeps --sign

и

gear --commit --hasher -- hsh ~/hasher/

Если все прошло удачно, можно закоммитить изменения:

gear-commit -a

Полезно предварительно определить переменную EDITOR, чтобы для
редактирования сообщений использовался наш любимый текстовый редактор.

2) Выгрузка изменений в локальном репозитарии на git.alt:

Для выгрузки необходимо создать файл .git/remotes/origin с таким содержимым:

URL: git.alt:packages/dbmail.git
Push: refs/heads/*:refs/heads/*
Push: refs/tags/*:refs/tags/*

Выгружать можно командой git-push

3) Загрузка изменений из git.alt в локальный репозитарий:

Необходимо повторить следующее для каждого используемого бранча:

git-fetch [url] [remote branch]:[local branch]

В нашем случае:

git-fetch git.alt:packages/dbmail dbmail_2_2:dbmail_2_2
git-fetch git.alt:packages/dbmail srpms:srpms

Бранч dbmail_2_2 можно загружать и из
http://nfg3.nfgs.net/git/dbmail.git, но это будет медленнее. В тех
случаях, когда необходимо обновить dbmail из upstream scm, особого
выбора нет ;)

Каждый участвующий в разработке должен после окончания работы выгрузить
изменения в свой репозитарий на git-alt, все прочие перед началом работы
должны загрузить свежие изменения в свой локальный репозитарий из чужого
репозитария на git.alt.

-- 
С уважением, Прокопьев Евгений




Подробная информация о списке рассылки Devel