]> git.saurik.com Git - wxWidgets.git/blob - difflast.pl
don't use strlen() to verify the length of the string as it can contain embedded...
[wxWidgets.git] / difflast.pl
1 #!/usr/bin/perl -w
2
3 ###############################################################################
4 # Name: difflast.pl
5 # Purpose: Shows the difference between the current local version of the file
6 # and the last cvs revision
7 # Version: $Id$
8 # Author: VZ
9 # Created: 23.12.99
10 # Copyright:(c) Vadim Zeitlin 1999
11 ###############################################################################
12
13 use strict;
14
15 my $CVS = "cvs -z3"; # the cvs command
16
17 # the regexp for cvs revision number
18 my $RE_CVS_REV = "\\d+(?:\\.\\d+)+";
19
20 sub dec_rev($)
21 {
22 my $rev = $_[0];
23
24 # decrement the revision number to get the previos one
25 $rev =~ s/(\d+)$/$1 - 1/e;
26
27 return $rev;
28 }
29
30 sub get_last_rev($)
31 {
32 my $file = $_[0];
33
34 my $basename = $file;
35 $basename =~ s@^.*/@@;
36
37 # first get the current version: try the Id RCS tag in the file itself
38 # first, use "cvs status" if this fails
39 if ( open(INPUT, $file) ) {
40 while (<INPUT>) {
41 # notice that we shouldn't have '$' followed by 'Id' or cvs will
42 # substitute it!
43 if ( /\$(Id): $basename,v ($RE_CVS_REV)/ ) {
44 return &dec_rev($2);
45 }
46 }
47 }
48
49 open(INPUT, "$CVS -q status $file |") or return 0;
50
51 while (<INPUT>) {
52 if ( /Working revision:\s+($RE_CVS_REV)/ ) {
53 return &dec_rev($1);
54 }
55 }
56
57 return 0;
58 }
59
60 sub process_file($)
61 {
62 my $file = $_[0];
63 my $revlast = &get_last_rev($file);
64
65 if ( !$revlast ) {
66 warn "Failed to get the last revision for $file, skipping.\n"
67 }
68 elsif ( $revlast =~ '\.0' ) {
69 warn "No previous revision of the file $file.\n"
70 }
71 else {
72 print `$CVS diff -b -kk -r $revlast $file`;
73 }
74 }
75
76 # entry point
77
78 die "Usage: $0 <filenames...>\n" if ( $#ARGV == -1 );
79
80 foreach my $file (@ARGV) { process_file($file); }
81
82 exit 0;