]> git.ozlabs.org Git - next-scripts/blob - summary
add_repo: simplify
[next-scripts] / summary
1 #!/bin/bash --norc
2
3 d="$1"
4 prev="$2"
5
6 LOG_FILE="../stats/next-$d-summary"
7
8 cp /dev/null $LOG_FILE
9
10 log()
11 {
12         echo "$@" | tee -a $LOG_FILE
13 }
14
15 plog()
16 {
17         printf "$@" | tee -a $LOG_FILE
18 }
19
20 patch_and_sha_ids()
21 {
22         for id in $*; do
23                 git diff-tree -p "$id" | git patch-id | head -n 1
24         done | sort
25 }
26
27 patch_ids()
28 {
29         patch_and_sha_ids "$@" | cut -d' ' -f1
30 }
31
32 trees=$(grep -v '^#' ../real_control | awk -F ' ' '{ printf("%s ", $3); }')
33
34 seen_ids=""
35 seen_heads=""
36 seen_sha1s=""
37 total_commits=0
38 total_diff=0
39
40 plog '%-20s %7s' "Tree" "commits"
41 [ "$prev" ] &&
42         plog '\t%s' "change since next-$prev"
43 plog '\n\n'
44
45 for t in $trees; do
46
47         [ "$t" = "origin" ] &&
48                 continue
49
50         [ "$prev" ] && {
51                 prev_num=$(egrep "^$t +[0-9]+" "../stats/next-$prev-summary")
52                 if [ "$prev_num" ]; then
53                         prev_num=$(expr "$prev_num" : "[^ ]*  *\([0-9]*\).*")
54                 else
55                         prev_num=0
56                 fi
57         }
58
59         h="refs/next/$d/$t"
60         git rev-parse --verify "$h" >/dev/null 2>&1 ||
61                 continue
62
63         mb=$(git merge-base "refs/next/$d/origin" $h)
64         rh=$(git rev-parse $h)
65         [ "$mb" = "$rh" ] && {
66                 plog '%-20s %7d' $t 0
67                 [ "$prev" ] && {
68                         plog '\t\t%+7d' $((0 - prev_num))
69                         total_diff=$((total_diff - prev_num))
70                 }
71                 plog '\n'
72                 continue
73         }
74
75         c=$(git rev-list --no-merges $mb...$rh $seen_heads | sort)
76         seen_heads="$seen_heads ^$rh"
77         [ -z "$c" ] && {
78                 plog '%-20s %7d' $t 0
79                 [ "$prev" ] && {
80                         plog '\t\t%+7d' $((0 - prev_num))
81                         total_diff=$((total_diff - prev_num))
82                 }
83                 plog '\n'
84                 continue
85         }
86
87 #       origin_ids=$(patch_ids $(git rev-list --no-merges $mb..origin/master))
88
89         is=$(patch_and_sha_ids $c)
90 #       is=$(join -v 1 <(echo "$is") <(echo "$origin_ids"))
91         is=$(echo "$is" | join -v 1 - "../stats/origin-$d.ids")
92         is=$(join -v 1 <(echo "$is") <(echo "$seen_ids"))
93         c1=$(echo "$is" | cut -d' ' -f2)
94         [ "$is" ] &&
95                 seen_ids=$( (echo "$seen_ids"; echo "$is" | cut -d' ' -f1) | sort)
96
97         seen_sha1s="$seen_sha1s $c1"
98
99 #       log $t \($(echo "$c" | wc -w) $(echo "$c1" | wc -w)\)
100         num=$(echo "$c1" | wc -w)
101         plog '%-20s %7d' $t $num
102         [ "$prev" ] && {
103                 plog '\t\t%+7d' $((num - prev_num))
104                 total_diff=$((total_diff + num - prev_num))
105         }
106         plog '\n'
107
108         total_commits=$((total_commits + num))
109 done
110
111 log
112 plog '%-20s %7d' 'Total' $total_commits
113 [ "$prev" ] &&
114         plog '\t\t%+7d' $total_diff
115 plog '\n'
116
117 log
118 git shortlog --no-walk $seen_sha1s 2>&1 | tee -a $LOG_FILE
119
120 exit 0