Colorize your (svn) diffs
People who know me, know that I love color on my computer screen[1]. It helps me reading code or output faster. I was not on a side track today, no, but when cleaning up my ~/bin
, I just thought that my tiny colordiff
script may be useful to others too. It (modestly) colorizes output from svn diff
, or plain diff
output.
Here is an example of svn diff
on a directory with some modified files:
[dam@doffer:~/avandam_svn/phd/sw/fortran/src]$ svn diff . | colordiff Index: mmadapt.f =================================================================== --- mmadapt.f (revision 1114) +++ mmadapt.f (working copy) @@ -429,8 +429,8 @@ subroutine eval_monitor integer :: i1, i2, iq, id real(knd_double) :: alphap(nq, ndim) - call eval_monitor_nondir - return + !call eval_monitor_nondir + !return call cellaverages(x, x, xc) ! I use this result in move_mesh too! Index: mmsolve.f [..]
You can also use this on normal diff
output:
[dam@doffer:~/avandam_svn/phd/sw/fortran/src]$ diff mmadapt.f mmadapt_bla.f | colordiff plain 466c466 < end do ! i2 --- > end do ! i2 foo 485d484 < dq(i1,i2,1:nq,1) = (q(i1+1,i2,1:nq) - q(i1-1,i2,1:nq)) / (xc(i1+1,i2,1) - xc(i1-1,i2,1)) 503a503 > ! bla
The colordiff
script only uses sed
and looks like this:
#!/bin/bash # Mainly used to pipe output by 'svn diff' into if [[ "$1" == "plain" ]] ; then # to use in plain diff usage sed -e 's/^\(>.*\)/ESC[1;34m\1ESC[0m/;s/^\(<.*\)/ESC[1;31m\1ESC[0m/;s/^\(diff .*\)/ESC[1;37;40m\1ESC[0m/' else # for svn diff output sed -e 's/^\(\+.*\)/ESC[1;34m\1ESC[0m/;s/^\(\-.*\)/ESC[1;31m\1ESC[0m/;s/^\(Index: .*\)/ESC[1;37;40m\1ESC[0m/' fi
sed
just inserts the appropriate escape characters producing color output[2] at the right places. To make sure the escape characters are correct do not copy-paste, but download colordiff here.
[1] color output for Stratego.
[2] Escape characters producing color output.