[devel] git submodule + gear*2

Vladislav Zavjalov slazav на altlinux.org
Вт Дек 10 02:21:11 MSK 2019


Добрый день!

Я наконец-то тоже наткнулся на проблему с gear и git submodule:
https://bugzilla.altlinux.org/show_bug.cgi?id=17914
Как-то ее для себя решил и хочу поделиться этим вариантом. Вдруг кому-то
пригодится, или какие-то замечания появятся.

Моя задача немного отличается от сборки чужих пакетов. Я иногда пишу
разнородные программы по разным поводам и для этого часто использую одни
и те же куски кода. Мне оказалось очень удобным иметь некую "библиотеку
исходного кода", состоящую из разнородных модулей (наверное, что-то типа
gnulib). И, конечно, оказалось очень удобно подключать такую библиотеку в
виде git submodule. Вся работа происходит в рамках того проекта,
которым я занимаюсь в данный момент, при этом изменения в "библиотеке"
правильно уходят в ее репозиторий (с git subtree так чисто, кажется, не
получится).

Мне важно, чтобы у меня в репозитории submodulе присутствовал в своем
исходном виде, не слитый в subtree или отдельный бранч. В этом случае я
могу запускать make, что-то отлаживать, что-то коммитить. Но после этого
мне хочется сказать `gear-rpm -ba [--commit]` и поставить собранный пакет
в систему.

Решение такое:

- В библиотеке (сабмодуле) я завожу тривиальный .gear-rules
  (`tar: . name=mylibrary`) и тривиальный spec-file.

- В репозитории храню отдельно тарбол с библиотекой, полученный с
  помощью gear. Для этого у меня там лежит скрипт update_mylibrary:

```
#/bin/sh
cd mylibrary
gear --export-dir .. $@
rm -f ../mylibrary.spec
```

- В спек-файле в начале секции %build ставлю:
tar -xvf mylibrary.tar

И все работает.

Тонкое место - следить за тем, чтобы тарбол был правильно и во-время
обновлен и закоммичен. Перед сборкой через gear я должен запустить
скрипт (возможно, с --commit), саму сборку тоже можно после этого
сделать с --commit. А перед сборкой новой версии тарболл коммитится.

Преимущество метода - что все сделано из простых элементов, каждый
из которых я (далекий от тонкостей git и т.п.) вполне понимаю, без
каких-то новых программ и сложных скриптов.




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