aboutsummaryrefslogblamecommitdiff
path: root/Tools/scripts/getpr
blob: 5d6a3fdef752cab66012d5da90be2152ad319129 (plain) (tree)
1
2
3
4
5
6
7
8
9
10






                               
           

               
                 
        

                
                                                


              





                                



                         



                                                
                                                                             



























































                                                                                        
#!/usr/bin/perl
#
# MAINTAINER= mharo@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@";
}

# get the PR off of freefall

open(D, "> $pr") or die "$pr: $!";
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";
}