Tornando a saída diff mais legível

12

Estou procurando uma ferramenta que obtenha a saída diff / debdiff ( e, mais especificamente, a saída desse script ) e exiba o resultado da comparação de uma maneira gráfica altamente legível. Qualquer ponteiro seria apreciado.

Idealmente, seria o equivalente GTK +, FOSS do MDR .

Meld, Diffuse e software similar não são adequados para esse fim, pois são projetados para funcionar de forma independente e não recebem informações do stdin.

mgunes
fonte

Respostas:

8

O Kompare pode fazer isso (e é o melhor IMO da interface gráfica do usuário):

./whatchanged package_name | kompare -

Observe o '-' fornecido como argumento do arquivo de entrada. A maioria dos programas * nix tem essa interface para aceitar entrada canalizada, então você provavelmente pode usar a que quiser.

scottl
fonte
Sim, tentei isso com o Meld, mas o que acontece é que o Meld é iniciado imediatamente e obtém a saída intermediária do script, em vez de ser iniciado assim que o script termina e obtém a saída diff. Provavelmente preciso ajustar o fluxo do script para funcionar corretamente com o Meld e outros softwares para os quais ele é canalizado. E com "bzr diff" e saída diff normal, o Meld é iniciado no modo VCS, em vez de no modo de comparação de arquivos.
mgunes
Resolvi o problema do modo VCS iniciando o Meld com a opção -a. O Kompare também funciona. Tudo o que resta é tornar o script ciente.
mgunes
3

Se você tiver apenas um console, colordiff é uma solução muito boa.

Para instalá-lo, execute este comando sudo apt-get install colordiffem um terminal

Mnementh
fonte
2

Eu gosto de usar o destaque da sintaxe interna do vim como um pager, para que eu possa ver as diferenças coloridas. Por exemplo, colocando isso em seu .bashrc:

sudo apt-get install vim
alias vless='vim -u /usr/share/vim/vimcurrent/macros/less.vim'

(E, em seguida, re-source seu .bashrccom . ~/.bashrc.) Em seguida, você pode executar vlesscomo seu pager:

vless /path/to/your.diff

Não é gráfico, mas é pelo menos destacado.

Kees Cook
fonte
Mas ele não pediu arquivos diff coloridos, ele pediu diffs gráficos. O que sugere que você precisa poder ler os arquivos originais tanto quanto o diff em si.
Martin Owens -doctormo-
Bem, "ler de stdin" era um requisito. Se "Meld" foi descartado, não resta muito. A outra resposta que cria o diff e abre o Meld é a melhor aposta para o gráfico. Ou poderia ser iniciado gedit.
quer
você não está colocando "sudo apt-get install vim" no seu .bashrc, edite para deixar claro.
Capi Etheriel
2

Embora um aplicativo KDE possa ser instalado sem muitas dependências, o kdiff é uma incrível ferramenta de edição / mesclagem de diferenças.

Johanna Larsson
fonte
1
Embora o kdiff (também conhecido como kdiff3 no arquivo do ubuntu) seja uma ótima ferramenta, ele também não satisfaz a pergunta do OP, pois eles estão procurando uma ferramenta que ofereça um diff ao STDIN e o exiba, e pela exploração limitada que fiz, Eu não conseguia ver uma maneira de fazer isso. Além disso, se a redução de dependências do KDE é um problema, o arquivo do ubuntu inclui o kdiff3-qt, que depende apenas do qt e não das bibliotecas da pilha do KDE.
9788 Steve Jobs:
2

Eu usaria esse script simples para usar o meld (ou qualquer outra ferramenta existente), dessa maneira você obtém um pouco de flexibilidade:

#!/bin/bash

TMPDIR=`mktemp -d`
DIFF_FILE=`mktemp`
TARGET='./'

cat /proc/$$/fd/0 > $DIFF_FILE
cd $TARGET
rsync -apvz --delete --stats --compress --progress $TARGET $TMPDIR
patch -R -p0 -d $TMPDIR < $DIFF_FILE
meld $TARGET $TMPDIR

Testado com meld e a saída do diff bzr, copiei isso para / usr / bin e chmod 755 e fiz isso:

bzr diff | meld-diff

Os resultados são mostrados como esperado.

Martin Owens -doctormo-
fonte
4
Embora não seja um problema tão grande em máquinas de usuário único, você deve usar mktempe mktemp -dgerar seu arquivo e diretório temporários com segurança, por nenhum outro motivo, a não ser para que você possa executar diferenças em várias árvores ao mesmo tempo, sem se preocupar. o outro.
Steve Beattie
Funciona com diff bzr, mas apenas no modo de comparação de diretório. Quero poder comparar arquivos individuais também. Vou tentar refiná-lo para realmente trabalhar com meu script também, o que não acontece no momento; obrigado.
mgunes
Marque-me se você acha que minha ideia de usar o script é boa. Até agora eu tenho sido marcado demais.
Martin Owens -doctormo-
1

Sei que você não pediu uma ferramenta diff integrada a um editor, mas tenho certeza de que pode evitar a alternância de contexto (de editor para terminal e de volta para editor) depois de aprender um pouco sobre o que seu editor pode oferecer. Tanto o emacs quanto o vim vêm com ferramentas diff.

  • Para o caso emacs , você usará o Ediff Mode (instalado por padrão). Consulte esta página da wiki ou consulte o manual oficial

  • Usar o emacs é simples, basta digitar Alt + xe digitar ediff.

  • Você pode usar a diferença do ediff para o navegador entre ramificações e revisões do seu repositório (bzr, git, svn, etc).

crncosta
fonte
Você se importaria em mostrar um exemplo rápido de como difundir ramificações git rastreadas remotamente com uma cópia de trabalho atual (vários arquivos)?
mlt