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

Michal Moskal malekith at pld-linux.org
Thu Dec 5 11:55:08 CET 2002


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



More information about the pld-devel-pl mailing list