source: main/trunk/greenstone2/bin/script/incremental-buildcol.pl@ 32611

Last change on this file since 32611 was 32611, checked in by kjdon, 2 years ago

only set builddir to index if we actually are being incremental. Otherwise, we set remove old, current contents of index deleted, then try to copy index to index, which no longer exists...

  • Property svn:executable set to *
File size: 4.9 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 $collection = 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 # get and check the collection name
90 if ((&colcfg::use_collection($site, $collection, $collect_dir)) eq "") {
91 print STDERR "Unable to use collection \"$collection\" within \"$collect_dir\"\n";
92 exit -1;
93 }
94
95 my $buildcol_cmd = "\"".&util::get_perl_exec()."\" -S buildcol.pl";
96
97 # Read in the collection configuration file.
98 my $gs_mode = "gs2";
99 if ((defined $site) && ($site ne "")) { # GS3
100 $gs_mode = "gs3";
101 }
102 my $collect_cfg_filename = &colcfg::get_collect_cfg_name(STDERR, $gs_mode);
103
104 my $collectcfg = &colcfg::read_collection_cfg ($collect_cfg_filename,$gs_mode);
105
106 # look for build.cfg/buildConfig.xml
107 my $build_cfg_filename ="";
108
109 if ($gs_mode eq "gs2") {
110 $build_cfg_filename = &util::filename_cat($build_dir,"build.cfg");
111 } else {
112 $build_cfg_filename = &util::filename_cat($build_dir, "buildConfig.xml");
113 }
114
115 # do we actually want to be incremental?
116 my $is_incremental = 1;
117 if (-e $build_cfg_filename) {
118
119 # figure out if there has been a change of indexer
120 # (e.g. collect.cfg now says lucene, but build.cfg says mgpp)
121
122 my $buildcfg = &colcfg::read_building_cfg ($build_cfg_filename, $gs_mode);
123 if ($buildcfg->{'buildtype'} ne $collectcfg->{'buildtype'}) {
124 print STDERR "*****\n";
125 print STDERR "* Change of indexer detected. Switching to buildcol.pl with -removeold.\n";
126 print STDERR "*****\n";
127 $buildcol_cmd .= " -removeold";
128 $is_incremental = 0;
129 }
130 else {
131
132 $buildcol_cmd .= " -incremental";
133 }
134 }
135 else {
136 # build.cfg doesn't exit
137 print STDERR "*****\n";
138 print STDERR "* First time built. Switching to buildcol.pl with -removeold.\n";
139 print STDERR "*****\n";
140 $buildcol_cmd .= " -removeold";
141 $is_incremental = 0;
142 }
143
144 # if we actually are incremental, then set builddir to index.
145 if (!defined $build_dir && $is_incremental) {
146 # Yes this is intentional that 'build_dir' points to "index"
147 $build_dir = &util::filename_cat ($ENV{'GSDLCOLLECTDIR'},"index");
148 push(@filtered_argv,"-builddir",$build_dir);
149 }
150
151 my $quoted_argv = join(" ", map { "\"$_\"" } @filtered_argv);
152
153 $buildcol_cmd .= " $quoted_argv \"$collection\"";
154
155 my $buildcol_status = system($buildcol_cmd)/256;
156
157 if ($buildcol_status != 0) {
158 print STDERR "Error: Failed to run: $buildcol_cmd\n";
159 print STDERR " $!\n" if ($! ne "");
160 exit(-1);
161 }
162}
163
164&main(scalar(@ARGV),@ARGV);
165
166
167
168
Note: See TracBrowser for help on using the repository browser.