chiark / gitweb /
make-release: Add missing `support` to cargo_order variable
[otter.git] / update-versions
1 #!/bin/bash
2 # usage:
3 #   ./update-versions 0.5.0
4
5 set -e
6
7 fail () { echo >&2 "${0##*/}: error: $*"; exit 12; }
8
9 case "$1" in
10 -*)             fail "unknown option $1" ;;
11 esac
12
13 version="$1"
14 case "$version" in
15 '')         fail 'need new version number' ;;
16 *[^0-9.]*)  fail 'version number contains bad character' ;;
17 [^0-9]*)    fail 'version number starts with non-digit' ;;
18 esac
19
20 files=$(git ls-files :\*/Cargo.toml :Cargo.toml)
21 dirty=$(git status -u --porcelain $files)
22
23 if [ "x$dirty" != x ]; then
24     printf >&2 "%s\n" "$dirty"
25     fail 'some Cargo.toml[s] are dirty.'
26 fi
27
28 names=""
29 for f in $files; do
30     name=$(perl -i~ -pe '
31         BEGIN { open N, ">&STDOUT" or die $!; }
32         if (m{^\[package\]\s*$}...m{^\[}) {
33             $y=1 if s{^version=".*}{version="'$version'"};
34             print N "$1" if m{^name="(.*)"};
35         }
36         if (m{^\[dependencies\]\s*$}...m{^\[}) {
37             s{^(otter[-\w]*)\.path=.*}{$&\n$1.version="='$version'"};
38             s{^(otter[-\w]*)\.version.*\n}{};
39         }
40         END {
41             $y or die "appropriate line not found in '$f'";
42             close N or die $!;
43         }
44     ' "$f")
45     case "$name" in
46     ''|*' '*) fail "bad name(s) for $f: $name" ;;
47     esac
48     names+="$name "
49 done
50
51 perl -i~ -pe '
52     BEGIN {
53         $/ = "\n\n";
54         foreach my $name (qw('"$names"')) { $done{$name} = 0; }
55     }
56     next unless m{^\[\[package\]\]};
57     next unless m{^name\s*=\s*"([-\w+]*)"\s*$}m;
58     my $name = $1;
59     next unless exists $done{$name};
60     $done{$name}++;
61     s{^(version\s*=\s*)"[^"]+"}{$1"'$version'"}m or die "$name no vsn ?";
62     END {
63         foreach my $name (sort keys %done) {
64             die "$name missing ?" unless $done{$name} == 1;
65         }
66     }
67 ' Cargo.lock
68
69 git commit -s -m "Cargo.toml: Update all versions to $version
70
71 Commit made automatically by update-versions.
72 " $files Cargo.lock