Como dividir e editar patches?

10

Às vezes, preciso dividir um patch grande em outros menores (disjuntos), por exemplo, para cada recurso separado incluído.

Geralmente faço isso por meio de comandos vim yank / dd padrão e troca de janela dividida.

Mas existem algumas ferramentas / vim-truques para ajudar com esse tipo de edição?

Por exemplo, suporte a comandos como: mova os 3 próximos blocos completos para o arquivo de correção aberto à direita

maxschlepzig
fonte
Você também pode querer olhar para unix.stackexchange.com/questions/618/how-to-merge-patches
Maciej Piechotka
1
BTW, como é que as pessoas respondem à pergunta, mas não a consideram útil / clara o suficiente para votar novamente?!? ;)
maxschlepzig 01/10/10

Respostas:

7

Você pode dar uma olhada nos patchutils [1]. Para a parte do vim, escrevi um pequeno plugin do vim que ajuda a navegar nos patches: diff_navigator [2].

[1] http://cyberelk.net/tim/software/patchutils/

[2] http://www.vim.org/scripts/script.php?script_id=2361

Petr Uzel
fonte
1
A diff_navigatorURL é aparentemente vim.org/scripts/script.php?script_id=2361 Emacs tem características semelhantes nas Ediff modos e SMerge
Riccardo Murri
2
Você poderia estender sua resposta para torná-la mais abrangente? Adicionando um exemplo de como usar o utilitário a partir do patchutils estabelecidos para dividir um grande patch para os disjuntos seria ótimo ...
maxschlepzig
5

Um pouco fora do tópico, eu acho, mas ainda acho que é útil.

Se você usar o git para o seu desenvolvimento, poderá facilmente dividir todas as suas alterações em "pequenos pedaços" que incorporam um recurso cada. Você acaba com um commit por recurso e pode usar o git git-format-patchpara criar (e até assinar e atribuir adequadamente) patches, descrevi como fazer isso aqui

tante
fonte
3

Meu Suse tem splitdiffutil que funciona assim:

$ splitdiff -a tmp.179639.patch
Wrote >tmp.179639.patch.part001
Wrote >tmp.179639.patch.part002
akond
fonte
0

Você pode usar isso para dividir o patch grande em blocos menores (por arquivo ou cada pedaço) e, se precisar mesclar, use o combinadoiff do pacote patchutils mencionado na resposta de Petr Uzel

Dror Cohen
fonte