Subversion, CVS i wielkie binarki (By³o Re: Znowu locki w CVS)

Michal Moskal malekith w pld-linux.org
Czw, 5 Gru 2002, 11:55:08 CET


On Wed, Dec 04, 2002 at 11:50:08PM -0500, Filip Kalinski wrote:
> Dnia Wed, Dec 04, 2002 at 10:57:33PM +0100, Mateusz Korniak  co nastêpuje:
> > On Thursday 05 of December 2002 04:36, Filip Kalinski wrote:
> > 
> > > > ¯eby commity by³y atomowe. (¿eby¶ nie móg³ wyci±gn±æ ¼róde³ w ¶rodku
> > > > commitu) Ale i tak nie s±, znaczy teoretycznie s±, ale tylko w obrêbie
> > > > jednego katalogu ;-) Anyway polecam subversion.
> > >
> > > Który pliki trzyma w bazie danych. Czyni go to bardzo przydatnym do
> > > trzymania wielkich binarek ;-)
> > 
> > Sugerujesz ¿e to jaki¶ problem dla wspó³czesnej bazy danych ?
> > Albo ¿e CVS jest pod tym wzglêdem lepszy :) ?
> > 
> 
> Chodzi o plikow± bazê danych na bibliotece db4. CVS mimo wszytko chyba jest
> lepszy.

*Je¶li* trzymamy binarki w systemie kontroli wersji, to rzeczywi¶cie svn
nie jest dobrym rozwi±zaniem. CVS jest trochê lepszy, ale jak widaæ
równie¿ nie bardzo siê nadaje. *¯aden* system kontroli wersji nie jest
przystosowany do trzymania w nim N-megowych binrek, bo niby po co?

System kontroli wersji s³u¿y do (tadam!) *kontroli wersji* a nie
serwowania plików. Zauwa¿, ¿e 99% tarballi w SOURCES nie wymaga ¿adnego
wersjonowania -- s± one jednoznacznie identyfikowane przez nazwê.
Pozosta³e 1% mo¿na by spokojnie trzymaæ w katalogach z numerem wersji.

Mog³oby to wygl±daæ tak:

SOURCES/ i SPECS/ zostaj± tak jak s± teraz. Tyle ¿e w tarballe w sources
s± zast±pione jakimi¶ ma³ymi plikami z linkiem do ftp/http gdzie s±
prawdziwe tarballe. Np.:

linux-2.4.20.tar.bz2:

#v+
###<PLD Source Link magic>###
kernel/2.4.20/linux-2.4.20.tar.bz2
ftp://ftp.kernel.org/some/path/linux-2.4.20.tar.bz2
#v-

builder je¶li zobaczy '###<PLD Source Link magic>###' w pierwszej linii,
czyta drug±, robi:

  wget $(echo $druga | sed 's|^|http://sources.pld.org.pl/tarballs/')

I tyle. Druga linijka mog³aby s³u¿yæ do automatycznego ¶ci±gania ¼róde³
na sources.pld.org.pl. 

Potem mo¿na by pomy¶leæ nad rozdzieleniem SPECS/ i SOURCES/ na
podkatalogi dla ka¿dego pakietu, np.:

packages/
  foobar/
    branches/
      head/
        foobar.spec
        tarballs/
          foobar-1.2.3.tar.gz
        patches/
          foobar-make.patch
      devel/
        foobar.spec
        tarballs/
          foobar-2.1.2.tar.gz
        patches/
          foobar-ac.patch
          foobar-make.patch
    versions/
      1.2.1-1/
        foobar.spec
        tarballs/
          foobar-1.2.1.tar.gz
        patches/
      1.2.3-1/
        foobar.spec
        tarballs/
          foobar-1.2.1.tar.gz
        patches/
          foobar-make.patch

W takim schemacie (przewidziany dla subversion, a nie CVS, wyja¶nienia
ni¿ej [1]), wszystkie pliki w */tarballs/ mog± byæ z definicji linkami. 
Oczywi¶cie to wszystko wymaga du¿ych zmian w skrypcie builder (musia³by
jako¶ te pliki daæ rpmowi).

[1] SVN repo widoczne jest jako filesystem. Nie ma ¿adanych branczy,
filesystem jest wersjonowany liniowo. Dowcip polega na tym, ¿e
filesystem jest wewnêtrznie reprezentowany jako DAG (skierowany graf
acykliczny) i wykoanie operacji typu 

  svn cp http://foobar/SOURCES/ http://foobar/SOURCES-copy/

Gdzie SOURECS ma 50M, dodaje do bazy kilkadziesi±t bajtów. Po prostu
SOURCES-copy/ jest linkiem do SOURCES w *wersji* 1423.

Tagi i branche s± wiêc reprezentowane przez katalogi. Jest to IMHO
znacznie bardziej intuicyjne, ni¿ to co mamy w CVS.

-- 
: Michal Moskal ::::: malekith/at/pld-linux.org :  GCS {C,UL}++++$ a? !tv
: PLD Linux ::::::: Wroclaw University, CS Dept :  {E-,w}-- {b++,e}>+++ h



Wiêcej informacji o li¶cie dyskusyjnej pld-devel-pl