Usando Quilt

Gerencie pacotes-fonte do Debian usando quilt em vez de um sistema de controle de versão. Para uma introdução ao programa, consulte /usr/share/doc/quilt/quilt.pdf.gz em quilt. Para uma discussão sobre o sistema de patches "quilt", veja Projects/DebSrc3.0. Para informações gerais sobre empacotamentos, consulte Packaging.

Informações gerais

Documentação

Conceitos básicos

O quilt funciona com alguns diretórios : cria um diretório .pc/ e um diretório patches/.

Esses diretórios podem ser criados quando você faz

  • $ quilt import algum_pacote.diff.gz

Usando quilt com pacotes-fonte Debian

Situação: você baixou um pacote-fonte Debian que usa quilt e quer corrigir um bug e, em seguida, enviar um patch para os(as) mantenedores(as).

Usando o arquivo de configuração .quiltrc

Coloque o arquivo de configuração .quiltrc em seu diretório home com as seguintes linhas:

QUILT_PATCHES=debian/patches QUILT_NO_DIFF_INDEX=1 QUILT_NO_DIFF_TIMESTAMPS=1 QUILT_REFRESH_ARGS="-p ab" QUILT_DIFF_ARGS="--color=auto" # If you want some color when using `quilt diff`. QUILT_PATCH_OPTS="--reject-format=unified" QUILT_COLORS="diff_hdr=1;32:diff_add=1;34:diff_rem=1;31:diff_hunk=1;33:diff_ctx=35:diff_cctx=33"

Variáveis de ambiente

Alternativamente, você pode definir variáveis de ambiente sozinho(a).

Adicione estas linhas aos scripts de init do shell (~/.bashrc) e reinicie o shell para aplicar as alterações. Ou, execute-as em seu shell antes de usar o quilt.

export QUILT_PATCHES=debian/patches
export QUILT_REFRESH_ARGS="-p ab --no-timestamps --no-index"

Encapsulado

Para aplicar opções do quilt somente quando dentro de um pacote-fonte Debian, você pode configurar seu ~/.quiltrc como algo assim:

d=. ; while [ ! -d $d/debian -a `readlink -e $d` != / ]; do d=$d/..; done if [ -d $d/debian ] && [ -z $QUILT_PATCHES ]; then  # if in Debian packaging tree with unset $QUILT_PATCHES  QUILT_PATCHES="debian/patches"   if ! [ -d $d/debian/patches ]; then mkdir $d/debian/patches; fi fi

Tarefas básicas do quilt

Criando um patch

apt-get source decide se aplica os patches com base no formato do pacote.

Para alguns pacotes, você terá que aplicar os patches como especificado aqui. Para outros, eles serão aplicados automaticamente.

Primeiro passo: aplicar patches existentes à fonte:

quilt push -a

para "empurrar" (push) todos os patches existentes para a árvore-fonte (quando você constrói um pacote, isso é feito pelos scripts de construção).

Criando um patch

quilt new meuPatch.diff # este é o nome do patch

adicionando um arquivo

quilt add README # Onde 'README' é o nome do arquivo que você quer modificar

Você tem que fazer isso para todos os arquivos que quiser modificar antes de alterá-los.

Um patch quilt pode alterar vários arquivos.

Agora faça alterações na fonte

Agora, faça suas alterações nos arquivos adicionados ao patch: edite-os ou substitua-os por arquivos já modificados e armazenados em um diretório diferente.

Atualizar um patch com alterações feitas em seus arquivos

quilt refresh # você pode fazer isso quantas vezes quiser

Adicione uma descrição ao cabeçalho

quilt header -e --dep3 # edita o cabeçalho em $EDITOR, iniciando com um modelo de cabeçalho DEP-3

Termine sua edição

quilt pop -a

Isso retira a aplicação de todos os patches para que a fonte retorne à condição quando baixada.

Editando um patch existente

quilt suporta patches múltiplos, mas você só muda um deles.

Este é o último patch empurrado (pushed).

Para editar um patch existente, comece "empurrando-o":

quilt push meuPatch.diff

Agora edite-o, e quando terminado, grave-o:

quilt refresh meuPatch.diff

Completação de linha de comando pode economizar algum tempo de digitação.

Atualize um patch que falhou ao ser aplicado

Se o patch não for aplicado (geralmente ao atualizar para uma nova versão upstream) quando você faz um quilt push, como o exemplo abaixo,

$ quilt push Applying patch CVE-2018-1000544_part1.patch patching file lib/zip/entry.rb Hunk #1 FAILED at 147. 1 out of 1 hunk FAILED -- rejects in file lib/zip/entry.rb patching file test/data/absolutepath.zip patching file test/entry_test.rb Patch CVE-2018-1000544_part1.patch does not apply (enforce with -f)

$ quilt push -f Applying patch CVE-2018-1000544_part1.patch patching file lib/zip/entry.rb Hunk #1 FAILED at 147. 1 out of 1 hunk FAILED -- saving rejects to file lib/zip/entry.rb.rej patching file test/data/absolutepath.zip patching file test/entry_test.rb Applied patch CVE-2018-1000544_part1.patch (forced; needs refresh)

Agora você deve inspecionar os arquivos *.rej (lib/zip/entry.rb.rej neste exemplo) e adaptar o lib/zip/entry.rb para incluir a alteração desejada.

Se a alteração foi incorporada pelo(a) upstream, você pode remover a alteração do seu patch. Por exemplo:

$ quilt refresh Diff failed on file 'test/data/absolutepath.zip', aborting # Neste caso, a alteração em absolutepath.zip já foi realizada pelo(a) upstream.  # Então vamos remover o arquivo do patch: $ quilt remove test/data/absolutepath.zip File test/data/absolutepath.zip removed from patch CVE-2018-1000544_part1.patch $ quilt refresh

Atualize os comentários de cabeçalho do patch no topo da pilha

quilt header -e

Agora que salvamos nossas mudanças, removemos todos os patches e retornamos a fonte ao seu estado original:

quilt pop -a

Encaminhado patches para upstream

Os patches não específicos do Debian, como patches para correções de bugs e aprimoramentos de recursos, precisam ser encaminhados para o(a) upstream: Como encaminhar patches para upstream].


CategoryPackaging