ViewVC Help
View File | Revision Log | Show Annotations | Root Listing
root/cvsroot/COMP/SCRAM/src/Utilities/AddDir.pm
(Generate patch)

Comparing COMP/SCRAM/src/Utilities/AddDir.pm (file contents):
Revision 1.1 by williamc, Mon Mar 1 10:35:01 1999 UTC vs.
Revision 1.14.2.1 by muzaffar, Tue Feb 19 11:03:39 2008 UTC

# Line 1 | Line 1
1 < #!/usr/local/bin/perl5
2 < #
1 > =head1 NAME
2  
3 < package AddDir;
3 > Utilities::AddDir - Utility functions for creating or copying directories.
4 >
5 > =head1 SYNOPSIS
6 >
7 >        &Utilities::AddDir::adddir($dir);
8 >        &Utilities::AddDir::copydir($src,$dest);
9 >        &Utilities::AddDir::copydirwithskip($src,$dest,@files_to_skip);
10 >
11 > =head1 METHODS
12 >
13 > =over
14 >
15 > =cut
16 >
17 > package Utilities::AddDir;
18 > require 5.001;
19   require Exporter;
20   use Cwd;
21   @ISA    = qw(Exporter);
22 < @EXPORT = qw(adddir);
22 > @EXPORT = qw(adddir copydir copydirwithskip);
23 >
24 > =item   C<adddir($dir)>
25  
26 < sub adddir ($directory) {
26 > Create a new directory.
27 >
28 > =cut
29 >
30 > sub adddir {
31   my $indir=shift;
32   my $startdir=cwd;
33   my @dir=split /\//,  $indir;
# Line 20 | Line 40 | sub adddir ($directory) {
40   foreach $dirname ( @dir ) {
41    next if ( $dirname eq "" );
42    if ( ! -e $dirname ) {
43 <   mkdir ( $dirname , 0775) ||
43 >   mkdir ( $dirname , 0755) ||
44                  die "cannot make directory ".$dirname." $!\n";
45     print $i." ".$dirname."\n" if $debug;
46    }
# Line 28 | Line 48 | sub adddir ($directory) {
48   }
49   chdir $startdir;
50   }
51 +
52 +
53 + =item   C<copydir($src, $dest)>
54 +
55 + Copy a directory $src and contents to $dest.
56 +
57 + =cut
58 +
59 + sub copydir
60 +   {
61 +   my $src=shift;
62 +   my $dest=shift;
63 +  
64 +   use DirHandle;
65 +   use File::Copy;
66 +  
67 +   adddir($dest);
68 +   my $dh=DirHandle->new($src);
69 +  
70 +   if (defined $dh)
71 +      {
72 +      my @allfiles=$dh->read();
73 +  
74 +      my $file;
75 +      foreach $file ( @allfiles )
76 +         {
77 +         next if $file=~/^\.\.?/;
78 +         if ( -d $src."/".$file )
79 +            {
80 +            copydir($src."/".$file,$dest."/".$file);
81 +            }
82 +         else
83 +            {
84 +            copy($src."/".$file,$dest."/".$file);
85 +            if ( -x $src."/".$file || -X $src."/".$file ) {chmod(0755,$dest."/".$file);}
86 +            }
87 +         }
88 +      undef $dh;
89 +      }
90 +   else
91 +      {
92 +      die "Attempt to open a non-existent directory ($src). Exiting\n";
93 +      }
94 +   }
95 +
96 + =item   C<copydirwithskip($src, $dest, @files_to_skip)>
97 +
98 + Recursively copy a directory $src to $dest. All files
99 + in @files_to_skip will be skipped.
100 +
101 + =cut
102 +
103 + sub copydirwithskip
104 +   {
105 +   my $src=shift;
106 +   my $dest=shift;
107 +   my $filetoskip=shift || [];
108 +  
109 +   use DirHandle;
110 +   use File::Copy;
111 +  
112 +   adddir($dest);
113 +  
114 +   my $dh=DirHandle->new($src);
115 +  
116 +   if (defined $dh)
117 +      {
118 +      my @allfiles=$dh->read();
119 +  
120 +      my $file;
121 +      foreach $file ( @allfiles )
122 +         {
123 +         next if $file=~/^\.\.?/;
124 +         # Skip backup files and x~ files:
125 +         next if $file =~ /.*\.bak$/;
126 +         next if $file =~ /.*~$/;
127 +
128 +         my $skip=0;
129 +         foreach my $fskip (@$filetoskip)
130 +            {
131 +            my $fullfile = "${src}/${file}";
132 +            if ($fullfile eq $fskip)
133 +               {
134 +               $skip = 1;
135 +               last;
136 +               }
137 +            }
138 +         if ($skip)
139 +            {
140 +            next;
141 +            }
142 +        
143 +         if ( -d $src."/".$file )
144 +            {
145 +            copydirwithskip($src."/".$file,$dest."/".$file,$filetoskip);
146 +            }
147 +         else
148 +            {
149 +            copy($src."/".$file,$dest."/".$file);
150 +            if ( -x $src."/".$file || -X $src."/".$file ) {chmod(0755,$dest."/".$file);}
151 +            }
152 +         }
153 +      undef $dh;
154 +      }
155 +   else
156 +      {
157 +      die "Attempt to open a non-existent directory ($src). Exiting\n";
158 +      }
159 +   }
160 +
161 + =back
162 +
163 + =head1 AUTHOR
164 +
165 + Originally written by Christopher Williams.
166 +
167 + =head1 MAINTAINER
168 +
169 + Shaun ASHBY
170 +
171 + =cut
172 +

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines