source: gsdl/trunk/bin/script/incremental-buildcol.pl@ 20837

Last change on this file since 20837 was 20606, checked in by davidb, 15 years ago

Testing for Windows directory characters as well as Unix one. Also more careful filtering of minus options to script to -manifest isn't passed on to buildcol.pl

  • Property svn:executable set to *
File size: 5.1 KB
Line 
1#!/usr/bin/perl -w
2
3###########################################################################
4#
5# incremental-buildcol.pl -- runs buildcol.pl with -incremental on
6# A component of the Greenstone digital library software
7# from the New Zealand Digital Library Project at the
8# University of Waikato, New Zealand.
9#
10# Copyright (C) 2009 New Zealand Digital Library Project
11#
12# This program is free software; you can redistribute it and/or modify
13# it under the terms of the GNU General Public License as published by
14# the Free Software Foundation; either version 2 of the License, or
15# (at your option) any later version.
16#
17# This program is distributed in the hope that it will be useful,
18# but WITHOUT ANY WARRANTY; without even the implied warranty of
19# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
20# GNU General Public License for more details.
21#
22# You should have received a copy of the GNU General Public License
23# along with this program; if not, write to the Free Software
24# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
25#
26###########################################################################
27
28
29# This program is designed to support incremental building of Greenstone
30# Runs: buildcol.pl -incremental -builddir GSDLHOME/collect/$collect/index ...
31
32
33BEGIN {
34 die "GSDLHOME not set\n" unless defined $ENV{'GSDLHOME'};
35 die "GSDLOS not set\n" unless defined $ENV{'GSDLOS'};
36 unshift (@INC, "$ENV{'GSDLHOME'}/perllib");
37}
38
39
40use strict;
41no strict 'refs'; # allow filehandles to be variables and vice versa
42no strict 'subs'; # allow barewords (eg STDERR) as function arguments
43
44use util;
45use colcfg;
46
47sub main
48{
49 my ($argc,@argv) = @_;
50
51 if (($argc==0) || (($argc==1) && ($argv[0] =~ m/^--?h(elp)?$/))) {
52 my ($progname) = ($0 =~ m/^.*[\/|\\](.*?)$/);
53
54
55 print STDERR "\n";
56 print STDERR "Usage: $progname [buildcol.pl options] collection\n";
57 print STDERR "\n";
58
59 exit(-1);
60 }
61
62
63 my $collect = pop @argv;
64
65 my @filtered_argv = ();
66
67 my $collect_dir = undef;
68 my $build_dir = undef;
69 my $site = undef;
70
71 while (my $arg = shift @argv) {
72 if ($arg eq "-collectdir") {
73 $collect_dir = shift @argv;
74 push(@filtered_argv,$arg,$collect_dir);
75 }
76 elsif ($arg eq "-builddir") {
77 $build_dir = shift @argv;
78 push(@filtered_argv,$arg,$build_dir);
79 }
80 elsif ($arg eq "-site") {
81 $site = shift @argv;
82 push(@filtered_argv,$arg,$site);
83 }
84 else {
85 push(@filtered_argv,$arg);
86 }
87 }
88
89
90 if (!defined $collect_dir) {
91 $collect_dir = &util::filename_cat($ENV{'GSDLHOME'},"collect");
92 }
93 my $this_collect_dir = &util::filename_cat($collect_dir,$collect);
94
95 if (!-d $this_collect_dir) {
96 print STDERR "Error: $collect_dir does not exist\n";
97 exit(-1);
98 }
99
100
101 if (!defined $build_dir) {
102 # Yes this is intentional that 'build_dir' points to "index"
103 $build_dir = &util::filename_cat($this_collect_dir,"index");
104 push(@filtered_argv,"-builddir",$build_dir);
105 }
106
107 my $quoted_argv = join(" ", map { "\"$_\"" } @filtered_argv);
108
109 my $buildcol_cmd = "buildcol.pl";
110 if($ENV{'GSDLOS'} =~ m/windows/) {
111 if($ENV{'PERLPATH'}) {
112 # need to ensure that the path to perl is quoted (in case there's spaces in it)
113 $buildcol_cmd = "\"$ENV{'PERLPATH'}\\Perl.exe\" -S $buildcol_cmd";
114 } else {
115 $buildcol_cmd = "perl -S $buildcol_cmd";
116 }
117 }
118
119 if ((&colcfg::use_collection($site, $collect, $collect_dir)) eq "") {
120 print STDERR "Unable to use collection \"$collect\" within \"$collect_dir\"\n";
121 exit -1;
122 }
123 # Read in the collection configuration file.
124 my ($collect_cfg_filename, $gs_mode) = &colcfg::get_collect_cfg_name(STDERR);
125
126 my $collectcfg = &colcfg::read_collection_cfg ($collect_cfg_filename,$gs_mode);
127
128 # look for build.cfg/buildConfig.xml
129 my $build_cfg_filename ="";
130
131 if ($gs_mode eq "gs2") {
132 $build_cfg_filename = &util::filename_cat($build_dir,"build.cfg");
133 } else {
134 $build_cfg_filename = &util::filename_cat($build_dir, "buildConfig.xml");
135 }
136
137 if (-e $build_cfg_filename) {
138
139 # figure out if there has been a change of indexer
140 # (e.g. collect.cfg now says lucene, but build.cfg says mgpp)
141
142 my $buildcfg = &colcfg::read_building_cfg ($build_cfg_filename, $gs_mode);
143 if ($buildcfg->{'buildtype'} ne $collectcfg->{'buildtype'}) {
144 print STDERR "*****\n";
145 print STDERR "* Change of indexer detected. Switching to full buildcol.pl.\n";
146 print STDERR "*****\n";
147 $buildcol_cmd .= " -removeold";
148 }
149 else {
150
151 $buildcol_cmd .= " -incremental";
152 }
153 }
154 else {
155 # build.cfg doesn't exit
156 print STDERR "*****\n";
157 print STDERR "* First time built. Switching to full buildcol.pl.\n";
158 print STDERR "*****\n";
159 $buildcol_cmd .= " -removeold";
160 }
161
162
163 $buildcol_cmd .= " $quoted_argv \"$collect\"";
164
165 my $buildcol_status = system($buildcol_cmd)/256;
166
167 if ($buildcol_status != 0) {
168 print STDERR "Error: Failed to run: $buildcol_cmd\n";
169 print STDERR " $!\n" if ($! ne "");
170 exit(-1);
171 }
172}
173
174&main(scalar(@ARGV),@ARGV);
175
176
177
178
Note: See TracBrowser for help on using the repository browser.