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

Revision 26567, 4.8 KB (checked in by ak19, 8 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 *
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    if (!defined $build_dir) {
96    # Yes this is intentional that 'build_dir' points to "index"
97    $build_dir = &util::filename_cat ($ENV{'GSDLCOLLECTDIR'},"index");
98    push(@filtered_argv,"-builddir",$build_dir);
99    }
100
101    my $quoted_argv = join(" ", map { "\"$_\"" } @filtered_argv);
102   
103    my $buildcol_cmd = "\"".&util::get_perl_exec()."\" -S buildcol.pl";
104
105    # Read in the collection configuration file.
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);
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   
123    if (-e $build_cfg_filename) {
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
128    my $buildcfg = &colcfg::read_building_cfg ($build_cfg_filename, $gs_mode);
129    if ($buildcfg->{'buildtype'} ne $collectcfg->{'buildtype'}) {
130        print STDERR "*****\n";
131        print STDERR "* Change of indexer detected. Switching to buildcol.pl with -removeold.\n";
132        print STDERR "*****\n";
133        $buildcol_cmd .= " -removeold";
134    }
135    else {
136
137        $buildcol_cmd .= " -incremental";
138    }
139    }
140    else {
141    # build.cfg doesn't exit
142    print STDERR "*****\n";
143    print STDERR "* First time built. Switching to buildcol.pl with -removeold.\n";
144    print STDERR "*****\n";
145    $buildcol_cmd .= " -removeold";
146    }
147
148   
149    $buildcol_cmd .= " $quoted_argv \"$collection\"";
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 browser.