1
0
mirror of https://git.FreeBSD.org/ports.git synced 2024-12-24 04:33:24 +00:00
freebsd-ports/Tools/scripts/getpr
2014-06-22 17:53:44 +00:00

97 lines
1.6 KiB
Perl
Executable File

#!/usr/bin/env perl
#
# MAINTAINER= miwi@FreeBSD.org
#
# $FreeBSD$
#
use strict;
my $pr = shift;
my $user = shift;
my $ssh;
if ($pr eq "") {
print STDERR "getpr prnum [username]\n";
exit 1
}
if( !defined $ENV{"CVS_RSH"} ) {
$ssh = "ssh";
} else {
$ssh = $ENV{"CVS_RSH"};
}
if ($user ne "") {
$user = "$user@";
}
my $pr_num = "PR_" . $pr;
my $pr_patch = "PR_" . $pr . ".patch";
# get the PR off of freefall
open(D, "> $pr_num") or die "$pr_num: $!";
open(PATCH, "> $pr_patch") or die "$pr_patch: $!";
open(PR, " ${ssh} ${user}freefall.freebsd.org query-pr -F $pr | ") or die $!;
my $fix = "";
my $infix = 0;
while(<PR>) {
print D;
if (m/^>Release-Note:/) {
$infix = 0;
}
if ($infix == 1) {
print PATCH;
}
if (m/^>Fix:/) {
$infix = 1;
}
}
close(D);
close(PR);
close(PATCH);
# decode the submission attempting to find a file attachment by extension
# .tar.gz, .shar or just .gz, if not found, display what we think of as
# the file submission (probably just a patch)
open(PATCH, $pr_patch);
while(<PATCH>) {
if (m/^# This is a shell archive. Save it in a file, remove anything before/) {
&shar;
exit;
}
if (m/^begin (\d+)? (.*)/) {
&uudecode($2);
close(PATCH);
exit;
}
}
close(PATCH);
system("more $pr_patch");
exit;
sub uudecode {
my ($fname) = @_;
$fname =~ s/\s+$//g;
print "$fname\n";
print `uudecode $pr_patch`;
if (($fname =~ m/.tar.gz$/) || ($fname =~ m/.tgz$/)) {
print "you may extract this tarball by typing tar xvzf $fname\n";
} elsif ($fname =~ m/.gz$/) {
print `gunzip $fname`;
}
}
sub shar {
print "you may extract this shar archive by typing sh $pr_patch\n";
}