1*b1cdbd2cSJim Jagielski#************************************************************** 2*b1cdbd2cSJim Jagielski# 3*b1cdbd2cSJim Jagielski# Licensed to the Apache Software Foundation (ASF) under one 4*b1cdbd2cSJim Jagielski# or more contributor license agreements. See the NOTICE file 5*b1cdbd2cSJim Jagielski# distributed with this work for additional information 6*b1cdbd2cSJim Jagielski# regarding copyright ownership. The ASF licenses this file 7*b1cdbd2cSJim Jagielski# to you under the Apache License, Version 2.0 (the 8*b1cdbd2cSJim Jagielski# "License"); you may not use this file except in compliance 9*b1cdbd2cSJim Jagielski# with the License. You may obtain a copy of the License at 10*b1cdbd2cSJim Jagielski# 11*b1cdbd2cSJim Jagielski# http://www.apache.org/licenses/LICENSE-2.0 12*b1cdbd2cSJim Jagielski# 13*b1cdbd2cSJim Jagielski# Unless required by applicable law or agreed to in writing, 14*b1cdbd2cSJim Jagielski# software distributed under the License is distributed on an 15*b1cdbd2cSJim Jagielski# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 16*b1cdbd2cSJim Jagielski# KIND, either express or implied. See the License for the 17*b1cdbd2cSJim Jagielski# specific language governing permissions and limitations 18*b1cdbd2cSJim Jagielski# under the License. 19*b1cdbd2cSJim Jagielski# 20*b1cdbd2cSJim Jagielski#************************************************************** 21*b1cdbd2cSJim Jagielski 22*b1cdbd2cSJim Jagielski 23*b1cdbd2cSJim Jagielski 24*b1cdbd2cSJim Jagielski 25*b1cdbd2cSJim Jagielskipackage packager::files; 26*b1cdbd2cSJim Jagielski 27*b1cdbd2cSJim Jagielskiuse packager::exiter; 28*b1cdbd2cSJim Jagielski 29*b1cdbd2cSJim Jagielski############################################ 30*b1cdbd2cSJim Jagielski# File Operations 31*b1cdbd2cSJim Jagielski############################################ 32*b1cdbd2cSJim Jagielski 33*b1cdbd2cSJim Jagielskisub check_file 34*b1cdbd2cSJim Jagielski{ 35*b1cdbd2cSJim Jagielski my ($arg) = @_; 36*b1cdbd2cSJim Jagielski 37*b1cdbd2cSJim Jagielski if(!( -f $arg )) 38*b1cdbd2cSJim Jagielski { 39*b1cdbd2cSJim Jagielski packager::exiter::exit_program("ERROR: Cannot find file $arg", "check_file"); 40*b1cdbd2cSJim Jagielski } 41*b1cdbd2cSJim Jagielski} 42*b1cdbd2cSJim Jagielski 43*b1cdbd2cSJim Jagielskisub read_file 44*b1cdbd2cSJim Jagielski{ 45*b1cdbd2cSJim Jagielski my ($localfile) = @_; 46*b1cdbd2cSJim Jagielski 47*b1cdbd2cSJim Jagielski if ( ! open( IN, $localfile ) ) { 48*b1cdbd2cSJim Jagielski # try again - sometimes we get errors caused by race conditions in parallel builds 49*b1cdbd2cSJim Jagielski sleep 5; 50*b1cdbd2cSJim Jagielski open( IN, $localfile ) or packager::exiter::exit_program("ERROR: Cannot open file: $localfile", "read_file"); 51*b1cdbd2cSJim Jagielski } 52*b1cdbd2cSJim Jagielski my @localfile = <IN>; 53*b1cdbd2cSJim Jagielski close( IN ); 54*b1cdbd2cSJim Jagielski 55*b1cdbd2cSJim Jagielski return \@localfile; 56*b1cdbd2cSJim Jagielski} 57*b1cdbd2cSJim Jagielski 58*b1cdbd2cSJim Jagielski########################################### 59*b1cdbd2cSJim Jagielski# Saving files 60*b1cdbd2cSJim Jagielski########################################### 61*b1cdbd2cSJim Jagielski 62*b1cdbd2cSJim Jagielskisub save_file 63*b1cdbd2cSJim Jagielski{ 64*b1cdbd2cSJim Jagielski my ($savefile, $savecontent) = @_; 65*b1cdbd2cSJim Jagielski open( OUT, ">$savefile" ); 66*b1cdbd2cSJim Jagielski print OUT @{$savecontent}; 67*b1cdbd2cSJim Jagielski close( OUT); 68*b1cdbd2cSJim Jagielski if (! -f $savefile) { packager::exiter::exit_program("ERROR: Cannot write file: $savefile", "save_file"); } 69*b1cdbd2cSJim Jagielski} 70*b1cdbd2cSJim Jagielski 71*b1cdbd2cSJim Jagielski###################################################### 72*b1cdbd2cSJim Jagielski# Creating a new direcotory 73*b1cdbd2cSJim Jagielski###################################################### 74*b1cdbd2cSJim Jagielski 75*b1cdbd2cSJim Jagielskisub create_directory 76*b1cdbd2cSJim Jagielski{ 77*b1cdbd2cSJim Jagielski my ($directory) = @_; 78*b1cdbd2cSJim Jagielski 79*b1cdbd2cSJim Jagielski my $returnvalue = 1; 80*b1cdbd2cSJim Jagielski 81*b1cdbd2cSJim Jagielski if (!(-d $directory)) 82*b1cdbd2cSJim Jagielski { 83*b1cdbd2cSJim Jagielski $returnvalue = mkdir($directory, 0775); 84*b1cdbd2cSJim Jagielski 85*b1cdbd2cSJim Jagielski if ($returnvalue) 86*b1cdbd2cSJim Jagielski { 87*b1cdbd2cSJim Jagielski $infoline = "\nCreated directory: $directory\n"; 88*b1cdbd2cSJim Jagielski push(@packager::globals::logfileinfo, $infoline); 89*b1cdbd2cSJim Jagielski 90*b1cdbd2cSJim Jagielski if ($packager::globals::isunix) 91*b1cdbd2cSJim Jagielski { 92*b1cdbd2cSJim Jagielski my $localcall = "chmod 775 $directory \>\/dev\/null 2\>\&1"; 93*b1cdbd2cSJim Jagielski system($localcall); 94*b1cdbd2cSJim Jagielski } 95*b1cdbd2cSJim Jagielski } 96*b1cdbd2cSJim Jagielski else 97*b1cdbd2cSJim Jagielski { 98*b1cdbd2cSJim Jagielski packager::exiter::exit_program("ERROR: Could not create directory: $directory", "create_directory"); 99*b1cdbd2cSJim Jagielski } 100*b1cdbd2cSJim Jagielski } 101*b1cdbd2cSJim Jagielski} 102*b1cdbd2cSJim Jagielski 103*b1cdbd2cSJim Jagielski###################################################### 104*b1cdbd2cSJim Jagielski# Creating a unique directory with number extension 105*b1cdbd2cSJim Jagielski###################################################### 106*b1cdbd2cSJim Jagielski 107*b1cdbd2cSJim Jagielskisub create_unique_directory 108*b1cdbd2cSJim Jagielski{ 109*b1cdbd2cSJim Jagielski my ($directory) = @_; 110*b1cdbd2cSJim Jagielski 111*b1cdbd2cSJim Jagielski $directory =~ s/\Q$packager::globals::separator\E\s*$//; 112*b1cdbd2cSJim Jagielski $directory = $directory . "_INCREASINGNUMBER"; 113*b1cdbd2cSJim Jagielski 114*b1cdbd2cSJim Jagielski my $counter = 1; 115*b1cdbd2cSJim Jagielski my $created = 0; 116*b1cdbd2cSJim Jagielski my $localdirectory = ""; 117*b1cdbd2cSJim Jagielski 118*b1cdbd2cSJim Jagielski do 119*b1cdbd2cSJim Jagielski { 120*b1cdbd2cSJim Jagielski $localdirectory = $directory; 121*b1cdbd2cSJim Jagielski $localdirectory =~ s/INCREASINGNUMBER/$counter/; 122*b1cdbd2cSJim Jagielski $counter++; 123*b1cdbd2cSJim Jagielski 124*b1cdbd2cSJim Jagielski if ( ! -d $localdirectory ) 125*b1cdbd2cSJim Jagielski { 126*b1cdbd2cSJim Jagielski create_directory($localdirectory); 127*b1cdbd2cSJim Jagielski $created = 1; 128*b1cdbd2cSJim Jagielski } 129*b1cdbd2cSJim Jagielski } 130*b1cdbd2cSJim Jagielski while ( ! $created ); 131*b1cdbd2cSJim Jagielski 132*b1cdbd2cSJim Jagielski return $localdirectory; 133*b1cdbd2cSJim Jagielski} 134*b1cdbd2cSJim Jagielski 135*b1cdbd2cSJim Jagielski###################################################### 136*b1cdbd2cSJim Jagielski# Removing a complete directory with subdirectories 137*b1cdbd2cSJim Jagielski###################################################### 138*b1cdbd2cSJim Jagielski 139*b1cdbd2cSJim Jagielskisub remove_complete_directory 140*b1cdbd2cSJim Jagielski{ 141*b1cdbd2cSJim Jagielski my ($directory) = @_; 142*b1cdbd2cSJim Jagielski 143*b1cdbd2cSJim Jagielski my @content = (); 144*b1cdbd2cSJim Jagielski 145*b1cdbd2cSJim Jagielski $directory =~ s/\Q$packager::globals::separator\E\s*$//; 146*b1cdbd2cSJim Jagielski 147*b1cdbd2cSJim Jagielski if ( -d $directory ) 148*b1cdbd2cSJim Jagielski { 149*b1cdbd2cSJim Jagielski opendir(DIR, $directory); 150*b1cdbd2cSJim Jagielski @content = readdir(DIR); 151*b1cdbd2cSJim Jagielski closedir(DIR); 152*b1cdbd2cSJim Jagielski 153*b1cdbd2cSJim Jagielski my $oneitem; 154*b1cdbd2cSJim Jagielski 155*b1cdbd2cSJim Jagielski foreach $oneitem (@content) 156*b1cdbd2cSJim Jagielski { 157*b1cdbd2cSJim Jagielski if ((!($oneitem eq ".")) && (!($oneitem eq ".."))) 158*b1cdbd2cSJim Jagielski { 159*b1cdbd2cSJim Jagielski my $item = $directory . $packager::globals::separator . $oneitem; 160*b1cdbd2cSJim Jagielski 161*b1cdbd2cSJim Jagielski if ( -f $item ) # deleting files 162*b1cdbd2cSJim Jagielski { 163*b1cdbd2cSJim Jagielski unlink($item); 164*b1cdbd2cSJim Jagielski } 165*b1cdbd2cSJim Jagielski 166*b1cdbd2cSJim Jagielski if ( -d $item ) # recursive 167*b1cdbd2cSJim Jagielski { 168*b1cdbd2cSJim Jagielski remove_complete_directory($item, 0); 169*b1cdbd2cSJim Jagielski } 170*b1cdbd2cSJim Jagielski } 171*b1cdbd2cSJim Jagielski } 172*b1cdbd2cSJim Jagielski 173*b1cdbd2cSJim Jagielski # try to remove empty directory 174*b1cdbd2cSJim Jagielski 175*b1cdbd2cSJim Jagielski rmdir $directory; 176*b1cdbd2cSJim Jagielski 177*b1cdbd2cSJim Jagielski } 178*b1cdbd2cSJim Jagielski} 179*b1cdbd2cSJim Jagielski 180*b1cdbd2cSJim Jagielski1; 181