[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

[wml] webwml/portuguese/devel/cvs_packages.wml



Segue em anexo arquivo para commit.

-- 
++++++++++++++++++++++++++++++++++++++++++
+ Raphael Barreto (rrb-lists@bol.com.br) +
++++++++++++++++++++++++++++++++++++++++++
#use wml::debian::template title="Using CVS together with Debian packages"
#use wml::debian::translation-check translation="1.5"

<p>Esse pequeno documento é apenas para dar uma pequena ajuda a
converter pacotes para gerenciamento CVS. É provavelmente apenas 
interessante para umas poucas pessoas que não são muito familiarizadas
com o CVS e gerenciamento de versões. Também, há um script em
<code>/usr/doc/cvs-buildpackage</code>
chamado <code>cvs-pkginit</code> (ambos o script e a página de manual estão
gzipados), que irá imprimir uma sinopse desse documento HOWTO.

<p>Por exemplo, para converter um pacote foo, versão bar1, revisão Debian 3,
tente:
<pre>
% cvs-pkginit foo bar1 3
</pre>
e olhe a sinopse.

<pre>
Oldenburg, 6/2/97                           Joey (joey@debian.org)
                                            / Martin Schulze   /
Mobile,                                     Manoj Srivastava
                                            srivasta@debian.org
</pre>

<p>Nota: na discussão a seguir, as entidades dentro de  sinais de menor e
maior &lt;&gt; serão mudados para cada caso, todo o resto deve ser tomado
literalmente. Por exemplo, se você está falando sobre um pacote com versão
externa 2.1.82, então &lt;$versão&gt; significa 2.1.82, e
upstream_version_&lt;$versão | tr  . _&gt; significa upstream_version_2_1_82.

<ol>
<li>Configurar o CVS

<pre>
   $ CVSROOT=/onde/seu/repositório/estará
   $ export CVSROOT
   $ cvs init
   $ mkdir $CVSROOT/debian
</pre>

   <p>Isso permite que você separe seus pacotes Debian de qualquer outra
	coisa no seu repositório, atualmente ou no futuro. Mesmo se você
	pensa que não precisa do CVS para nada mais, é mais fácil classificar
	seu repositório agora do que sentir muito depois (é uma bagunça
	mover as coisas no repositório depois).

   <p>Se mais de uma pessa irá usar o CVS, você deve ter certeza de que
	elas possam modificar o repositório usando o CVS. Escolha um
	grupo (ou um conjunto de grupos) que tem acesso à parte do
	repositório e defina as permissões:

<pre>
   \# chgrp &lt;arquivo&gt; $CVSROOT/debian
   \# chmod g+ws    $CVSROOT/debian
</pre>

   <p>Isso assegura que os membros do grupo arquivo estarão permitidos
	a configurar o repositório. Agora que você deve se assegurar
	de que os grupos corretos de pessoas estão aptos a modificar partes
	do repositório.

<pre>
   \# mkdir $CVSROOT/debian/&lt;package1&gt;
   \# chgrp &lt;grupo1&gt; $CVSROOT/debian/&lt;pacote1&gt;
   \# chmod g+ws     $CVSROOT/debian/&lt;pacote1&gt;
   \# mkdir $CVSROOT/debian/&lt;pacote2&gt;
   \# chgrp &lt;grupo2&gt; $CVSROOT/debian/&lt;pacote2&gt;
   \# chmod g+ws     $CVSROOT/debian/&lt;pacote2&gt;
</pre>

   <p>Como usuário normal você deve tornar seu repositório CVS público
	ou usando <kbd>"-d /onde/seu/repositório/estará"</kbd> ou colocando
	um fragmento como esse no seu profile.

<pre>
   $ CVSROOT=/where/your/repository/will/be
   $ export CVSROOT
</pre>


<li>Use Módulos

<pre>
   \# cvs checkout CVSROOT
   \# cd CVSROOT
   \# vi modules
</pre>

   <p>No seguinte, &lt;pacote&gt; deve ser o nome do pacote como está
	no arquivo debian/changelog.

   <p>Adicione as linhas a seguir, a primeira é essencial, a segunda pode
	ser duplicada e é auto-explicativa:

<pre>
   modules   CVSROOT modules
   &lt;pacote&gt; debian/&lt;pacote&gt;
</pre>

<pre>
   \# cvs commit -m 'Definidos primeiros módulos'
</pre>


<li>Prepare para usar o CVS

   <p>Insira sua árvore de fonte com os comandos a seguir (assumindo que
	você já a tenha debianizado e que haja arquivo orig.tar.gz).
	Note que os fontes externos são importados com um -ko (tome
	cuidado com os arquivos binários), mas não mudanças locais
	que fazemos. Por favor note que números de época são ignorados
	enquanto determinando o nome da tag CVS (eles são normalmente
	usados para mudar a opnião do dpkg sobre ordem dos pacotes,
	e não são relevantes para as tags CVS normalmente).

   <p>Mude para o diretório para onde você tem sua árvore fonte de desenvolvimento
	debianizada fora do cvs, que é o que estamos tentando injetar no
	CVS (isso não está no CVSROOT, normalmente).

   <p>Eu REPITO: A seguir, &lt;pacote&gt; deve ser o nome do pacote assim
	como no arquivo debian/changelog.

<pre>
   $ cd /onde/sua/árvore/fonte/reside/
   $ tar zvfx &lt;pacote&gt;_&lt;versão&gt;.orig.tar.gz
   $ cd &lt;pacote&gt;_&lt;versão&gt;.orig
   $ cvs import -ko -m 'Importação de código' \
       debian/&lt;pacote&gt; source-dist upstream_version_&lt;versão|tr . _&gt;
</pre>

   <p>Você pode mudar a tag do galho source-dist para qualquer coisa que
	quiser. (O mantenedor do cvs-buildpackage usa habitualmente a
	tag upstream (que é um estudo em redundância ;)).

   <p>Se você configurou o CVS como root, e não configurou a escribilidade
	do grupo, você precisa criar $CVSROOT/debian/&lt;pacote&gt; como root
	e mudar o usuário e grupo dono no repositório para o usuário ou
	grupo respectivamente. A importação do CVS irá imprimir um
	aviso que não pode criar o diretório debian/&lt;pacote&gt;, mas 
	está tudo bem.

   <p>O próximo passo é checar a árvore inteira e incorporar todas as suas
	mudanças.

<pre>
   $ cd /onde/sua/árvore/fonte/reside
   $ cvs checkout &lt;pacote&gt;
</pre>

   <p>Se você já criou uma versão debianizada mas não usou o CVS antes você
	deve querer rodar os comandos a seguir para mudar suas mudanças.
	Depois disso você deve definir esse lançamento para estar apto a
	checá-lo algum tempo depois.

<pre>
   $ cd /onde/sua/árvore/fonte/reside/&lt;pacote&gt;-&lt;versão&gt;
   $ diff -qrBbw . /onde/sua/árvore/fonte/reside/&lt;pacote&gt;/ | grep -v CVS
   $ FILES_CHANGED_LOCALLY="&lt;saída do acima&gt;"
   $ tar cf - $FILES_CHANGED_LOCALLY | \
       tar -C /onde/sua/árvore/fonte/reside/&lt;pacote&gt; -xvpf -
   $ cd /onde/sua/árvore/fonte/reside/&lt;pacote&gt;
</pre>

   <p>Por favor assegure-se de que o arquivo debian/rules esteja executável,
	já que desse jeito ele deve estar executável quando exportado e 
	não haverá problemas rodando dpkg-buildpackage nos fontes exportados.
	Em geral, assegure-se de que <b>todos</b> os arquivos têm as
	permissões certas antes de adicioná-las ao repositório CVS.

<pre>
   $ cd /onde/sua/árvore/fonte/reside/&lt;pacote&gt;
   $ cvs add debian &lt;qualquer outro arquivo adicionado também&gt;
</pre>

   <p>Também, por favor note que você tem de adicionar todos os arquivos
	adicionais que devem ser colocados no repositório, especialmente
	todos os arquivos no subdiretório debian. Também, por favor note que
	o comando cvs add <i>não</i> funciona recursivamente, então você deve ter de
	adicionar manualmente quaisquer subdiretórios que você tenha. 
	(cd debian ; cvs add *)

   <p>Uma boa coisa é que rodar cvs update irá mostrar o estado de todos os
	arquivos no diretório.

<pre>
   $ cd /onde/sua/árvore/fonte/reside/&lt;pacote&gt;
   $ cvs update
</pre>

   <p>A saída se parece com:
<pre>
       cvs update: Updating .
       M Makefile
       cvs update: Updating debian
       A rules
       ? example1
</pre>
   M significa modificado (foi enviado), A significa Adicionado (tem de ser 
	enviado), ? significa que o CVS não sabe nada do arquivos (precisa
	ser adicionado, talvez?). Quando você está satisfeito que nada está
	faltando e todos os arquivos têm as permissões requeridas, você
	está pronto para enviar (commitir).

<pre>
   $ cd /onde/sua/árvore/fonte/reside/&lt;pacote&gt;
   $ cvs commit -m 'Fiz todas as mudanças debian'
   $ cvs tag debian_version_&lt;versão|tr . _&gt;-&lt;revisão-debian|tr . _&gt; .
</pre>

   <p>A nova árvore fonte residirá num diretório que não contém o número
	de versão. Não é esse o problema como veremos depois.

   <p>Se ao invés de criar o diretório debian do início (pode ser mais
	simples, apesar de menos automatizado):

<pre>
   $ mkdir debian
</pre>

   <p>Crie todos os arquivos debian e adicione todos eles no controle de fonte.
<pre>
   $ cvs add debian
   $ cd debian
   $ cvs add *
</pre>

   <p>Depois disso o próximo envio incluirá todos os arquivos.

<pre>
   $ cd /onde/sua/árvore/fonte/reside/&lt;pacote&gt;
   $ cvs commit -m &lt;alguma mensagem&gt;
</pre>

<li>Preparar uma release

   <p>Antes você pode rodar alguns dos comandos Debian que construirão um
	pacote, você tem de buscar o módulo sem todos os subdiretórios
	do CVS. Isso é feito com o comando `<kbd>export</kbd>'. Mas antes de tudo
	você precisa enviar todas as suas modificações e marcá-las com
	um número de release.

<pre>
   $ cvs commit -m &lt;mensagem&gt;
   $ cvs tag debian_version_&lt;versão|tr . _&gt;-&lt;revisão-debian|tr . _&gt;
</pre>


<li>Faça uma release

   <p>Você pode ou usar o mecanismo do cvs-buildpackage (preferido) ou um
	export manual. Primeiro teste o do cvs-buildpackage com uma execução
	limpa (assegure0se de que as tags batem) assim (Deve-se ter configurado
	o /etc/cvsdeb.conf):

<pre>
   $ cvs-buildpackage -d -n -rsudo
</pre>

   <p>Então faça a execução real com, esperando que o sudo seja um
	programa com o qual você possa ganhar acesso root.

<pre>
   $ cvs-buildpackage -rsudo
</pre>

   <p>Ou para fazer isso manualmente:

   <p>Baixe o pacote.

<pre>
   $ cvs export -d &lt;pacote&gt;-&lt;versão&gt; \
         -r debian_version_&lt;versão|tr . _&gt;-&lt;revisão-debian|tr . _&gt; \
             &lt;package&gt;
</pre>

   <p>Agora você pode ir em frente com o mecanismo normal de export de release.


<hr>

   <p>Pronto! Parabéns! Aqui estão algumas tarefas que você pode executar em
	sua árvore fonte:

<hr>

<li>Remover ou renomear um arquivo

   <p>O jeito normal de mover um arquivo é copiar VELHO para NOVO e então
	executar os comandos normais de CVS para remover VELHO do repositório
	e adicionar NOVO a ele. (Ambos VELHO e NOVO poderiam conter caminhos
	relativos, por exemplo `<kbd>foo/bar.c</kbd>').

<pre>
   $ mv VELHO NOVO
   $ cvs remove VELHO
   $ cvs add NOVO
   $ cvs commit -m "Renomeei VELHO para NOVO" VELHO NOVO
</pre>

   <p>Esse é o modo mais simples de se mover um arquivo, não é passível de
	erros e preserva a história do que foi feito. Note que para acessar
	a história do arquivo você deve especificar o novo nome ou o velho
	nome, dependendo de qual porção da história vai acessar. Por exemplo
	`<kbd>cvs log VELHO</kbd>' dará o log até a hora da renomeação.


<li>Atualizando um módulo com o comando import

   <p>Quando uma nova release do fonte chega, você o importa para o
	repositório com o mesmo comando `import' que você usou para
	configurar o repositório em primeiro. A única diferença é que
	você especifica uma tag diferente de release dessa vez, e uma
	mensagem diferente.

<pre>
   $ cd /onde/sua/árvore/fonte/reside/&lt;novo diretório fonte&gt;
   $ cvs import -m 'importa nova release' debian/&lt;pacote&gt; source-dist \
         upstream_version_&lt;versão|tr . _&gt;
</pre>

   <p>Agora, nós temos que incorporar as mudanças que fizemos à nova
	revisão. O melhor jeito de fazer isso é mover nossa cópia para
	outro local (baseado no velho fonte externo) e buscar uma nova
	cópia do pacote <b>incorporando</b> as mudanças feitas no fonte 
	externo. Isso é como fazê-lo:

<pre>
   $ cd /onde/sua/árvore/fonte/reside
   $ mv &lt;pacote&gt; &lt;pacote&gt;.old
   $ cvs checkout -jsource-dist:yesterday -jsource-dist &lt;pacote&gt;
   $ cd /onde/sua/árvore/fonte/reside/&lt;pacote&gt;
</pre>

   <p>O comando acima irá enviar a última revisão do &lt;pacote&gt;,
	juntando as mudanças feitas no galho do distribuidor `source-dist'
	desde ontem em uma nova cópia. Se quaisquer conflitos aparecerem
	durante a junção eles devem ser resolvidos do modo normal. Então
	os arquivos modificados podem ser commitidos.

   <p>Usar uma data, como sugerido acima, assume que você não importe mais
	que uma release de um produto por dia. Se você fizer, você pode
	sempre usar algo como isso:

<pre>
   $ cvs checkout -jupstream_version_&lt;versão_antiga|tr . _&gt; \
                  -jupstream_version_&lt;versão_nova|tr . _&gt; &lt;pacote&gt;
</pre>

   <p>Nesse caso, os dois comandos acima são equivalentes.

   <p>Para arquivos que não foram modificados localmente, a revisão
	criada torna-se a revisão "cabeça".

   <p>Então, cheque e veja se todos os arquios foram atualizados
	corretamente. Especialmente lembre-se de mudar o arquivo
	debian/changelog.

   <p>Quando estiver satisfeito, você pode remover a versão velha do diretório
	de trabalho. Esteja bem certo de remover o diretório correto.
   
<pre>
   $ rm -rf ../&lt;pacote&gt;.old
</pre>

   <p>Agora você está pronto para preparar um lançamento.

<li>Remova a árvore fonte para conservar espaço de disco

   <p>Para remover o diretório atual da árvore fonte você não deve usar 
   <kbd>rm -rf</kbd> mas usar o comando CVS que também testa se você 
   fez alguma mudança local que não foi enviada ainda.

<pre>
   $ cd /onde/sua/árvore/fonte/reside
   $ cvs release -d &lt;pacote&gt; 
</pre>


<li>Glossário

<pre>
   Tags		nomes simbólicos para revisões
   Repositório	Arquivo de arquivos fonte
</pre>

<li>Apêndice:

 <p>A: CONVENÇÕES DE TAG CVS

<pre>
 |======================================================================|
 |Versão Externa      | &lt;versão&gt;                                        |
 |Revisão Debian      | &lt;revisão&gt;                                       |
 |Nome de arquivo Orig| package_&lt;versão&gt;.orig.tar.gz                   |
 |Nome do pacote      | package_&lt;versão&gt;-&lt;revisão&gt;_&lt;arch&gt;.deb         |
 |Tag de Distribuidor | upstream_version_&lt;versão  | tr . _&gt;            |
 |Tag atual do CVS    | debian_version_&lt;revisão | tr . _&gt;              |
 |======================================================================|
</pre>

 <p>Exemplos:
<pre>
 |======================================================================|
 |                    | fontes externos        | pacote Debian apenas   |
 |======================================================================|
 |Versão Externa      | 2.76                   | 3.38                   |
 |Revisão Debian      | 1.2                    |                        |
 |Nome de arquivo Orig| make_2.76.orig.tar.gz  |                        |
 |Nome do pacote      | make_2.76-1.2_i386.deb | kpkg_3.38_i386.deb     |
 |Tag de Distribuidor | upstream_version_2_76  | upstream_version_3_38  |
 |Tag atual do CVS    | debian_version_2_76-1_2| debian_version_3_38    |
 |======================================================================|
</pre>

 <p>Note que números de época são ignorados enquanto determinando o nome
 da tag CVS (eles são geralmente usados para mudar a opinião do dpkg sobre
 ordem de paoctes e não são relevantes às tags CVS normalmente).

</ol>

Reply to: