~ubuntu-branches/ubuntu/lucid/kkbswitch/lucid

« back to all changes in this revision

Viewing changes to admin/cvs-clean.pl

  • Committer: Bazaar Package Importer
  • Author(s): Lior Kaplan
  • Date: 2005-09-07 02:01:14 UTC
  • Revision ID: james.westby@ubuntu.com-20050907020114-2wyo9eu21uihq86n
Tags: upstream-1.4.3
ImportĀ upstreamĀ versionĀ 1.4.3

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
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 license. 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 ("");