blob: 15d91e9848c1b9c89fc2e77b1e0f4765e1ce0d3b (
plain) (
blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
|
#!/bin/dash
if test -z "${GIT_CDIFF_CONTEXT}"; then
git difftool -y -x "diff -c --color=always" "$@"
elif printf '%s' "${GIT_CDIFF_CONTEXT}" | grep -q '^-'; then
git difftool -y -x "diff ${GIT_CDIFF_CONTEXT} --color=always" "$@"
else
git difftool -y -x "diff -C${GIT_CDIFF_CONTEXT} --color=always" "$@"
fi | {
# this part of the pipeline is optional, it just makes GNU diff colouring bit nicer
if test "$TERM" = linux; then
sed '/^\(\x1b\[[0-9;]*m\)* /s/\x1b\[[0-9;]*m//g'
else
sed '/^\(\x1b\[[0-9;]*m\)* /s/^/\x1b\[2m/g'
fi
} | {
# this part of the pipeline is optional (and breaks diff format), it adds line number to the margin
if printf '%s' "${GIT_CDIFF_CONTEXT}" | grep -q '^-'; then
exec cat
fi
if test "$TERM" = linux; then
linecolour="35"
else
linecolour="2;35"
fi
lineno=x
while IFS= read -r line; do
if printf '%s\n' "$line" | sed 's/\x1b\[[0-9;]*m//g' | grep -q '^\(\*\*\* \|--- \)[0-9]*,[0-9]* \(\*\*\*\*\|----\)$'; then
lineno="$(printf '%s' "$line" | sed 's/\x1b\[[0-9;]*m//g' | sed 's/^\(\*\*\* \|--- \)\([0-9]*\),.*$/\2/')"
printf '%s\n' "$line"
elif test ! "$lineno" = x && printf '%s\n' "$line" | sed 's/\x1b\[[0-9;]*m//g' | grep -q '^\(!\|+\|-\| \) '; then
printf '\e[%sm%5i \e[m%s\n' "$linecolour" "$lineno" "$line"
lineno=$(( $lineno + 1 ))
else
lineno=x
printf '%s\n' "$line"
fi
done
} | {
if test -t 1; then
less -FRX
else
cat
fi
}
|