Béton brut

Diff z pakietu Subversion i białe znaki

2008-01-25

Uwielbiam Subversion. Proste do ustawienia, szybkie, dużo fajowych narzędzi dla rozmaitych systemów operacyjnych. Niestety, nawet dobre narzędzie potrafi być zgwałcone przez nieodpowiednie używanie. Mogłem ignorować ludzi dodających binarne pliki (jeden z moich branchów ma binarkę Quake 3, nie pytajcie) ale to, co otrzymałem ostatnio jako poprawkę załamało mnie.

Niektóre edytory mają ciekawe podejście do białych znaków. Dodają entery, zamieniają tabulacje na spacje, zamieniają ostatni znak tabulacji na tabulator plus dwie spacje. Cuda, po prostu, cuda. Wystarczy, że ktoś doda (hm, ciekawe jak tę notkę wypozycjonuje słowo ‘doda‘ ;-) taką zamianę i cała procedura budowania patcha idzie do piachu. Diff z pakietu Subversion nie potrafi ignorować zmian białych znaków. To powoduje, że w wyniku porównania zaznaczone są absolutnie wszystkie linie. Każda, w której zmienił się enter i spacja. Kłopotliwe.

Mógłbym wymusić standaryzacje edytorów, ale moje pokłady charyzmy nie starczą by przekonać ludzi, że Vim jest ich edytorem.

Popatrzyłem w pomoc SVN-a:

--diff-cmd arg           : use ARG as diff command
-x [--extensions] arg    : Default: '-u'. When Subversion is invoking an
external diff program, ARG is simply passed along
to the program. But when Subversion is using its
default internal diff implementation, or when
Subversion is displaying blame annotations, ARG
could be any of the following:

Wspaniale. Przetestowałem to na swoim projekcie i uzyskałem wreszcie poprawne wyniki, dzięki którym mogłem przeanalizować zmiany naniesione przez panią programolog z pokoju obok.

Teraz wystarczy dodać tylko odpowiedni alias do pliku z konfiguracją powłoki i cieszyć się poprawnie sformatowanym diffem.

alias svndiff='svn diff --diff-cmd diff -x -wb '