Commit | Line | Data |
8ab5ea70 |
1 | #!/usr/bin/env perl |
2 | |
3 | use strict; |
4 | use warnings FATAL => 'all'; |
5 | use File::Find; |
6 | |
7 | sub version_parts { |
8 | my @parts = split /\./, shift; |
9 | if (@parts == 2) { |
10 | my $dec = pop @parts; |
11 | push @parts, $dec =~ /(\d{1,3})/g; |
12 | } |
13 | $_ += 0 for @parts; |
14 | push @parts, 0 |
15 | until @parts >= 3; |
16 | return @parts; |
17 | } |
18 | |
19 | chomp(my $LATEST = qx(grep '^[0-9]' Changes | head -1 | awk '{print \$1}')); |
20 | |
21 | my @parts = version_parts($LATEST); |
22 | |
23 | my $OLD_DECIMAL = sprintf('%i.%03i%03i', @parts); |
24 | |
25 | my %bump_part = (major => 0, minor => 1, bugfix => 2); |
26 | |
27 | my @new_parts = @parts; |
28 | |
29 | my $bump_this = $bump_part{$ARGV[0]||'bugfix'}; |
30 | |
31 | if (defined $bump_this) { |
32 | $new_parts[$bump_this]++; |
33 | $new_parts[$_] = 0 for ($bump_this+1 .. $#new_parts); |
34 | } |
35 | elsif ($ARGV[0] =~ /^[0-9]+(?:\.[0-9]+)*$/) { |
36 | @new_parts = version_parts($ARGV[0]); |
37 | } |
38 | else { |
39 | die "no idea which part to bump - $ARGV[0] means nothing to me" |
40 | } |
41 | |
42 | my $NEW_DECIMAL = sprintf('%i.%03i%03i', @new_parts); |
43 | |
44 | warn "Bumping $OLD_DECIMAL -> $NEW_DECIMAL\n"; |
45 | my $vstring = join('.', @parts); |
46 | |
47 | my %files; |
48 | find({ |
49 | no_chdir => 1, |
50 | wanted => sub { |
51 | return |
52 | unless -f && /\.pod$|\.pm$/; |
53 | my $file = $_; |
54 | open my $fh, '<', $file |
55 | or die "can't open $file: $!"; |
56 | my $content = do { local $/; <$fh> }; |
57 | close $fh; |
58 | |
59 | $content =~ s{ |
60 | ( \$VERSION \s* = \s* ) |
61 | (['"]?) v?([.0-9]+) \2 |
62 | ( |
63 | \s*; |
64 | (?: \s*\#\s* )? |
65 | ) |
66 | (v?[.0-9]+)? |
67 | }{ |
68 | die "unable to bump version number in $file from $OLD_DECIMAL, found $3\n" |
69 | if $3 ne $OLD_DECIMAL && $3 ne $vstring; |
70 | $1 . "'" . $NEW_DECIMAL . "'" . $4 . ( |
71 | $5 ? $vstring : '' |
72 | ) |
73 | }xe |
74 | or return; |
75 | |
76 | $files{$file} = $content; |
77 | }, |
78 | }, 'lib'); |
79 | |
80 | for my $file (sort keys %files) { |
81 | warn " updating $file\n"; |
82 | open my $fh, '>', $file |
83 | or die "can't open $file: $!"; |
84 | print { $fh } $files{$file}; |
85 | close $fh; |
86 | } |