xref: /aoo41x/main/solenv/bin/modules/packager/files.pm (revision cdf0e10c)
1*cdf0e10cSrcweir#*************************************************************************
2*cdf0e10cSrcweir#
3*cdf0e10cSrcweir# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
4*cdf0e10cSrcweir#
5*cdf0e10cSrcweir# Copyright 2000, 2010 Oracle and/or its affiliates.
6*cdf0e10cSrcweir#
7*cdf0e10cSrcweir# OpenOffice.org - a multi-platform office productivity suite
8*cdf0e10cSrcweir#
9*cdf0e10cSrcweir# This file is part of OpenOffice.org.
10*cdf0e10cSrcweir#
11*cdf0e10cSrcweir# OpenOffice.org is free software: you can redistribute it and/or modify
12*cdf0e10cSrcweir# it under the terms of the GNU Lesser General Public License version 3
13*cdf0e10cSrcweir# only, as published by the Free Software Foundation.
14*cdf0e10cSrcweir#
15*cdf0e10cSrcweir# OpenOffice.org is distributed in the hope that it will be useful,
16*cdf0e10cSrcweir# but WITHOUT ANY WARRANTY; without even the implied warranty of
17*cdf0e10cSrcweir# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
18*cdf0e10cSrcweir# GNU Lesser General Public License version 3 for more details
19*cdf0e10cSrcweir# (a copy is included in the LICENSE file that accompanied this code).
20*cdf0e10cSrcweir#
21*cdf0e10cSrcweir# You should have received a copy of the GNU Lesser General Public License
22*cdf0e10cSrcweir# version 3 along with OpenOffice.org.  If not, see
23*cdf0e10cSrcweir# <http://www.openoffice.org/license.html>
24*cdf0e10cSrcweir# for a copy of the LGPLv3 License.
25*cdf0e10cSrcweir#
26*cdf0e10cSrcweir#*************************************************************************
27*cdf0e10cSrcweir
28*cdf0e10cSrcweir
29*cdf0e10cSrcweirpackage packager::files;
30*cdf0e10cSrcweir
31*cdf0e10cSrcweiruse packager::exiter;
32*cdf0e10cSrcweir
33*cdf0e10cSrcweir############################################
34*cdf0e10cSrcweir# File Operations
35*cdf0e10cSrcweir############################################
36*cdf0e10cSrcweir
37*cdf0e10cSrcweirsub check_file
38*cdf0e10cSrcweir{
39*cdf0e10cSrcweir	my ($arg) = @_;
40*cdf0e10cSrcweir
41*cdf0e10cSrcweir	if(!( -f $arg ))
42*cdf0e10cSrcweir	{
43*cdf0e10cSrcweir		packager::exiter::exit_program("ERROR: Cannot find file $arg", "check_file");
44*cdf0e10cSrcweir	}
45*cdf0e10cSrcweir}
46*cdf0e10cSrcweir
47*cdf0e10cSrcweirsub read_file
48*cdf0e10cSrcweir{
49*cdf0e10cSrcweir	my ($localfile) = @_;
50*cdf0e10cSrcweir
51*cdf0e10cSrcweir	if ( ! open( IN, $localfile ) ) {
52*cdf0e10cSrcweir		# try again - sometimes we get errors caused by race conditions in parallel builds
53*cdf0e10cSrcweir		sleep 5;
54*cdf0e10cSrcweir		open( IN, $localfile ) or packager::exiter::exit_program("ERROR: Cannot open file: $localfile", "read_file");
55*cdf0e10cSrcweir	}
56*cdf0e10cSrcweir	my @localfile = <IN>;
57*cdf0e10cSrcweir	close( IN );
58*cdf0e10cSrcweir
59*cdf0e10cSrcweir	return \@localfile;
60*cdf0e10cSrcweir}
61*cdf0e10cSrcweir
62*cdf0e10cSrcweir###########################################
63*cdf0e10cSrcweir# Saving files
64*cdf0e10cSrcweir###########################################
65*cdf0e10cSrcweir
66*cdf0e10cSrcweirsub save_file
67*cdf0e10cSrcweir{
68*cdf0e10cSrcweir	my ($savefile, $savecontent) = @_;
69*cdf0e10cSrcweir	open( OUT, ">$savefile" );
70*cdf0e10cSrcweir	print OUT @{$savecontent};
71*cdf0e10cSrcweir	close( OUT);
72*cdf0e10cSrcweir	if (! -f $savefile) { packager::exiter::exit_program("ERROR: Cannot write file: $savefile", "save_file"); }
73*cdf0e10cSrcweir}
74*cdf0e10cSrcweir
75*cdf0e10cSrcweir######################################################
76*cdf0e10cSrcweir# Creating a new direcotory
77*cdf0e10cSrcweir######################################################
78*cdf0e10cSrcweir
79*cdf0e10cSrcweirsub create_directory
80*cdf0e10cSrcweir{
81*cdf0e10cSrcweir	my ($directory) = @_;
82*cdf0e10cSrcweir
83*cdf0e10cSrcweir	my $returnvalue = 1;
84*cdf0e10cSrcweir
85*cdf0e10cSrcweir	if (!(-d $directory))
86*cdf0e10cSrcweir	{
87*cdf0e10cSrcweir		$returnvalue = mkdir($directory, 0775);
88*cdf0e10cSrcweir
89*cdf0e10cSrcweir		if ($returnvalue)
90*cdf0e10cSrcweir		{
91*cdf0e10cSrcweir			$infoline = "\nCreated directory: $directory\n";
92*cdf0e10cSrcweir			push(@packager::globals::logfileinfo, $infoline);
93*cdf0e10cSrcweir
94*cdf0e10cSrcweir			if ($packager::globals::isunix)
95*cdf0e10cSrcweir			{
96*cdf0e10cSrcweir				my $localcall = "chmod 775 $directory \>\/dev\/null 2\>\&1";
97*cdf0e10cSrcweir				system($localcall);
98*cdf0e10cSrcweir			}
99*cdf0e10cSrcweir		}
100*cdf0e10cSrcweir		else
101*cdf0e10cSrcweir		{
102*cdf0e10cSrcweir			packager::exiter::exit_program("ERROR: Could not create directory: $directory", "create_directory");
103*cdf0e10cSrcweir		}
104*cdf0e10cSrcweir	}
105*cdf0e10cSrcweir}
106*cdf0e10cSrcweir
107*cdf0e10cSrcweir######################################################
108*cdf0e10cSrcweir# Creating a unique directory with number extension
109*cdf0e10cSrcweir######################################################
110*cdf0e10cSrcweir
111*cdf0e10cSrcweirsub create_unique_directory
112*cdf0e10cSrcweir{
113*cdf0e10cSrcweir	my ($directory) = @_;
114*cdf0e10cSrcweir
115*cdf0e10cSrcweir	$directory =~ s/\Q$packager::globals::separator\E\s*$//;
116*cdf0e10cSrcweir	$directory = $directory . "_INCREASINGNUMBER";
117*cdf0e10cSrcweir
118*cdf0e10cSrcweir	my $counter = 1;
119*cdf0e10cSrcweir	my $created = 0;
120*cdf0e10cSrcweir	my $localdirectory = "";
121*cdf0e10cSrcweir
122*cdf0e10cSrcweir	do
123*cdf0e10cSrcweir	{
124*cdf0e10cSrcweir		$localdirectory = $directory;
125*cdf0e10cSrcweir		$localdirectory =~ s/INCREASINGNUMBER/$counter/;
126*cdf0e10cSrcweir		$counter++;
127*cdf0e10cSrcweir
128*cdf0e10cSrcweir		if ( ! -d $localdirectory )
129*cdf0e10cSrcweir		{
130*cdf0e10cSrcweir			create_directory($localdirectory);
131*cdf0e10cSrcweir			$created = 1;
132*cdf0e10cSrcweir		}
133*cdf0e10cSrcweir	}
134*cdf0e10cSrcweir	while ( ! $created );
135*cdf0e10cSrcweir
136*cdf0e10cSrcweir	return $localdirectory;
137*cdf0e10cSrcweir}
138*cdf0e10cSrcweir
139*cdf0e10cSrcweir######################################################
140*cdf0e10cSrcweir# Removing a complete directory with subdirectories
141*cdf0e10cSrcweir######################################################
142*cdf0e10cSrcweir
143*cdf0e10cSrcweirsub remove_complete_directory
144*cdf0e10cSrcweir{
145*cdf0e10cSrcweir	my ($directory) = @_;
146*cdf0e10cSrcweir
147*cdf0e10cSrcweir	my @content = ();
148*cdf0e10cSrcweir
149*cdf0e10cSrcweir	$directory =~ s/\Q$packager::globals::separator\E\s*$//;
150*cdf0e10cSrcweir
151*cdf0e10cSrcweir	if ( -d $directory )
152*cdf0e10cSrcweir	{
153*cdf0e10cSrcweir		opendir(DIR, $directory);
154*cdf0e10cSrcweir		@content = readdir(DIR);
155*cdf0e10cSrcweir		closedir(DIR);
156*cdf0e10cSrcweir
157*cdf0e10cSrcweir		my $oneitem;
158*cdf0e10cSrcweir
159*cdf0e10cSrcweir		foreach $oneitem (@content)
160*cdf0e10cSrcweir		{
161*cdf0e10cSrcweir			if ((!($oneitem eq ".")) && (!($oneitem eq "..")))
162*cdf0e10cSrcweir			{
163*cdf0e10cSrcweir				my $item = $directory . $packager::globals::separator . $oneitem;
164*cdf0e10cSrcweir
165*cdf0e10cSrcweir				if ( -f $item ) 	# deleting files
166*cdf0e10cSrcweir				{
167*cdf0e10cSrcweir					unlink($item);
168*cdf0e10cSrcweir				}
169*cdf0e10cSrcweir
170*cdf0e10cSrcweir				if ( -d $item ) 	# recursive
171*cdf0e10cSrcweir				{
172*cdf0e10cSrcweir					remove_complete_directory($item, 0);
173*cdf0e10cSrcweir				}
174*cdf0e10cSrcweir			}
175*cdf0e10cSrcweir		}
176*cdf0e10cSrcweir
177*cdf0e10cSrcweir		# try to remove empty directory
178*cdf0e10cSrcweir
179*cdf0e10cSrcweir		rmdir $directory;
180*cdf0e10cSrcweir
181*cdf0e10cSrcweir	}
182*cdf0e10cSrcweir}
183*cdf0e10cSrcweir
184*cdf0e10cSrcweir1;
185