Mercurial > hg > easyhg-kdiff3
comparison kdiff3/admin/cvs-clean.pl @ 14:415083d043f3
KDiff3 version 0.9.70
author | joachim99 |
---|---|
date | Mon, 06 Oct 2003 19:19:11 +0000 |
parents | |
children | efe33e938730 |
comparison
equal
deleted
inserted
replaced
13:266aeefa1b11 | 14:415083d043f3 |
---|---|
1 #! /usr/bin/perl | |
2 | |
3 # | |
4 # This script recursively (beginning with the current directory) | |
5 # wipes out everything not registered in CVS. | |
6 # | |
7 # written by Oswald Buddenhagen <ossi@kde.org> | |
8 # inspired by the "old" cvs-clean target from Makefile.common | |
9 # | |
10 # This file is free software in terms of the BSD licence. That means | |
11 # that you can do anything with it except removing this license or | |
12 # the above copyright notice. There is NO WARRANTY of any kind. | |
13 # | |
14 | |
15 sub rmrf() | |
16 { | |
17 my $fn = shift; | |
18 lstat ($fn); | |
19 if (-d _) { | |
20 if (opendir (DIR, $fn)) { | |
21 for my $efn (grep (!/^\.\.?$/, readdir (DIR))) { | |
22 &rmrf ($fn."/".$efn); | |
23 } | |
24 closedir (DIR); | |
25 rmdir ($fn); | |
26 } | |
27 } else { | |
28 unlink ($fn); | |
29 } | |
30 } | |
31 | |
32 sub newfiles() | |
33 { | |
34 my ($indir, $incvs) = @_; | |
35 for my $n (keys (%$incvs)) { delete $$indir{$n} } | |
36 return sort (keys (%$indir)); | |
37 } | |
38 | |
39 sub cvsclean() | |
40 { | |
41 my $dir = shift; | |
42 my (%dirsdir, %filesdir, %dirscvs, %filescvs); | |
43 my $dnam = $dir ? $dir : "."; | |
44 if (!opendir (DIR, $dnam)) { | |
45 print STDERR "Cannot enter \"".$dnam."\".\n"; | |
46 return; | |
47 } | |
48 for my $fn (grep (!/^\.\.?$/, readdir (DIR))) { | |
49 if (-d $dir.$fn) { | |
50 $fn eq "CVS" or $dirsdir{$fn} = 1; | |
51 } else { | |
52 $filesdir{$fn} = 1; | |
53 } | |
54 } | |
55 closedir (DIR); | |
56 if (!open (FILE, "<".$dir."CVS/Entries")) { | |
57 print STDERR "No CVS information in \"".$dnam."\".\n"; | |
58 return; | |
59 } | |
60 while (<FILE>) { | |
61 m%^D/([^/]+)/.*$% and $dirscvs{$1} = 1; | |
62 m%^/([^/]+)/.*$% and $filescvs{$1} = 1; | |
63 } | |
64 close (FILE); | |
65 if (open (FILE, "<".$dir."CVS/Entries.Log")) { | |
66 while (<FILE>) { | |
67 m%^A D/([^/]+)/.*$% and $dirscvs{$1} = 1; | |
68 m%^A /([^/]+)/.*$% and $filescvs{$1} = 1; | |
69 m%^R D/([^/]+)/.*$% and delete $dirscvs{$1}; | |
70 m%^R /([^/]+)/.*$% and delete $filescvs{$1}; | |
71 } | |
72 close (FILE); | |
73 } | |
74 for my $fn (&newfiles (\%filesdir, \%filescvs)) { | |
75 print ("F ".$dir.$fn."\n"); | |
76 &rmrf ($dir.$fn); | |
77 } | |
78 for my $fn (&newfiles (\%dirsdir, \%dirscvs)) { | |
79 print ("D ".$dir.$fn."\n"); | |
80 &rmrf ($dir.$fn); | |
81 } | |
82 for my $fn (sort (keys (%dirscvs))) { | |
83 &cvsclean ($dir.$fn."/"); | |
84 } | |
85 } | |
86 | |
87 &cvsclean (""); |