quarta-feira, 4 de março de 2009

Truque Para SubVersion

Pessoal, estou colocando esse post no blog, pois durante muito tempo pesquisei uma forma rápida e fácil de apagar diretórios dentro de diretórios.

Quem utiliza o SubVersion sabe que isso é muito útil de vez em quando. Por duas razões: a primeira é que sempre que compilamos uma aplicação .Net, o Visual Studio cria dois diretórios dentro de cada projeto: bin e obj; a segunda razão é quando queremos retirar um projeto do controle do SubVersion e precisamos apagar o diretório .svn dentro de cada diretório da aplicação.

Essa tarefa é muito enfadonha, principalmente quando a aplicação possui dezenas de pastas.

O problema com os diretórios bin e obj é que eles contém diversos arquivos resultantes da compilação, inclusive vários sub-diretórios temporários. E não queremos estes diretórios dentro do repositório, pois são produtos da aplicação e não código-fonte.

A receita que eu achei é bem simples, mas também bem curiosa. Eu por exemplo não sabia que o DOS tinha um comando de laço FOR. Pois é, esse comando existe e funciona muito bem!

Digitando FOR /? na linha de comando do DOS, podemos ver um texto que nos auxilia a montar o comando. Por exemplo:

Clique para ampliar.
Clique na imagem para ampliar.

Veja que dessa forma, podemos executar um comando dentro de um laço de arquivos.
O que eu fiz, foi colocar a seguinte instrução dentro de um arquivo .BAT:

FOR /F "tokens=*" %%G IN ('DIR /B /AD /S *%1*') DO RMDIR /S /Q "%%G"

Este comando acima executa o comando DIR com as opções de pesquisa por diretório e com recursividade, para entrar em todos as sub-pastas.

O comando RMDIR remove cada pasta encontrada que atende o filtro *%1*. O parâmetro %1 é informado pela linha de comando. Se chamarmos o arquivo de lote de DELSUBDIR.BAT e quisermos apagar as pastas BIN, então teremos a seguinte instrução:

DELSUBDIR.BAT BIN

Repare que este comando acima utilizará o seguinte filtro: *BIN*. Ou seja, apagará todos os diretórios que tiverem o termo BIN no nome, seja no começo, meio ou fim. Tome cuidado então caso na sua aplicação você tenha um diretório chamado: "Albino", por exemplo. Por isso, ajuste o comando para suas necessidades.

Bom, para facilitar o trabalho, eu criei um outro arquivo .BAT para apagar as pastas BIN e OBJ recursivamente e o incluí no diretório SendTo (EnviarPara) do Windows.

Eu criei então o arquivo DEL_OBJ_BIN.BAT com as seguintes instruções:

@echo off
cd %1
call delsubdir bin
call delsubdir obj


Perceba que o comando CD %1 é importante para alterar o prompt da linha de comando para o diretório que terá os BINs e OBJs apagados.

Mais uma vez o %1 é um parametro de linha de comando, passado para o arquivo .BAT na execução.

Mas dessa vez, como vamos colocar esse arquivo dentro da pasta SendTo, esse parâmetro será automaticamente passado para o arquivo .BAT quando selecionarmos o menu de contexto apropriado. Veja exemplo abaixo:


Clique para ampliar.
Clique na imagem para ampliar.

Pronto, é isso! Simples assim, basta clicar com o botão direito no diretório e selecionar Enviar para -> Del_Bin_Obj.bat e todos os diretórios BINs e OBJs somem instantaneamente!

Lembre-se que apesar de aparecer no menu de contexto a opção "Enviar para", o diretório chama-se SendTo e fica em:

C:\Documents and Settings\[Nome do Seu Usuário Logado]\SendTo

Até a próxima!
Graccs.

Nenhum comentário: