[devel] I: gear new utility
Damir Shayhutdinov
=?iso-8859-1?q?damir_=CE=C1_altlinux=2Eorg?=
Вт Ноя 6 16:06:46 MSK 2007
> Эта утилита может помочь, если вы предполагаете хранить оригинальные
> исходники, патчи на них и метафайлы, требующиеся для сборки, в
> отдельных бранчах.
>
> Основная задача утилиты -- это слияние (merge) нескольких бранчей в
> один результирующий master-бранч, из которого можно собирать пакет.
Я написал для себя нечто подобное, с помощью которого веду репозиторий KoLmafia.
У меня тоже есть файл, в котором перечисляется что куда мержить.
Только у меня merge идет по тегам.
Сначала идет тег на апстрим (upstream-tip), потом этот тег мержится в
первую ветку (branch1), накладывается (перемещается) новый тег
(branch1-tip).
Полученный тег branch1-tip мержится в branch2, ставится (перемещается)
тег branch2-tip. И т.д. Последний тег branchN-tip мержится в master.
Такая схема (с перемещающимися тегами) позволяет не менять содержимое
.gear-rules. После запуска этой утилиты достаточно выполнить
gear-update-tag -ac, подправить версию в спеке, закоммитить и собрать
пакет.
Утилита запускается с параметром, означающим "причину обновления". В
моем случае это либо обновление до версии апстрима - KoLmafia-X.Y,
либо до версии из svn - svnXXXX. Из этой причины составляется
аннотация тегов. У тега на ветку upstream (upstream-tip) в аннотация
указывается эта причина. А у тега на ветки branchN (branchN-tip) в
аннотации указывается "Updated to <причина>".
В целом ИМХО получается достаточно прилично. Автоматическая подгонка
патчей производится за пару секунд.
Вот текст этого маленького скрипта, если кому интересно:
$ cat /home/damir/bin/update-branches
8<---------------------------------------
#!/bin/bash
# This script updates and merges all patch-branches in some order
UPDATE_BRANCHES=$(<.git/update-branches)
REASON="$1"
if [ -z "$REASON" ];
then
echo "Usage: update-branches <reason>"
exit 1
fi
PREV=
for branch in $UPDATE_BRANCHES
do
if [ -z "$PREV" ]; then
git-tag -f -m "$REASON" -s "$branch-tip" "refs/heads/$branch"
else
git-checkout -f "$branch"
git-merge "$PREV-tip" || exit 1
git-tag -f -m "Updated to $REASON" -s "$branch-tip"
"refs/heads/$branch"
fi
PREV="$branch"
done
git-checkout -f master
git-merge "$PREV-tip"
8<------------------------------------------
При этом содержимое .git/update-branches вот такое:
cat /home/damir/ALTLinux/KoLmafia/.git/update-branches
upstream
equipment-fixes
pvp-fixes
price-limit
monsters-info
Результат работы можно посмотреть на
http://git.altlinux.org/people/damir/packages/KoLmafia.git
Подробная информация о списке рассылки Devel