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

Last change on this file since 26567 was 26567, checked in by ak19, 11 years ago

When a GS2 collection contains both collect.cfg and collectionConfig.xml (as advanced beatles does) the old code used to end up reading in the GS3 collectionConfig.xml instead of the GS2 collect.cfg and set the GS_mode to GS3. Now colcfg::get_collect_cfg_name takes the gs_mode (instead of determining this and returning it) and works out the collectcfg file name for the gs_mode. That means that the calling functions now need to work out the gs_mode. They do so by setting the gs_mode to gs3 if the site flag is present in the commandline, if not then it defaults to gs2. So from now on, the site flag must be specified for GS3 collections.

  • Property svn:executable set to *
File size: 4.8 KB
RevLine 
[18470]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;
[19743]41no strict 'refs'; # allow filehandles to be variables and vice versa
42no strict 'subs'; # allow barewords (eg STDERR) as function arguments
[18470]43
44use util;
[19743]45use colcfg;
[18470]46
47sub main
48{
49 my ($argc,@argv) = @_;
50
51 if (($argc==0) || (($argc==1) && ($argv[0] =~ m/^--?h(elp)?$/))) {
[20606]52 my ($progname) = ($0 =~ m/^.*[\/|\\](.*?)$/);
[18470]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
[21733]63 my $collection = pop @argv;
[18470]64
[18492]65 my @filtered_argv = ();
66
67 my $collect_dir = undef;
68 my $build_dir = undef;
[19743]69 my $site = undef;
[18492]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 }
[19743]80 elsif ($arg eq "-site") {
81 $site = shift @argv;
82 push(@filtered_argv,$arg,$site);
83 }
[18492]84 else {
85 push(@filtered_argv,$arg);
86 }
87 }
88
[21733]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;
[24362]93 }
[18492]94
95 if (!defined $build_dir) {
[18511]96 # Yes this is intentional that 'build_dir' points to "index"
[21733]97 $build_dir = &util::filename_cat ($ENV{'GSDLCOLLECTDIR'},"index");
[18492]98 push(@filtered_argv,"-builddir",$build_dir);
99 }
100
101 my $quoted_argv = join(" ", map { "\"$_\"" } @filtered_argv);
[18470]102
[24362]103 my $buildcol_cmd = "\"".&util::get_perl_exec()."\" -S buildcol.pl";
[18470]104
[19899]105 # Read in the collection configuration file.
[26567]106 my $gs_mode = "gs2";
107 if ((defined $site) && ($site ne "")) { # GS3
108 $gs_mode = "gs3";
109 }
110 my $collect_cfg_filename = &colcfg::get_collect_cfg_name(STDERR, $gs_mode);
[19899]111
112 my $collectcfg = &colcfg::read_collection_cfg ($collect_cfg_filename,$gs_mode);
113
114 # look for build.cfg/buildConfig.xml
115 my $build_cfg_filename ="";
116
117 if ($gs_mode eq "gs2") {
118 $build_cfg_filename = &util::filename_cat($build_dir,"build.cfg");
119 } else {
120 $build_cfg_filename = &util::filename_cat($build_dir, "buildConfig.xml");
121 }
122
[18492]123 if (-e $build_cfg_filename) {
[19743]124
125 # figure out if there has been a change of indexer
126 # (e.g. collect.cfg now says lucene, but build.cfg says mgpp)
127
[20098]128 my $buildcfg = &colcfg::read_building_cfg ($build_cfg_filename, $gs_mode);
[19743]129 if ($buildcfg->{'buildtype'} ne $collectcfg->{'buildtype'}) {
130 print STDERR "*****\n";
[24749]131 print STDERR "* Change of indexer detected. Switching to buildcol.pl with -removeold.\n";
[19743]132 print STDERR "*****\n";
133 $buildcol_cmd .= " -removeold";
134 }
135 else {
136
137 $buildcol_cmd .= " -incremental";
138 }
[18492]139 }
140 else {
[19743]141 # build.cfg doesn't exit
[18492]142 print STDERR "*****\n";
[24749]143 print STDERR "* First time built. Switching to buildcol.pl with -removeold.\n";
[18492]144 print STDERR "*****\n";
145 $buildcol_cmd .= " -removeold";
146 }
147
[18470]148
[21733]149 $buildcol_cmd .= " $quoted_argv \"$collection\"";
[18470]150
151 my $buildcol_status = system($buildcol_cmd)/256;
152
153 if ($buildcol_status != 0) {
154 print STDERR "Error: Failed to run: $buildcol_cmd\n";
155 print STDERR " $!\n" if ($! ne "");
156 exit(-1);
157 }
158}
159
160&main(scalar(@ARGV),@ARGV);
161
162
163
164
Note: See TracBrowser for help on using the repository browser.