3 # ./update-versions 0.5.0
7 fail () { echo >&2 "${0##*/}: error: $*"; exit 12; }
10 -*) fail "unknown option $1" ;;
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' ;;
20 files=$(git ls-files :\*/Cargo.toml :Cargo.toml)
21 dirty=$(git status -u --porcelain $files)
23 if [ "x$dirty" != x ]; then
24 printf >&2 "%s\n" "$dirty"
25 fail 'some Cargo.toml[s] are dirty.'
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="(.*)"};
36 if (m{^\[dependencies\]\s*$}...m{^\[}) {
37 s{^(otter[-\w]*)\.path=.*}{$&\n$1.version="='$version'"};
38 s{^(otter[-\w]*)\.version.*\n}{};
41 $y or die "appropriate line not found in '$f'";
46 ''|*' '*) fail "bad name(s) for $f: $name" ;;
54 foreach my $name (qw('"$names"')) { $done{$name} = 0; }
56 next unless m{^\[\[package\]\]};
57 next unless m{^name\s*=\s*"([-\w+]*)"\s*$}m;
59 next unless exists $done{$name};
61 s{^(version\s*=\s*)"[^"]+"}{$1"'$version'"}m or die "$name no vsn ?";
63 foreach my $name (sort keys %done) {
64 die "$name missing ?" unless $done{$name} == 1;
69 git commit -s -m "Cargo.toml: Update all versions to $version
71 Commit made automatically by update-versions.