Raport mniejszości (było: Re: subversion)

Tomasz Trojanowski tomek w uninet.com.pl
Pon, 15 Wrz 2003, 09:17:58 CEST


Witam!

Powiem jedno. Malekith!!! przestań czytać w moich myślach -- całą 
niedzielę spędziłem na myśleniu jak by zrobić sobie dobrze przy pomocy 
Subversion ;)

OK. A teraz merytorycznie

On Sun, 14 Sep 2003, Michal Moskal wrote:

> [...cut...]
> 
> W subversion nie ma czegoś takiego jak tag lub moduł. Czasami stosuje
> się praktykę, że tworzy się repozytorium dla danego projektu. My takiej
> praktyki nie stosujemy.
> 
> Zamiast modułów i tagów są dobrze wszystkim znane katalogi i pliki. Tagi
> i branche realizuje się przez kopię drzewa plików. Np. chcąc otagować
> pliki projektu foo robimy tak:
> 
> svn cp http://svn.pld-linux.org/foo/trunk \
> 	http://svn.pld-linux.org/foo/tags/foo-1.0
> 
> (Co dodaje do bazy pare bajtów, a nie pare megabajtów jak można by
> sądzić).
> 
> Stąd wynika struktura repo: 
> 
>   <projekt>/trunk    -- cvsowy HEAD
>   <projekt>/tags     -- tagi
>   <projekt>/branches -- branche
> 
> Ale jest to czysto umowne.
> 
> Dla PLD struktura mogłaby wyglądać tak:
> 
> PLD-packages/
>   mozilla/
>     tags/
>       1.0-1/
>         SPECS/
> 	  mozilla.spec
> 	SOURCES/
> 	  mozilla-foobar.patch
>       1.0-2/
>         ...
>       auto-ac-1.0-1/
>         ...
>     branches/
>       devel/
>         SPECS/
> 	  mozilla.spec
> 	SOURCES/
> 	  mozilla-foobar.patch
>     trunk/
>       SPECS/
>         mozilla.spec
>       SOURCES/
>         mozilla-foobar.patch

Widziałbym to trochę inaczej. Najpierw struktura, a potem skomentuję

packages/
  gcc/
    gcc.spec
    SOURCES/
  binutils/
    binutils.spec
    SOURCES/
  setup/
    setup.spec
    SOURCES/
branches/
  gcc/
    Ra-branch/
      gcc.spec
      SOURCES/
    Ac-branch/
      gcc.spec
      SOURCES/
    DEVEL/
      gcc.spec
      SOURCES/
tags/
  gcc/
    gcc-3.3-1/
      gcc.spec
      SOURCES/
    gcc-3.3-2
      gcc.spec
      SOURCES/

No i komentuję.

To wszystko oczywiście przy założeniu, że na potrzeby SOURCES/SPECS 
przeznaczamy osobne repozytorium, bez jakichkolwiek innych projektów w 
nim.


Trzymanie osobno specy i źródeł ma tę zaletę, że pozwala je jednym 
poleceniem ściągnąć z repozytorium. Druga sprawa, w związku z troszkę inną 
koncepcją tworzenia branchy i tagów, pozwala (również jednym poleceniem)
stworzyć branch lub taga dla całego pakietu.

No i mass commity nie będą już takie proste :P

Wiązałoby się to niestety, z odejściem od struktury katalogów w ~/rpm, 
takiej jak oferuje rpm. 

Wymagałoby to zmian w /usr/lib/rpm/macros jak poniżej. Założyłem że rpm 
rozwiązuje poprawnie makro %{name} przy budowaniu pakietu -- nie 
sprawdzałem.

%_topdir	%(echo $HOME)/rpm
%_builddir	%{_topdir}/BUILD
%_rpmdir	%{_topdir}/RPMS
%_srcrpmdir	%{_topdir}/SRPMS
%_sourcedir	%{_topdir}/packages/%{name}/SOURCES
%_specdir	%{_topdir}/packages/%{name}

Tu jest niestety najsłabsza punkt tej koncepcji, nie wiem czy powyższe 
będzie działać. A jeśli nawet będzie to czy nie spowoduje jakichś 
kłopotów.


Pozostaje jeszcze kilka problemów na które natknąłem się w trakcie 
używania Subversion:

1. Subversion nie obsługuje "$Log$", w związku z tym nie jest możliwe 
   tworzenie %changelog tak jak to ma miejsce w starym repozytorium. Nie 
   wiem na ile można to rozwiązać w hooks/pre-commit.tmpl, bo nie wiem czy 
   istnieje możliwość modyfikacji plików w repoztytorium z poziomu tego 
   skryptu.

2. Nie wiem jak automatycznie ustawiać
     svn propset svn:keywords "Id Date Rev" foobar.spec
   dla każdego pliku *.spec. Pozostaje ustawianie wszystkich indywidualnie 
   dla każdego pliku.

To na razie tyle.

-- 
Tomasz Trojanowski (tomek w uninet.com.pl)

"Between depriving a man of one hour from his life and depriving him of
his life there exist only a difference of degree." (FH, Dune Messiah)



Więcej informacji o liście dyskusyjnej pld-devel-pl