<div dir="ltr"><br>Olá Galera,<br><br>Estou com uma dúvida que persiste há um tempo e não consigo resolver.<br>Aqui na empresa tem um repositório com o SVN e quando um camarada vai fazer um commit ele coloca a seguinte sintaxe no log.<br>
<br>#file=caminho/do/arquivo/comitado#status=draft<br><br>ou quando o arquivo foi aprovado<br><br>#file=caminho/do/arquivo/comitado#status=aprovado<br><br>No svn tem um arquivo que é executado quando uma pessoa faz um commit no repositório. Ele se chama commit-email.pl<br>
<br>O meu superior pediu para que eu gerasse uma base de dados com estas informações que o pessoal coloca nos logs. Esta base de dados<br>ficaria da seguinte forma:<br><br>caminho/do/arquivo/comitado,draft<br>caminho/do/arquivo/comitado.doc,draft<br>
caminho/do/arquivo2/comitado,draft<br><br>e quando o arquivo fosse aprovado, ele teria que ser substituido o draft por aprovado. Ex.:<br><br>caminho/do/arquivo/comitado,aprovado<br>caminho/do/arquivo/comitado.doc,aprovado<br>
caminho/do/arquivo2/comitado,aprovado<br><br>Então, eu fiz o código abaixo para gerar a base.<br><br>O que este código deve fazer: Ler a base de dados (um arquivo texto) e comparar cada registro que está sendo processado na hora do<br>
commit. Se o registro estiver diferente (ao invés de aprovado, estar draft), altera o da base com o que está na memória.<br><br>O problema deste código é que ele está gravando os registros de forma errada.<br>Ex.:<br><br>
caminho/do/arquivo/comitado1<br>,aprovado<br>caminho/do/arquivo/comitado2.txt<br>,draft<br>caminho/do/arquivo/comitado.doc<br>,aprovado<br><br>Aí, na próxima vez que este script é executado, dá pau em tudo.<br><br>Espero que vocês tenham entendido e consigam me ajudar.<br>
<br>######################################################################<br> # Harvest data using svnlook.<br><br> # Get the author, date, and log from svnlook.<br> my @infolines = &read_from_process($svnlook, 'info', $repos, '-r', $rev);<br>
$author = shift @infolines;<br> my $date = shift @infolines;<br> shift @infolines;<br> my @log = map { "$_\n" } @infolines;<br><br> ######################################################################<br>
<br> my $repositorio = $repos;<br> $repositorio =~ s/\/|svn//g;<br> $repositorio = uc($repositorio);<br> my $db_file = "/svn/basedados.$repositorio";<br> # Geracao de Base de dados para analise posterior<br>
if ($db_file =~ /\w/){<br> my %registro = ("","") ;<br> my %registro_versionado = ("","");<br><br> my $linha = "";<br> my $status = "";<br>
my $linha_versionada = "";<br> my $status_versionado = "";<br><br> delete($registro{""});<br> delete($registro_versionado{""});<br><br> # Processar a saida de log.<br>
for (@log){<br> $linha_versionada = $_;<br> if($linha_versionada =~ /^#/){<br><br> $linha_versionada =~ s/^#//gi;<br> $linha_versionada =~ s/#/,/gi;<br>
$linha_versionada =~ s/file=|status=//gi;<br><br> $status_versionado = $linha_versionada;<br> $status_versionado =~ s/(.*),//gi;<br><br> # $file_versionado recebe registro da memoria sem status para comparar com o registro da base.<br>
$linha_versionada =~ s/,(.*)//gi;<br><br> $registro_versionado{$linha_versionada} = $status_versionado;<br> }<br> }<br> # Abrir base de dados para buscar registros.<br>
if (open(DBFILE, "< $db_file"))<br> {<br> for my $value (<DBFILE>){<br> $linha = $value;<br> $status = $value;<br><br> $linha =~ s/,(.*)//gi;<br>
$status =~ s/(.*),//gi;<br><br> $registro{$linha} = $status;<br> # print $linha.",".$registro{$linha}."\n";<br> }<br> close DBFILE<br>
or warn "$0: error in closing `$db_file' for appending: $!\n";<br><br> # Se a base esta vazia, nao tem o que fazer, a nao ser adicionar o registro nela.<br> if ($linha eq "")<br>
{<br> if (open(DBFILE, "> $db_file"))<br> {<br> while (my ($key, $value) = each(%registro_versionado))<br> {<br> my $tmp = join (',',$key,$value);<br>
$tmp =~ s/\n//;<br> print DBFILE $tmp;<br> }<br> close DBFILE<br> or warn "$0: error in closing `$db_file' for appending: $!\n";<br>
}<br> }<br> }<br> # Ordenacao do arquivo<br> #my @vetOrdem = sort {uc($a) cmp uc($b)} @vetTmp;<br> #<br> #while((my $key_versionado, my $value_versionado) = each(%registro_versionado))<br>
#{<br> # $registro{$key_versionado} = $value_versionado;<br> #}<br><br> foreach my $key_versionada (sort {$a cmp $b} keys(%registro_versionado))<br> {<br> $registro{$key_versionada} = $registro_versionado{$key_versionada};<br>
}<br> if (open(DBFILE, "> $db_file"))<br> {<br> while(my ($key, $value) = each(%registro))<br> {<br> my $tmp = join(',',$key,$value);<br>
$tmp =~ s/\n//;<br> print DBFILE $tmp;<br> }<br> close DBFILE<br> or warn "$0: error in closing `$db_file' for appending: $!\n";<br>
}<br> else<br> {<br> warn "$0: cannot open `$db_file' for appending: $!\n";<br> }<br> }<br><br>######################################################################<br>
<br>T+<br clear="all"><br>-- <br>-----------------------------<br>USE Linux - Slackware<br>-----------------------------<br>
</div>