January 6, 2012
Programação
No Comments
Algum tempo atrás eu coloquei um repositório Git disponibilizado através do Apache2 + WebDAV utilizando a seguinte configuração do apache:
<Location /repositorio.git>
Dav on
AuthType Basic
AuthName "Repositorio Git"
AuthUserFile /etc/apache2/repositorio.passwd
Require valid-user
</Location>
Após algum tempo comecei a receber erros ao tentar fazer o push de muitas alterações. Se eu tentasse realizar vários push’s com erro, uma hora o push funcionava.
Fui procurar outras formas de disponibilizar o repositório Git no Apache2 e encontrei a forma descrita abaixo:
SetEnv GIT_PROJECT_ROOT /var/www/git
SetEnv GIT_HTTP_EXPORT_ALL
AliasMatch ^/git/(.*/objects/[0-9a-f]{2}/[0-9a-f]{38})$ /var/www/git/$1
AliasMatch ^/git/(.*/objects/pack/pack-[0-9a-f]{40}.(pack|idx))$ /var/www/git/$1
ScriptAlias /git/ /usr/lib/git-core/git-http-backend/
Esta configuração até agora não deu problema.
Mais detalhes dessa configuração podem ser encontrados no help do comando git-http-backend:
http://manpages.ubuntu.com/manpages/lucid/man1/git-http-backend.1.html
January 4, 2012
Programação
1 Comment
O seguinte texto foi traduzido e adaptado de:
http://jungels.net/articles/diff-patch-ten-minutes.html
Primeira situação: você está tentando compilar um pacote à partir do código fonte e descobre que alguém já o modificou para compilar na sua plataforma. Ele disponibilizou o seu trabalho como um “patch”, mas você não tem certeza de como utilizá-lo. Para utilizá-lo você deve aplicar o patch no código fonte original com uma ferramenta de linha de comando chamada patch.
Segunda situação: você fez o download do código fonte de um pacote open source e depois de algumas alterações você conseguiu compilá-lo na sua plataforma. Você gostaria de disponibilizar o seu trabalho para outros programadores, ou para os autores do pacote, sem distribuir todo o pacote modificado. Nesta situação você deve criar um patch, e a ferramenta necessária é a diff.
Este é um guia rápido para gerar ou utilizar patches que irá ajudá-lo nestas situações, mostrando como usar as ferramentas nas situações mais comuns.
Aplicando patches com patch
Para aplicar um patch em um arquivo, vá ao diretório onde o arquivo está e chame o comando patch:
patch < foo.patch
O comando acima assume que o patch está distribuído no formato unificado, que identifica o arquivo no qual patch deve ser aplicado. Se não estiver no formato unificado, você pode especificar o arquivo na linha de comando:
patch foo.txt < bar.patch
A aplicação de patches em um diretório (caso mais comum) é similar, mas você deve setar um "p level". Isto significa que dentro dos arquivos de patches, os arquivos são identificados por caminhos que possam ser diferentes de quando o patch foi criado. O "p level" faz com que o patch ignore partes do caminho do arquivo para que seja possível identificar os arquivos corretamente. Geralmente um "p level" de 1 irá funcionar, então utilize:
patch -p1 < baz.patch
Você deve mudar para o diretório raiz do código fonte antes de executar este comando. Se o "p level" utilizado não identificar corretamente os arquivos, procure nomes de arquivos no patch. Se você ver um nome como:
/users/stephen/package/src/net/http.c
E você estiver trabalhando em um diretório que contenha net/http.c, use:
patch -p5 < baz.patch
Em geral, conte quantos separadores de diretório (/) você precisa remover à partir do começo do caminho, até que o restante seja um caminho que exista no diretório atual. O valor encontrado será o "p level" que deve ser utilizado.
Para remover um patch, use a flag -R:
patch -p5 -R < baz.patch
Criando patches com diff
Utilizar a ferramenta diff é simples quer você esteja trabalhando com um arquivo ou com diretórios. Para criar um patch à partir de um arquivo, use:
diff -u original.c new.c > original.patch
Para criar um patch de um diretório inteiro, faça uma cópia do diretório:
cp -R original new
Faça as alterações necessárias no diretório new/. E então cria o patch com o comando:
diff -rupN original/ new/ > original.patch
Isto é tudo o que você precisa saber para começar a utilizar as ferramentas diff e patch. Para mais informações utilize:
man diff
man patch
Traduções
Inglês: http://jungels.net/articles/diff-patch-ten-minutes.html
Espanhol: http://www.rat.uclatux.org.ve/2009/05/guia-de-10-minutos-de-diff-y-patch/
Francês: http://fredgnix.wordpress.com/2012/02/15/diff-et-patch-en-dix-minutes/