ViewVC Help
View File | Revision Log | Show Annotations | Revision Graph | Root Listing
root/i-scream/misc/scripts/shell/change_cvs_author.pl
Revision: 1.2
Committed: Tue Jan 8 17:39:38 2002 UTC (22 years, 3 months ago) by tdb
Content type: text/plain
Branch: MAIN
CVS Tags: HEAD
Changes since 1.1: +1 -1 lines
Log Message:
Glaring bug. When looking for . and .. it's a good idea to escape the . in
the regexp :)

File Contents

# Content
1 #!/usr/bin/perl
2
3 # script to change an author in all files
4 # in a cvs repository. Handy if a users
5 # login changes.
6
7 # tdb, 09/12/2001.
8
9 # sample line to fix:
10 #date 2000.10.08.21.13.25; author tdb1; state Exp;
11
12 # cvsroot
13 $cvsroot = "/usr/home/tdb/cvsup/i-scream";
14
15 # kick the recursion off
16 &checkdir($cvsroot);
17
18 # subroutine to check a directory, and recusively
19 # call itself on all subdirectories. Also makes
20 # appropriate changes to files as it finds them.
21 sub checkdir() {
22 my($dir) = @_;
23 print "* checking $dir...\n";
24 # read current dir
25 opendir(DIR, $dir);
26 my(@contents) = readdir(DIR);
27 closedir DIR;
28 # look at each item
29 foreach my $item (@contents) {
30 # lets ignore . and .. :)
31 if($item =~ /^\.$/ || $item =~ /^\.\.$/) {
32 next;
33 }
34 # if it ends in ,v it's an RCS file!
35 # ... and if it's a file, of course :)
36 elsif($item =~ /,v$/ && -f "$dir/$item") {
37 print "rcsfile: $item\n";
38 # keep a copy to read from
39 print `cp $dir/$item $dir/$item.b4`;
40 # cvs doesn't give us write access
41 print `chmod u+w $dir/$item`;
42 # open the original for reading
43 open(OFILE, "$dir/$item.b4");
44 # and the new file (overwriting!)
45 open(NFILE, ">$dir/$item") or die("can't write!");
46 while(<OFILE>) {
47 # see if it's an author line..
48 if($_ =~ /^(date\s+\S+;\s+author\s+)(\S+)(;\s+state\s+\S+;)$/) {
49 print " old author: $2\n";
50 # some hardcoded checking to see if we
51 # should change the author
52 if($2 eq "tdb1") {
53 print " new author: tdb\n";
54 print NFILE $1 . "tdb" . $3;
55 }
56 elsif($2 eq "ajm4") {
57 print " new author: ajm\n";
58 print NFILE $1 . "ajm" . $3;
59 }
60 # or just leave it alone
61 else {
62 print " unchanged\n";
63 print NFILE $_;
64 }
65 }
66 # not an author line, just add to new file
67 else {
68 print NFILE $_;
69 }
70 }
71 # close the files
72 close OFILE;
73 close NFILE;
74 # get rid of that write we added :)
75 print `chmod u-w $dir/$item`;
76 # and get rid of our temporary file
77 print `rm -f $dir/$item.b4`;
78 }
79 # recurse down the subdirectories
80 elsif(-d "$dir/$item") {
81 &checkdir("$dir/$item");
82 }
83 }
84 print "* finished $dir.\n";
85 }