Gear/ImportSeparateUpstream

Материал из ALT Linux Wiki
Freesource-logo.png Blue Glass Arrow.svg MediaWiki logo.png
Эта страница была перемещена с freesource.info.
Эта страница наверняка требует чистки и улучшения — смело правьте разметку и ссылки.
Просьба по окончанию убрать этот шаблон со страницы.

Импорт истории пакета и вынесение "апстримных" сорцов в отдельный бранч на примере пакета mutt1.5

Подготовка к твореню безобразий

Делаем песочницу:

$ cd /var/tmp
$ mkdir mu
$ cd mu
$ mkdir s u g  
$ GET http://ftp.altlinux.org/pub/distributions/archive/Sisyphus/index/mutt1.5 > list

Три каталога:

  1. s -- src.rpm
  2. g -- git repo
  3. u -- upstream sources

В файле list у нас список всех src.rpm'ов пакета в хронологическом порядке.

Импорт пакетов

Тут всё просто:

$ cd s 
$ rsync -a --files-from=../list rsync.altlinux.org::archive/Sisyphus/ .                                                            
Welcome to ALT Linux Team public rsync archive!

Скачали, теперь пора импортировать:

$ subst 's,^,../s/,' ../list 
$ cd ../g 
$ git-init-db 
defaulting to local storage area
$ cat ../list| gear-srpmimport --stdin 
Committing initial tree 749272a5e6883ec175f1927888bef44bc8e14b78
gear-srpmimport: Imported /var/tmp/mu/s/2004/11/04/files/SRPMS/mutt1.5-1.5.6i-alt0.7.src.rpm
gear-srpmimport: Imported /var/tmp/mu/s/2005/01/17/files/SRPMS/mutt1.5-1.5.6i-alt0.8.src.rpm
gear-srpmimport: Imported /var/tmp/mu/s/2005/02/15/files/SRPMS/mutt1.5-1.5.8i-alt1.src.rpm
gear-srpmimport: Imported /var/tmp/mu/s/2005/07/22/files/SRPMS/mutt1.5-1.5.9i-alt1.src.rpm
gear-srpmimport: Imported /var/tmp/mu/s/2005/08/23/files/SRPMS/mutt1.5-1.5.10i-alt2.src.rpm
gear-srpmimport: Imported /var/tmp/mu/s/2005/08/24/files/SRPMS/mutt1.5-1.5.10i-alt3.src.rpm
gear-srpmimport: Imported /var/tmp/mu/s/2005/10/06/files/SRPMS/mutt1.5-1.5.11-alt1.src.rpm
gear-srpmimport: Imported /var/tmp/mu/s/2006/03/21/files/SRPMS/mutt1.5-1.5.11-alt2.src.rpm
gear-srpmimport: Imported /var/tmp/mu/s/2006/06/05/files/SRPMS/mutt1.5-1.5.11-alt3.src.rpm
gear-srpmimport: Created master branch

Разбираемся с апстримом

Засовываем в репозитарий pristine sources, нам достаточно только последнего архива:

$ cd ../u
$ git-init-db
defaulting to local storage area
$ tail -1 ../list 
../s/2006/06/05/files/SRPMS/mutt1.5-1.5.11-alt3.src.rpm
$ rpm -qlp ../s/2006/06/05/files/SRPMS/mutt1.5-1.5.11-alt3.src.rpm | grep .tar.
mutt-1.5.11.tar.gz
$ rpm2cpio ../s/2006/06/05/files/SRPMS/mutt1.5-1.5.11-alt3.src.rpm | cpio -iumd mutt-1.5.11.tar.gz
7804 blocks
$ tar xf mutt-1.5.11.tar.gz 
$ rm -f mutt-1.5.11.tar.gz 
$ mv mutt-1.5.11/ mutt        
$ git-add \*

Для красоты делаем коммит через faketime:

$ date -r mutt +%s
1126794237
$ faketime -d '1970-01-01 1126794237 seconds' -- git-commit -a -m 'Imported mutt-1.5.11.tar.gz'                                                          
Committing initial tree 6dd1630049f94411c24d2605fbcd4483b8b0007f
$ faketime -d '1970-01-01 1126794237 seconds' -- git-tag -a -m 'mutt 1.5.11' mutt-1.5.11

Мы следим за апстримом

Сливаем всё вместе:

$ cd ../g 
$ git-fetch ../u master:upstream
warning: no common commits
remote: Generating pack...
remote: Done counting 396 objects.
remote: Deltifying 396 objects.
remote:  100% (396/396) done
Unpacking 396 objects
remote: Total 396, written 396 (delta 70), reused 0 (delta 0)
 100% (396/396) done
* refs/heads/upstream: storing branch 'master' of ../u
Auto-following refs/tags/mutt-1.5.11
remote: Generating pack...
remote: Done counting 1 objects.
remote: Deltifying 1 objects.
 100% (1/1) done
remote: Total 1, written 1 (delta 0), reused 0 (delta 0)
Unpacking 1 objects
 100% (1/1) done
* refs/tags/mutt-1.5.11: storing tag 'mutt-1.5.11' of ../u
$ git pull . tag mutt-1.5.11
Merging HEAD with 1e3b99641643b36b9b28459a7a10313ef3215a96
Merging: 
23bbfe69bcab5db08dcc24a21c439d0dc63c056c 1.5.11-alt3 
1e3b99641643b36b9b28459a7a10313ef3215a96 Imported mutt-1.5.11.tar.gz 
found 1 common ancestor(s): 
1 virtual commit 

Merge made by recursive.

Voila! Теперь в бранче upstream у нас лежат оригинальные исходники. Можно обновить их при помощи gear-update-archive, приложить в master, прописать генерацию тарбола из ветки upstream и делать diff'ы между upstream и master в соответствии с документацией к gear.