X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/35e20db0ee72655b698dc9fcaca1705c009254ee..d48ae46b24b5c9e1e76bea82fbf6fe557fa3f087:/difflast.pl diff --git a/difflast.pl b/difflast.pl index 1e724c768f..d1473e627a 100755 --- a/difflast.pl +++ b/difflast.pl @@ -14,16 +14,17 @@ use strict; my $CVS = "cvs -z3"; # the cvs command +# the regexp for cvs revision number +my $RE_CVS_REV = "\\d+(?:\\.\\d+)+"; + sub dec_rev($) { my $rev = $_[0]; # decrement the revision number to get the previos one - # (FIXME this is totally bogus, won't work with branches) - my $revlen = length($rev) - rindex($rev, '.') - 1; - my $m = 10**$revlen; + $rev =~ s/(\d+)$/$1 - 1/e; - return int($rev) . "." . ($rev*$m - int($rev)*$m - 1) + return $rev; } sub get_last_rev($) @@ -31,14 +32,16 @@ sub get_last_rev($) my $file = $_[0]; my $basename = $file; - $basename =~ s@^.*/([^/]\+)@$1@; + $basename =~ s@^.*/@@; # first get the current version: try the Id RCS tag in the file itself # first, use "cvs status" if this fails if ( open(INPUT, $file) ) { while () { - if ( /\$Id$basename,v (\d+\.\d+)/ ) { - return &dec_rev($1); + # notice that we shouldn't have '$' followed by 'Id' or cvs will + # substitute it! + if ( /\$(Id): $basename,v ($RE_CVS_REV)/ ) { + return &dec_rev($2); } } } @@ -46,7 +49,7 @@ sub get_last_rev($) open(INPUT, "$CVS -q status $file |") or return 0; while () { - if ( /Working revision:\s+(\d+\.\d+)/ ) { + if ( /Working revision:\s+($RE_CVS_REV)/ ) { return &dec_rev($1); } } @@ -62,6 +65,9 @@ sub process_file($) if ( !$revlast ) { warn "Failed to get the last revision for $file, skipping.\n" } + elsif ( $revlast =~ '\.0' ) { + warn "No previous revision of the file $file.\n" + } else { print `$CVS diff -b -kk -r $revlast $file`; }