#!/usr/bin/perl use strict; use warnings; my $cvs_header_line = '\$' . 'CVSHeader'; foreach my $arg (@ARGV) { my ($conf_file, $dist_file); if ($arg =~ /^(.*)\.dist$/) { $conf_file = $1; $dist_file = $arg; } else { $conf_file = $arg; $dist_file = "$arg.dist"; } my $conf_version = cvs_version($conf_file) or die "couldn't find CVS version in $conf_file\n"; my $dist_version = cvs_version($dist_file) or die "couldn't find CVS version in $dist_file\n"; if ($conf_version eq $dist_version) { print "$conf_file is up-to-date at version $conf_version.\n"; next; } #print "conf_version=$conf_version dist_version=$dist_version\n"; system "cvs diff -r '$conf_version' -r '$dist_version' '$dist_file'" . "| patch '$conf_file'"; } sub cvs_version { my ($file) = @_; open my $fh, "<", $file or die "couldn't open $file for reading: $!\n"; my $line; while (my $line = <$fh>) { if ($line =~ /$cvs_header_line.*?(1(?:\.\d+)+)/) { return $1; } } }