5a7e6d5d2f0f2b1d74d676fb1843ed0e1e51c01b
[releases.git] / mkgitrel.rel
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 if test -f linux-libre-$rel.check; then
32     success=false
33     git worktree remove logs/v$rel
34     git worktree remove --force sources/v$rel
35     continue
36 fi &&
37
38 DATE=$(git cat-file -p incr/v$rel |
39        gawk '/^(author|tagger)/ {
40                print strftime(PROCINFO["strftime"], $(NF-1))
41              }') &&
42 export GIT_COMMITTER_DATE=$DATE GIT_AUTHOR_DATE=$DATE &&
43
44 plist="patch-$prev0-$rel" &&
45 if test "$prev0" != "$prevn"; then
46   plist="$plist patch-$prevn-$rel"
47 fi &&
48
49 list="linux-libre-$rel.tar $plist" &&
50
51 bzip2 -k9 $list &&
52 xz -k9 $list &&
53 lzip -k9s64MiB $list &&
54
55 mkdir -v $rel &&
56
57 for f in $(ls scripts/v$rel); do
58   if cmp scripts/v$rel/$f $reldir/$prevn/$f; then
59     gpg --verify $reldir/$prevn/$f.sign &&
60     ln -v $reldir/$prevn/$f $reldir/$prevn/$f.sign $rel/
61   else
62     ln -v scripts/v$rel/$f $rel/ &&
63     gpg --armor --detach-sign $rel/$f &&
64     mv -v $rel/$f.asc $rel/$f.sign
65   fi
66 done &&
67
68 ln -v logs/v$rel/linux-libre-$rel.* $rel/ &&
69
70 for f in $plist; do
71   gpg --armor --detach-sign $f &&
72   mv -v $f.asc $rel/$f.sign
73 done &&
74
75 for ext in .bz2 .xz .lz; do
76   for f in $list; do
77     mv -v $f$ext $rel/ &&
78     gpg --armor --detach-sign $rel/$f$ext &&
79     mv -v $rel/$f$ext.asc $rel/$f$ext.sign
80   done
81 done &&
82
83 rm -vf $list &&
84
85 mv -v $rel $reldir/$rel &&
86 ln -snfv $rel $reldir/LATEST-$cbr.N &&
87 if test "$rup" = "$cbr"; then
88   ln -nfv $reldir/LATEST-$cbr.N $reldir/LATEST-$cbr.0 &&
89   ln -nfv $reldir/LATEST-$cbr.N $reldir/LATEST-${cbr%.*}.N
90 fi &&
91
92 git worktree remove logs/v$rel &&
93 git worktree remove scripts/v$rel
94
95 done &&
96
97 $success