Commit | Line | Data |
be032607 |
1 | #!/usr/bin/env perl |
2 | use strict; |
3 | use warnings FATAL => 'all'; |
4 | use Config; |
5 | use File::Spec; |
6 | use File::Find; |
7 | use ExtUtils::MakeMaker (); |
8 | |
9 | my $version = $ARGV[0] or die "version required!"; |
10 | |
11 | my $make = $Config{make}; |
12 | my $null = File::Spec->devnull; |
13 | |
14 | system("git fetch"); |
15 | if (system("git rev-parse --quiet --verify v$version >$null") == 0) { |
16 | die "Tag v$version already exists!"; |
17 | } |
18 | |
19 | File::Find::find({ no_chdir => 1, wanted => sub { |
20 | return |
21 | unless -f && /\.pm$/; |
22 | my $file_version = MM->parse_version($_); |
23 | die "Module $_ version $file_version doesn't match dist version $version" |
24 | unless $file_version eq 'undef' || $file_version eq $version; |
25 | }}, 'lib'); |
26 | |
27 | for (scalar `"$make" manifest 2>&1 >$null`) { |
28 | $_ && die "$make manifest changed:\n$_ Go check it and retry"; |
29 | } |
30 | |
31 | for (scalar `git status`) { |
32 | /^(?:# )?On branch master/ || die "Not on master. EEEK"; |
33 | /Your branch is behind|Your branch and .*? have diverged/ && die "Not synced with upstream"; |
34 | } |
35 | |
36 | for (scalar `git diff`) { |
37 | length && die "Outstanding changes"; |
38 | } |
39 | my $ymd = sprintf( |
40 | "%i-%02i-%02i", (gmtime)[5]+1900, (gmtime)[4]+1, (gmtime)[3] |
41 | ); |
42 | my $changes_line = "$version - $ymd\n"; |
43 | my @cached = grep /^\+/, `git diff --cached -U0`; |
44 | @cached > 0 or die "Please add:\n\n$changes_line\nto Changes stage Changes (git add Changes)"; |
45 | @cached == 2 or die "Pre-commit Changes not just Changes line"; |
46 | $cached[0] =~ /^\+\+\+ .\/Changes\n/ or die "Changes not changed"; |
47 | $cached[1] eq "+$changes_line" or die "Changes new line should be: \n\n$changes_line "; |
48 | |
49 | { no warnings 'exec'; `cpan-upload -h`; } |
50 | $? and die "cpan-upload not available"; |