blob: 7e6da02b7cff1d4fa12393b886dad9c1a0361826 (
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
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
|
#!/usr/bin/bash
function main () {
local file="${1}"
local template="${2}"
tmp_file=$(mktemp)
generate_json ${file} > ${tmp_file}
mustache ${tmp_file} ${template} | tail -n +2
rm ${tmp_file}
}
function gitlog () {
local file="${1}"
git --no-pager log \
--follow \
--stat=10000 \
--pretty=format:'%s%n%h%n%H%n%cs%n' \
"${file}"
}
function parse_filename () {
local line="${1}"
local shrink='s/ *\(.*\) \+|.*/\1/'
local unfold='s/\(.*\){\(.*\) => \(.*\)}/\1\3/'
echo ${line} | sed -e "${shrink}" | sed -e "${unfold}"
}
function generate_json () {
local input="${1}"
local logs="$(gitlog ${input})"
if [ ! $? -eq 0 ]; then
exit 1
fi
let "idx=0"
let "last_entry=$(echo "${logs}" | wc -l) / 8"
local subject=""
local abbr_hash=""
local hash=""
local date=""
local file=""
local created="true"
local modified="false"
echo -n "{"
echo -n "\"file\": \"${input}\""
echo -n ",\"history\": ["
while read -r subject; do
read -r abbr_hash
read -r hash
read -r date
read -r # empty line
read -r file
read -r # short log
read -r # empty line
if [ ${idx} -ne 0 ]; then
echo -n ","
fi
if [ ${idx} -eq ${last_entry} ]; then
created="true"
modified="false"
else
created="false"
modified="true"
fi
output_json_entry "${subject}" \
"${abbr_hash}" \
"${hash}" \
"${date}" \
"$(parse_filename "${file}")" \
"${created}" \
"${modified}"
let idx++
done < <(echo "${logs}")
echo -n "]}"
}
function output_json_entry () {
local subject="${1}"
local abbr_hash="${2}"
local hash="${3}"
local date="${4}"
local file="${5}"
local created="${6}"
local last_entry="${7}"
echo -n "{\"subject\": \"${subject}\""
echo -n ",\"created\":${created}"
echo -n ",\"modified\":${modified}"
echo -n ",\"abbr_hash\":\"${abbr_hash}\""
echo -n ",\"hash\":\"${hash}\""
echo -n ",\"date\":\"${date}\""
echo -n ",\"filename\":\"${file}\""
echo -n "}"
}
main "$(cat)" "${1}"
|