arquivos com barra no nome
August 27, 2009, by Antonio Terceiro - No comments yetComo em todo sistema operacional que merece alguma forma de respeito a barra ("/") é usada como separador de diretórios, normalmente a gente não consegue criar arquivos com uma barra no nome. Mas nesse post eu quero mostrar que dá pra ter arquivos com barra no nome:
terceiro@morere:/tmp/slash> ls -l
total 0
terceiro@morere:/tmp/slash> touch filename∕with∕slashes
terceiro@morere:/tmp/slash> ls -l
total 0
-rw-r--r-- 1 terceiro terceiro 0 Ago 27 16:59 filename∕with∕slashes
terceiro@morere:/tmp/slash>
Qual o truque? Simples, basta usar o caractere Unicode 0x2215 ("DIVISION SLASH") no lugar da barra ASCII normal! Basta abrir o gucharmap ("Mapa de caracteres" nos menus que seguem o padrão freedesktop), procurar por ele no Sistema de escrita "Comum" (lado esquerdo da janela), dar um duplo clique e daí copiar o caracter na caixa de texto no rodapé e colá-lo no seu terminal, ou no seu gerenciador de arquivos desktop, tanto faz.

Aí você me pergunta: qual a utilidade disso? Bom, eu quero rodar um programa pra um conjunto de branches num repositório git e salvar a saída padrão e e a saído de erro de cada execução em arquivos com o nome do branch, mas esses branches normalmente teem barras no nome. Como eu quero todos os arquivos de resultado no mesmo diretório, então no meu script eu troco as barras ASCII por essa barra especial. Nas fontes em que eu testei os dois caracteres são idênticos visualmente, mas por baixo dos panos eles são diferentes.
Fazendo o svn diff ser suportável
August 21, 2009, by Antonio Terceiro - No comments yetJá tem um tempo que eu uso git diariamente, e a opção de colocar cores nas saídas dos comandos é extremamente útil. Especialmente quando você quer ver um diff, isso facilita a sua vida. Daí quando você por algum motivo precisa usar svn de novo, seja pra mandar um patch pra um projeto que ainda usa svn, seja pra um projeto seu que ainda esteja nas trevas, vem aquele diff feio. Seus problemas acabaram:
- edite o arquivo ~/.subversion/config, e dentro da seção helpers, diga para o svn usar um comando diferente do default como programa diff:
diff-cmd = /home/USERNAME/bin/svn-git-diff
(esse programa pode estar em qualquer diretório que esteja no seu PATH) - esse svn-git-diff é um script bastante simples. O svn vai chamá-lo com um monte de parâmetros, mas os únicos que importam são o sexto e o sétimo, que indicam o arquivo original e a sua versão modificada.
#!/bin/sh
export PAGER=/bin/cat
git diff --no-index "${6}" "${7}" - não se esqueça de tornar esse script executável com
chmod +x /home/USERNAME/bin/svn-git-diff(o caminho real do arquivo vai depender se onde você o colocou).
E era isso. Agora quando você der svn diff, o diff vai sair colorido assim como quando você está verificando diffs (ou commits) no git.
update: numa versão mais nova do git (1.6.5.2) é necessário passar --no-index pra que o git diff funcione fora de um repositório git.
update 2: é preciso setar PAGER para /bin/cat para que o git não faça um pipe para o less de cada arquivo individualmente, e sim cuspa todo o diff na tela de vez (porque o subversion vai chamar o script uma vez pra cada arquivo alterado).




