check for gnu rev mismatch
[releases.git] / mkgitrel.cln
1 #! /bin/bash
2
3 reldir=$HOME/linux-libre/releases
4
5 key=474402C8C582DAFBE389C427BCB7CF877E7D47A7
6
7 success=:
8 for rel
9 do
10
11 rup=$(echo "$rel" | sed 's,-gnu[0-9]*$,,')
12 cbr=$(echo "$rup" | sed 's,\(\.\|-rc\)[0-9]*$,,')
13
14 if test -d $reldir/$rel; then
15   echo $reldir/$rel exists >&2
16   continue
17 fi
18
19 if test -h $reldir/LATEST-$cbr.0; then
20   prev0=$(readlink $reldir/LATEST-$cbr.0)
21   prevn=$(readlink $reldir/LATEST-$cbr.N)
22 elif test -h $reldir/LATEST-$rup.N; then
23   cbr=$rup
24   prev0=$(readlink $reldir/LATEST-$cbr.0)
25   prevn=$(readlink $reldir/LATEST-$cbr.N)
26 else
27   echo Neither $reldir/LATEST-$cbr.0 nor $reldir/LATEST-$rup.N exist >&2
28   exit 1
29 fi
30
31 for up in linus stable; do
32   git rev-parse --verify -q $up/v$rup && break
33 done
34
35 git verify-tag $up/v$rup &&
36
37 { test -d scripts/v$rel ||
38   git worktree add --detach scripts/v$rel scripts/$cbr
39 } &&
40
41 case $(sed -n 's,^kver=\(.*\) extra=\(.*\),\1-gnu\2,p' \
42            scripts/v$rel/deblob-$cbr) in
43 "$cbr$(echo $rel | sed -n 's,.*\(-gnu\),\1,p')") ;;
44 *) echo $rel mismatches release implied by scripts/v$rel/deblob-$cbr >&2
45    echo "$cbr$(echo $rel | sed -n 's,.*\(-gnu\),\1,p')" vs \
46         $(sed -n 's,^kver=\(.*\) extra=\(.*\),\1-gnu\2,p' \
47            scripts/v$rel/deblob-$cbr) >&2
48    continue;;
49 esac &&
50
51 git worktree add --detach sources/v$rel $up/v$rup &&
52
53 git worktree add --detach logs/v$rel public/logs/v$prevn &&
54
55 (cd logs/v$rel && git rm -f linux-*) &&
56
57 (
58   cd sources/v$rel &&
59   ../../scripts/v$rel/deblob-$cbr >& ../../logs/v$rel/linux-libre-$rel.log &&
60   git commit -m "GNU Linux-libre v$rel incremental" -a &&
61   git tag incr/v$rel
62 ) &&
63
64 DATE=$(git cat-file -p incr/v$rel |
65        gawk '/^(author|tagger)/ {
66                print strftime(PROCINFO["strftime"], $(NF-1))
67              }') &&
68 export GIT_COMMITTER_DATE=$DATE GIT_AUTHOR_DATE=$DATE &&
69
70 (
71   cd sources/v$rel &&
72   git reset --soft -q public/sources/v$prevn &&
73   git commit --amend --reset-author -S$key \
74       -m "GNU Linux-libre $rel" &&
75   git tag -m "GNU Linux-libre $rel" -s -u $key sources/v$rel &&
76
77   git reset --hard incr/v$rel^ &&
78   { git merge --no-commit incr/v$prevn || :; } &&
79   git diff incr/v$rel > ../../linux-libre-$rel.patckT &&
80   mv -v ../../linux-libre-$rel.patckT ../../linux-libre-$rel.patck
81  ) &&
82
83 git archive --format tar --prefix=linux-$rup/ -o linux-libre-$rel.tar sources/v$rel &&
84 gpg --armor --detach-sign linux-libre-$rel.tar &&
85 mv linux-libre-$rel.tar.asc logs/v$rel/linux-libre-$rel.tar.sign &&
86
87 for f in linux-libre-; do
88   if cmp logs/v$rel/$f$rel.log $reldir/$prevn/$f$prevn.log; then
89     ln -vf $reldir/$prevn/$f$prevn.log logs/v$rel/$f$rel.log &&
90     ln -vf $reldir/$prevn/$f$prevn.log.sign logs/v$rel/$f$rel.log.sign
91   else
92     gpg --armor --detach-sign logs/v$rel/$f$rel.log &&
93     mv -v logs/v$rel/$f$rel.log.asc logs/v$rel/$f$rel.log.sign
94   fi
95 done &&
96
97 (
98   cd logs/v$rel &&
99   git add linux* &&
100   git commit --amend --reset-author -S$key -m "GNU Linux-libre $rel logs" &&
101   git tag -m "GNU Linux-libre $rel logs" -s -u $key logs/v$rel
102 ) &&
103
104 git diff --src-prefix=linux-libre-$prev0/ --dst-prefix=linux-libre-$rel/ \
105   public/sources/v$prev0 sources/v$rel -- > patch-$prev0-$rel &&
106
107 if test "$prev0" != "$prevn"; then
108   git diff --src-prefix=linux-libre-$prevn/ --dst-prefix=linux-libre-$rel/ \
109     public/sources/v$prevn sources/v$rel -- > patch-$prevn-$rel
110 fi &&
111
112 { scripts/v$rel/deblob-check --use-awk linux-libre-$rel.tar ||
113     scripts/v$rel/deblob-check --use-awk -C linux-libre-$rel.tar \
114       > linux-libre-$rel.check ||
115     { success=false; continue; }; }
116
117 done &&
118
119 $success