debian/patches

Esta página resultou da seguinte discussão na lista debian-devel em janeiro de 2008: <alpine.DEB.1.00.0801250818360.5187@wr-linux02>. Também inclui ideias da discussão #250202 sobre a Política Debian.

Nota: O formato de patch agora é uma DEP, DEP-3: Diretrizes de etiquetamento de patches.

Sistemas existentes

Características gerais

Sistemas de patch

Status

Localização dos patches

Como desativar um patch

Aceita saída de diff -u

Vantagem

3.0 (quilt)

supported

debian/patches in .debian.tar.gz file

Rename to include a non-word non-hyphen character

Yes

Native to dpkg as 3.0 (quilt) format

quilt

supported

debian/patches

Remove its name from debian/patches/series

Yes

Suitable for generating patches on any size codebase. Advanced VCS-like features.

cdbs simple-patchsys

deprecated

debian/patches

Remove its .diff or .patch suffix

Yes

Simple

2.0 a.k.a. wig&pen

obsolete (use 3.0 quilt)

debian/patches in .debian.tar.gz file

Rename to include a non-word non-hyphen character

Yes

Native to dpkg as 2.0 format

dpatch

obsolete

debian/patches

Remove its name from debian/patches/00list

Header needs to be added

Can do scripting

dbs

obsolete

debian/patches

Remove it from the directory

Yes

Patches applied in ASCIIbetical order, no series file. Tarball-in-tarball (if you're in to that).

Pacotes usando o sistema dpatch podem ser convertidos facilmente para o sistema quilt, o qual tem melhor suporte por outros softwares; por exemplo, guilt para git.

Alvos patching/unpatching que podem ser incluídos em debian/rules

Graças à cooperação dos(as) mantenedores(as) do dpatch, quilt e CDBS, os alvos patch e unpatch tornaram-se os padrões.

Arquivo

Pacote

Faz um patch

Desfaz um patch

/usr/share/dpatch/dpatch.make

dpatch

patch

unpatch

/usr/share/quilt/quilt.make

quilt

patch

unpatch

/usr/share/cdbs/1/rules/patchsys-quilt.mk

quilt

patch

unpatch

/usr/share/cdbs/1/rules/simple-patchsys.mk

cdbs

patch

unpatch

/usr/share/cdbs/1/rules/dpatch.mk

cdbs

patch

unpatch

Observe que, no caso do quilt, pode ser melhor usar $(QUILT_STAMPFN), já que patch é um alvo phony.

Limitações

Usuários(as) de um pacote-fonte precisam da fonte desempacotada não pronta para construção, mas pronta para inspeção e modificação. Os dois principais casos de uso são a aplicação de modificações locais (menores) (correções de segurança, opções de tempo de compilação), e inspeção manual ou automatizada do código-fonte (auditoria, pesquisa). Isso deve ser possível sem instalar pacotes adicionais além do dpkg-dev.

Foi discutido que o uso de sistemas de patch estava dificultando o trabalho das equipes de portes, NMUs, segurança e qualidade por várias razões:

  1. Profusão de sistemas de patch. As pessoas teriam que aprendê-los todos e ser capazes de detectar qual o sistema usado no pacote em que estão trabalhando.
  2. A dificuldade de reempacotar as fontes. Se as modificações diretas dos pacotes-fonte bloquearem o alvo unpatch, e se esse alvo for chamado clean, o dpkg-buildpackage falhará.

  3. Esta abordagem não é compatível com o formato 3.0 (quilt).

  4. Documentos como /usr/share/doc/debian/source-unpack.txt não alertam que as modificações nas fontes recém-desempacotadas podem quebrar a etapa de patch.

Proposed improvements

Ideias rejeitadas

Usando um VCS (em vez de um sistema de patch) para rastrear alterações

Manter um pacote inteiro, incluindo fontes upstream, em um sistema de controle de versão (VCS) é frequentemente usado como um método de gerenciamento da modificação para fontes upstream.

Comparação entre dois paradigmas

debian/patches

VCSes

Changes to upstream sources are divided in logical blocks that are the patches.

Changes to upstream sources are divided into logical blocks that are groups of commits.

dpkg-buildpackage can fail after modifications of the sources

dpkg-buildpackage can not be blocked by the impossibility to unpatch the sources.

The diff.gz file only contains files located in the debian directory

Informations conveyed by defining groups of commits is not reflected in the diff.gz file.

Well documented in beginners tutorials, strong tradition in packaging teams.

No tutorials for beginners, new and not widespread yet.

Repositories can be limited to contain only the debian directory.

Need to keep the upstream sources in a VCS as well. Not true in my experience. What's the justification for this assertion? --BenFinney

Some systems, such as dpatch allow scripting.

Changes are systematically applied.

É claro que o uso do VCS tem outras vantagens, mas essa tabela se concentra na perspectiva de sua substituição para sistemas de gerenciamento de patches.

Questões não respondidas

Situação atual

No momento da versão dpkg 1.14.17, o formato 3.0 foi incluído e os bugs: 4588 e outros foram fechados.


FixMe: renomear página para DebianPatches? O endereço "debian/*" não parece se adequar à hierarquia wiki.


CategoryPackaging