<div dir="ltr"><br>
<div class="gmail_quote">2008/9/14 Luis Motta Campos <span dir="ltr">&lt;<a href="mailto:luismottacampos@yahoo.co.uk">luismottacampos@yahoo.co.uk</a>&gt;</span><br>
<blockquote class="gmail_quote" style="PADDING-LEFT: 1ex; MARGIN: 0px 0px 0px 0.8ex; BORDER-LEFT: #ccc 1px solid">&nbsp;Olá, Ronan. 
<div class="Ih2E3d"><br><br><br>Ronan Eustaquio wrote:<br>
<blockquote class="gmail_quote" style="PADDING-LEFT: 1ex; MARGIN: 0px 0px 0px 0.8ex; BORDER-LEFT: #ccc 1px solid">Então, eu fiz o código abaixo para gerar a base.<br></blockquote>&gt; (...)<br></div>
<blockquote class="gmail_quote" style="PADDING-LEFT: 1ex; MARGIN: 0px 0px 0px 0.8ex; BORDER-LEFT: #ccc 1px solid">O problema deste código é que ele está gravando os registros de forma<br>errada.<br><br>
<div class="Ih2E3d">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></div></blockquote><br>Eu tomei a liberdade de reescrever o teu código. Por favor, leia e aprenda. Atenção: eu não testei o código!!<br><br>__CODIGO_NOVO__<br>
my ( $author, $date, undef, @log ) = 
<div class="Ih2E3d"><br>&nbsp; &nbsp;read_from_process( $svnlook, &#39;info&#39;, $repos, &#39;-r&#39;, $rev );<br></div></blockquote>
<div>&nbsp;</div>
<div>&nbsp;</div>
<div><font face="courier new,monospace">Luis, se você me permite, eu não gosto muito disto, a menos que o cara saiba exatamente o que está fazendo... se o log for grande, isto poderá ser um problema !!!</font></div>
<div>&nbsp;</div>
<blockquote class="gmail_quote" style="PADDING-LEFT: 1ex; MARGIN: 0px 0px 0px 0.8ex; BORDER-LEFT: #ccc 1px solid">
<div class="Ih2E3d"><span id=""></span><br></div>my $db_file = do {<br>&nbsp; &nbsp;( my $r = uc $repos ) =~ s{/|SVN}{}g;<br>&nbsp; &nbsp;qq{/svn/basedados.$r}; 
<div class="Ih2E3d"><br>};<br><br># Geracao de Base de dados para analise posterior<br><br></div>
<div class="Ih2E3d"># Processar a saida de log.<br></div>my %registro_versionado;<br>foreach (@log) {<br>&nbsp; &nbsp;my ( $filename, $status ) =<br>&nbsp; &nbsp; &nbsp; &nbsp;m{^#file=([^#]+)#status=(draft|aprovado)};<br>&nbsp; &nbsp;$registro_versionado{$filename} = qq{$filename,$status}; 
<div class="Ih2E3d"><br>}<br><br># Abrir base de dados para buscar registros.<br></div>my %registro;<br>open my $DBFILE, &#39;&lt;&#39;, $db_file or die &quot;Can&#39;t open $db_file: $!.&quot;;<br>foreach (&lt;$DBFILE&gt;) {<br>
&nbsp; &nbsp;my ( $filename, $status ) = split qr/,/;<br>&nbsp; &nbsp;$registro{$filename} = $status;<br>}<br>close $DBFILE or die &quot;Can&#39;t close $db_file: $!&quot;;<br><br># Neste momento, eu tenho dois hash-tables com praticamente<br>
# os mesmos dados. Assumindo que um arquivo nunca deixa o<br># Version Control, eu posso simplesmente juntar os dois<br># hash-tables num unico registro e gravar de volta no<br># arquivo. Ordem eh importante.<br>my %registros_atualizados = ( %registro, %registro_versionado );<br>
open my $DBFILE, &#39;&gt;&#39;, $db_file or die &quot;Can&#39;t open $db_file:$!&quot;;<br>foreach my $file ( sort keys %registros_atualizados ) {<br>&nbsp; &nbsp;print $DBFILE $file . &#39;,&#39; . $registros_atualizados{$file} . &quot;\n&quot;;<br>
}<br>close $DBFILE or die &quot;Can&#39;t close $db_file: $!&quot;;<br>__CODIGO_NOVO__<br><br>Agora, vamos explicar o teu problema: você está lendo nomes de arquivos de dois lugares diferentes: um array e um arquivo chamado $db_file.<br>
<br>Quando você lê do array, os nomes de arquivo não contém &quot;\n&quot; (newline), e está tudo bem. Mas, quando você lê do arquivo, os nomes de arquivo contém &quot;\n&quot; (padrão no perl e no mundo unix). O problema é que você lê os nomes, faz suas transformações, mas nunca remove o &quot;\n&quot; do arquivo:<br>
<br># A merda começa aqui 
<div class="Ih2E3d"><br>
<blockquote class="gmail_quote" style="PADDING-LEFT: 1ex; MARGIN: 0px 0px 0px 0.8ex; BORDER-LEFT: #ccc 1px solid">&nbsp;if (open(DBFILE, &quot;&lt; $db_file&quot;)) {<br>&nbsp; &nbsp; for my $value (&lt;DBFILE&gt;){<br></blockquote></div>
###### Acrescente &quot;chomp $value&quot; aqui:<br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; chomp $value; 
<div class="Ih2E3d"><br>
<blockquote class="gmail_quote" style="PADDING-LEFT: 1ex; MARGIN: 0px 0px 0px 0.8ex; BORDER-LEFT: #ccc 1px solid">&nbsp; &nbsp; &nbsp; &nbsp; $linha = $value;<br>&nbsp; &nbsp; &nbsp; &nbsp; $status = $value;<br><br>&nbsp; &nbsp; &nbsp; &nbsp; $linha =~ s/,(.*)//gi;<br>&nbsp; &nbsp; &nbsp; &nbsp; $status =~ s/(.*),//gi;<br>
<br>&nbsp; &nbsp; &nbsp; &nbsp; $registro{$linha} = $status;<br>&nbsp; &nbsp; &nbsp; &nbsp; # print $linha.&quot;,&quot;.$registro{$linha}.&quot;\n&quot;;<br>&nbsp; &nbsp; }<br>&nbsp;close DBFILE or warn &quot;$0: error in closing `$db_file&#39; for appending:$!\n&quot;;<br></blockquote>
<br></div>Isso deve resolver seu problema. Mas eu recomendo:<br><br>1. Use Perl::Tidy;<br>2. Melhore o teu estilo. Você parece um programador C, não está usando nem 10% do potencial do Perl. Ler código de gente mais experiente ajuda muito;<br>
3. Nunca, jamais, por motivo nenhum, implemente um &quot;gancho&quot; no commit do SVN -- é perigoso e desnecessário: você pode obter a mesma informação a partir dos commit logs.<br><br>Espero que isso ajude.<br>Putamplexos.<br>
<font color="#888888">-- <br>Luis Motta Campos is a software engineer,<br>Perl Programmer, foodie and photographer.<br>_______________________________________________<br>Cascavel-pm mailing list<br><a href="mailto:Cascavel-pm@pm.org" target="_blank">Cascavel-pm@pm.org</a><br>
<a href="http://mail.pm.org/mailman/listinfo/cascavel-pm" target="_blank">http://mail.pm.org/mailman/listinfo/cascavel-pm</a><br></font></blockquote></div><br><br clear="all"><br>-- <br>&quot;o animal satisfeito dorme&quot;. - Guimarães Rosa<br>
</div>