17 chomp(my $git_addr = `git config --get cherrymaint.address`);
18 my $addr = length $git_addr ? $git_addr : 'localhost:3000';
21 my $program = basename $0;
22 my $usage = << "HERE";
23 Usage: $program [--address address] [ACTION] [COMMIT]
25 ACTIONS: (default is 'vote' if omitted)
28 $usage .= join( "\n", map { " --$_" } (sort keys %votemap), 'help' );
29 $usage .= "\n" . << "HERE";
31 COMMIT: a git revision ID (SHA1 or symbolic reference like HEAD)
35 die $usage if grep { /^(--help|-h)$/ } @ARGV;
38 my %opt = (address => \$addr);
39 GetOptions( \%opt, 'address=s', keys %votemap ) or die $usage;
41 if ( keys(%opt) > 2 ) {
42 die "Error: cherrymaint takes only one action argument\n\n$usage"
45 my ($action) = grep { exists $votemap{$_} } keys %opt;
48 # Determine commit SHA1
49 my $commit = shift @ARGV;
51 unless ( defined $commit ) {
52 die "Error: cherrymaint requires an explicit commit ID\n\n$usage"
55 my $short_id = qx/git rev-parse --short $commit/;
57 die "Error: couldn't get git commit SHA1 from '$commit'\n";
62 unless ( $action eq 'vote' ) {
63 say "Are you sure you want to mark $short_id as $action? (y/n)";
65 exit 0 unless $ans =~ /^y/i;
68 # Send the action to cherrymaint
69 my $n = $votemap{$action};
70 my $url = "http://$addr/mark?commit=${short_id}&value=${n}";
72 my $ua = LWP::UserAgent->new(
73 agent => 'Porting/cherrymaint ',
78 my $response = $ua->get($url);
80 if ($response->is_success) {
84 die $response->status_line . << "HERE";
86 Have you remembered to tunnel $addr to perl5.git.perl.org:3000? E.g.
87 \$ ssh -C -L${\ join q{:} => reverse split /:/, $addr}:3000 perl5.git.perl.org
89 Or maybe you created a different tunnel? You can specify the address to use
90 either on the command line with --address, or by doing
91 \$ git config cherrymaint.address host:port