- Remove netcat dependency by using fetch (not sure why i used nc

in the first place).
- Add some XXX lines as a TODO.
- Add a cvs diff command to the generated commit script.
- Add cdiff/colordiff to the list of optional dependencies.
- Fix a problem when giving the commit mail without the headers to
mfc.pl -f, it should now work correctly.
- Bump version.

Approved by:	ssouhlal (implicit)
This commit is contained in:
Florent Thoumie 2006-01-11 02:53:54 +00:00
parent d3ef345454
commit 9e28677ee3
Notes: svn2git 2020-12-20 02:59:44 +00:00
svn path=/head/; revision=154208

View File

@ -34,14 +34,16 @@
# - cvs
# - fetch
# - perl (with getopt module)
# - nc
# - mkdir, cat, chmod, grep (hopefully everybody has them)
# - cdiff or colordiff (optional)
#
# This script is using 3 environment variables :
# - MFCHOME: directory where patches, scripts and commit message will be stored.
# - MFCCVSROOT: alternative CVSROOT used to generate diffs for new/dead files.
# - MFCLOGIN: define this to your freefall login if you have commit rights.
#
# TODO: Look for XXX in the file.
#
use strict;
use warnings;
@ -54,7 +56,7 @@ my $mfchome = $MFCHOME ? $MFCHOME : "/var/tmp/mfc";
my $mfclogin = $MFCLOGIN ? $MFCLOGIN : "";
my $cvsroot = $MFCCVSROOT ? $MFCCVSROOT : ':pserver:anoncvs@anoncvs.at.FreeBSD.org:/home/ncvs';
my $version = "0.3";
my $version = "0.4";
my %opt;
my $commit_author;
my $commit_date;
@ -64,6 +66,7 @@ my %dead_files = ( );
my @logmsg = ( );
my @commitmail = ( );
my $commiturl;
my $cdiff;
my $answer;
my $mfc_func = \&mfc_headers;
@ -72,12 +75,14 @@ my $first_log_line = 1;
sub init()
{
# Look for pre-requisites.
my @reqs = ( "fetch", "cvs", "nc", "mkdir", "cat", "chmod", "grep" );
my @reqs = ( "fetch", "cvs", "mkdir", "cat", "chmod", "grep" );
my $cmd;
foreach (@reqs) {
$cmd = `which $_`;
die "$_ is missing. Please check pre-requisites." if ($cmd =~ /^$/);
}
$cdiff = `which cdiff`;
$cdiff = `which colordiff` if ($cdiff =~ /^$/);
# Parse command-line options.
my $opt_string = 'f:hi:m:s:v';
@ -116,6 +121,7 @@ sub previous_revision($)
my ($rev) = @_;
my @rev;
# XXX - I'm not sure this is working as it should.
return 0 if ($rev =~ /^1\.1$/);
@rev = split '\.', $rev;
return undef unless @rev;
@ -138,8 +144,9 @@ sub fetch_mail($)
$msgid =~ s/>//;
$msgid =~ s/@.*//;
# XXX - This should go away once my mid.cgi patches hits the doc tree.
foreach (@years) {
$url = `echo "GET http://www.freebsd.org/cgi/mid.cgi?id=$msgid+$_/cvs-all&db=mid" | nc www.freebsd.org 80 | grep getmsg.cgi`;
$url = `fetch -q -o - http://www.freebsd.org/cgi/mid.cgi?id=$msgid+$_/cvs-all&db=mid | grep getmsg.cgi`;
last if (!($url =~ /^$/));
}
if ($url =~ /^$/) {
@ -157,7 +164,9 @@ sub search_mail($)
$query =~ s/\s+/+/g;
my $result = `echo "GET http://www.freebsd.org/cgi/search.cgi?words=$query&max=1&sort=score&index=recent&source=cvs-all HTTP/1.0" | nc www.freebsd.org 80 | grep getmsg.cgi`;
# XXX - I guess we could take 5 first results instead of just the first
# but it has been working correctly for each search I've made so ...
my $result = `fetch -q -o - http://www.freebsd.org/cgi/search.cgi?words=$query&max=1&sort=score&index=recent&source=cvs-all | grep getmsg.cgi`;
$result =~ s/.*href="(.*)">.*/http:\/\/www.freebsd.org\/cgi\/$1+raw/;
if ($result =~ /^$/) {
@ -173,6 +182,7 @@ sub fetch_diff($)
my $old = previous_revision($mfc_files{$name});
my $new = $mfc_files{$name};
# CVSWeb uses rcsdiff instead of cvs rdiff, that's a problem for deleted and new files.
if ($new_files{$name} or $dead_files{$name}) {
print " Generating diff for $name using cvs rdiff...\n";
system("cvs -d $cvsroot rdiff -u -r$old -r$new $name >> $mfchome/$opt{i}/patch 2>/dev/null");
@ -186,6 +196,9 @@ sub mfc_headers($)
{
if ($_[0] =~ /^$/) {
$mfc_func = \&mfc_author;
} elsif ($_[0] =~ /^(\S+)\s+(\S+\s\S+\s\S+)$/) {
# Skipped headers (probably a copy/paste from sobomax MFC reminder).
mfc_author($_[0]);
} else {
# Nothing
}
@ -317,6 +330,14 @@ if ($mfclogin) {
}
}
print SCRIPT "cvs diff";
print SCRIPT " \\\n $_" foreach (keys(%mfc_files));
if ($cdiff =~ /^$/) {
print SCRIPT "\n";
} else {
print SCRIPT " | $cdiff";
}
print SCRIPT "cvs ci";
print SCRIPT " \\\n $_" foreach (keys(%mfc_files));
print SCRIPT "\n";