blob: 1f852b9e582e486cde6b9da31e8d379af4bda07a (
plain)
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
76
77
|
#!/bin/bash
. "${0%/*}/common"
error=0
keys=(
'UID'
'EMAIL'
'FN'
'NICKNAME'
'FCC'
'COMMENT'
'REV'
)
touch "${git_dir}"'/uids'
find "${git_dir}" \
-name '.git' \
-prune \
, \
-type f \
-name '*.vcs' \
-printf '%p\n' \
| while read -r f; do
uid="${f##*/}"
uid="${uid%.vcs}"
for key in "${keys[@]}"; do
eval 'unset _'"${key}"
done
while read -r key value; do
eval '_'"${key}"'="${value}"'
done < <(
sed -n '
s@\t@ @g
s@\r$@@
/^BEGIN:VCARD$/,/END:VCARD$/ {
/^\('"$(printf '%s\\|' "${keys[@]}" | sed 's@\\|$@@')"'\):/ {
s@:@ @
p
}
}
' "$f"
)
if [ "${_UID}" != "${uid}" ]; then
>&2 printf 'uids differ: "%s" != "%s"\n' "${uid}" "${_UID}"
error=1
continue
fi
sed -i '
/^'"${uid}"' /d
' "${git_dir}"'/uids'
printf '%s\t' \
"${_UID}" \
"${_NICKNAME}" \
"${_FN}" \
"${_EMAIL}" \
"${_FCC}" \
"${_COMMENT}" \
| sed '
s@\t@ @
s@\t$@\n@
' >>"${git_dir}"'/uids'
done
sed '
s@^\S\+ @@
' "${git_dir}"'/uids' \
>"${git_dir}"'/addressbook'
exit ${error}
|