]> git.saurik.com Git - wxWidgets.git/blob - difflast.pl
1e724c768fb703a8d72d753f630e45584acfd1df
[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 sub dec_rev($)
18 {
19 my $rev = $_[0];
20
21 # decrement the revision number to get the previos one
22 # (FIXME this is totally bogus, won't work with branches)
23 my $revlen = length($rev) - rindex($rev, '.') - 1;
24 my $m = 10**$revlen;
25
26 return int($rev) . "." . ($rev*$m - int($rev)*$m - 1)
27 }
28
29 sub get_last_rev($)
30 {
31 my $file = $_[0];
32
33 my $basename = $file;
34 $basename =~ s@^.*/([^/]\+)@$1@;
35
36 # first get the current version: try the Id RCS tag in the file itself
37 # first, use "cvs status" if this fails
38 if ( open(INPUT, $file) ) {
39 while (<INPUT>) {
40 if ( /\$Id$basename,v (\d+\.\d+)/ ) {
41 return &dec_rev($1);
42 }
43 }
44 }
45
46 open(INPUT, "$CVS -q status $file |") or return 0;
47
48 while (<INPUT>) {
49 if ( /Working revision:\s+(\d+\.\d+)/ ) {
50 return &dec_rev($1);
51 }
52 }
53
54 return 0;
55 }
56
57 sub process_file($)
58 {
59 my $file = $_[0];
60 my $revlast = &get_last_rev($file);
61
62 if ( !$revlast ) {
63 warn "Failed to get the last revision for $file, skipping.\n"
64 }
65 else {
66 print `$CVS diff -b -kk -r $revlast $file`;
67 }
68 }
69
70 # entry point
71
72 die "Usage: $0 <filenames...>\n" if ( $#ARGV == -1 );
73
74 foreach my $file (@ARGV) { process_file($file); }
75
76 exit 0;