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