Disposições de repositório populares

Existem diferentes maneiras de armazenar os pacotes nos repositórios (ou em múltiplos repositórios à sua escolha). O svn-buildpackage espera normalmente uma estrutura de directórios semelhante àquela bem descrita no Livro do Subversion, que se parece como:

Exemplo 1.1. Exemplo de hierarquia de directórios.

packageA/
   trunk/
   branches/
   branches/upstream
   tags/

projectB/
   trunk/
   branches/
   branches/developerFoo
   tags/
   

O packageA em cima pode ser um pacote fonte típico baseado no original e o projectB pode ser um pacote nativo Debian com um branch separado criado pelo programador Foo para as suas próprias experiências. Veja Subversion Book/Branches para mais detalhes acerca de usar os branches de Subversion.

Note também que as Etiquetas (Tags) funcionam de modo bem diferentes daquelas no CVS. O Subversion não mantêm etiquetas mágicas associadas a alguns ficheiros. Em vez disso, acompanha o estado do ficheiro e move, portanto Etiquetar algo significa criar uma cópia (dentro do Repositório, com espaço em disco eficiente) de uma certa versão do conjunto de ficheiros. Então o branch Debian da fonte do pacote lançado é contido no trunk/ e é etiquetado ao se copiar (fazer mirror) a árvore do trunk para tags/DEBIAN-REVISION. O mesmo acontece para os lançamentos da origem. Adicionalmente, a versão original mais recente é copiada em mirror para branches/upstream/current. Após alguns ciclos de actualização do pacote, a árvore de directórios pode parecer-se como isto:

Exemplo 1.2. Exemplo de hierarquia de directório branch

# svn ls -R file:///home/user/svn-repo/dev/translucency
branches/
branches/upstream/
branches/upstream/0.5.9/
branches/upstream/0.5.9/AUTHORS
branches/upstream/0.5.9/COPYING
...
branches/upstream/0.6.0/
branches/upstream/0.6.0/AUTHORS
branches/upstream/0.6.0/COPYING
...
branches/upstream/current/
branches/upstream/current/AUTHORS
branches/upstream/current/COPYING
... same stuff as in 0.6.0 ...
tags/
tags/0.5.9-1/
...
tags/0.5.9-1/debian/
tags/0.5.9-1/debian/README.Debian
...
tags/0.6.0-1/
tags/0.6.0-1/AUTHORS
...
tags/0.6.0-1/debian/
tags/0.6.0-1/debian/README.Debian
tags/0.6.0-1/debian/changelog
...
trunk/
trunk/AUTHORS
trunk/COPYING
... trunk where 0.6.0-2 is beeing prepared ...

O svn-buildpackage também suporta a disposição de segundo repositório sugerida no Livro do Subversion (função/pacote) mas o svn-inject prefere o documentado em cima. Ambos svn-buildpackage e svn-upgrade deverão ser capazes de auto-detectar a disposição do repositório e a localização dos ficheiros de pacotes.

Em teoria, você não tem que seguir esses exemplos e colocar os directórios trunk, branches e tags nas localizações que mais gosta. Mas o svn-buildpackage e outros scripts não vão localizar os ficheiros automaticamente portanto você precisa editar o ficheiro .svn/deb-layout no seu directório de trabalho e definir caminhos. Veja o antigo abstract acerca de como a auto-detecção funciona e o exemplo de configuração.

Finalmente, a estrutura de directórios de trabalho no seu sistema de desenvolvimento poderá parecer como isto:

Exemplo 1.3. Exemplo de configuração

dev/ # directório base, pode estar sob controle de versão ou não
dev/foo # directórios trunk de vários pacotes
dev/bar # conteúdo correspondente ao trunk, veja em cima
dev/tarballs # onde os tarballs de 'origem' são armazenados, pode ser sob VC ou não
dev/build-area # onde os pacotes são exportados temporariamente e construídos