-
-
Notifications
You must be signed in to change notification settings - Fork 261
Expand file tree
/
Copy pathfuzzy_diff
More file actions
executable file
·76 lines (62 loc) · 1.74 KB
/
fuzzy_diff
File metadata and controls
executable file
·76 lines (62 loc) · 1.74 KB
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
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
#!/bin/sh
_usage() {
echo "Usage: $0 [-n] PO_FILE"
echo "Ease the correction of fuzzies inserted by merge commits"
echo
echo "-n, --no-edit do not launch po editor"
exit
}
LAUNCH_EDIT=1
if [ $# -eq 2 ]; then
if [ "$1" = "-n" ] || [ "$1" = "--no-edit" ]; then
LAUNCH_EDIT=0
else
_usage
fi
shift
fi
if [ $# -ne 1 ]; then
_usage
fi
if [ ! -f "$1" ]; then
echo "$1: file not found"
_usage
fi
# Temp directory to filter files before display
TMP_DIR=$(mktemp -d /tmp/fuzzy_diff.XXXXXX || exit 1)
trap 'rm --force --recursive "${TMP_DIR}"' EXIT
PO_EDITOR=poedit
DIFFTOOL=$(which $(git config diff.tool))
if [ ! -x "$DIFFTOOL" ]; then
echo "git diff.tool seems not configured"
_usage
fi
PO_FILE=$1
if [ ${LAUNCH_EDIT} -eq 1 ]; then
${PO_EDITOR} "${PO_FILE}" 2>/dev/null &
fi
git blame --line-porcelain ${PO_FILE} | \
awk '/^[0-9a-f]{40} / { sha=$1 }
/^author / {$1="" ; author=$0 }
/^committer-time / { $1="" ; date=$0 }
/^\s#, fuzzy/ { printf "%-10s %-40s %s\n", date, sha, author}' |
sort --numeric-sort --unique --reverse |
while read line ; do
gdh=$(date --date=@${line:0:10})
sha=${line:11:40}
author=${line:52}
echo "Comparing with: ${gdh} - ${author}"
# filter files à la mode textconv
git show ${sha}^:${PO_FILE} | \
grep --invert-match \
--regexp='^#:' \
--regexp='^"PO' > "${TMP_DIR}/${gdh}.po"
# reload current file every time as it may has been modified
grep --invert-match \
--regexp='^#:' \
--regexp='^"PO' ${PO_FILE} > ${TMP_DIR}/current.po
"${DIFFTOOL}" "${TMP_DIR}/${gdh}.po" ${TMP_DIR}/current.po
done
# clean up temp directory
rm --force --recursive "${TMP_DIR}"
trap - EXIT