[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