Bug 16505: <collection> is missing the marc namespace and updates fail if -x is passed

Using rebuild_zerba.pl with the -x option switch, produces an incorrect output in
terms of what our XSLTs expect for indexing. This patch introduces the right namespace information
on the exported records so indexing succeeds.

To test:
- On current master, have some records on your db
- Run:
  $ sudo koha-shell kohadev
  $ cd kohaclone
  $ misc/migration_tools/rebuild_zebra.pl -r -b -k -x
=> you will get a message like this:

NOTHING cleaned : the export /tmp/NL5ufjUfpp has been kept.

- Run
  $ less /tmp/NL5ufjUfpp/biblio/exported_records
=> FAIL: The first line looks like this

<?xml version="1.0" encoding="UTF-8"?><collection><record

- Now run:
  $ xsltproc \
     /etc/koha/zebradb/marc_defs/marc21/biblios/biblio-zebra-indexdefs.xsl \
     /tmp/NL5ufjUfpp/biblio/exported_records
=> FAIL: No output
- Apply the patch
- Run:
  $ misc/migration_tools/rebuild_zebra.pl -r -b -k -x
- Take a look at the result file:
  $ less /tmp/asdiouqwiue/biblio/exported_records
=> SUCCESS: The start of the file looks like this:
<?xml version="1.0" encoding="UTF-8"?><collection xmlns="http://www.loc.gov/MARC21/slim">

- Run:
  $ xsltproc \
     /etc/koha/zebradb/marc_defs/marc21/biblios/biblio-zebra-indexdefs.xsl \
     /tmp/asdiouqwiue/biblio/exported_records
=> SUCCESS: There is actually indexing data :-D
- Sign off :-D

Edit: I changed qq{} for q{} as suggested by Jonathan.

Sponsored-by: American Numismatic Society

Signed-off-by: Bernardo Gonzalez Kriegel <bgkriegel@gmail.com>
Works as described following test plan
No errors

Signed-off-by: Jonathan Druart <jonathan.druart@bugs.koha-community.org>

Signed-off-by: Kyle M Hall <kyle@bywatersolutions.com>
This commit is contained in:
Tomas Cohen Arazi 2016-05-13 11:51:54 -03:00 committed by Kyle M Hall
parent ff898e8833
commit 7a178fd262
1 changed files with 30 additions and 15 deletions

View File

@ -168,6 +168,14 @@ my $dbh = C4::Context->dbh;
my ($biblionumbertagfield,$biblionumbertagsubfield) = &GetMarcFromKohaField("biblio.biblionumber","");
my ($biblioitemnumbertagfield,$biblioitemnumbertagsubfield) = &GetMarcFromKohaField("biblioitems.biblioitemnumber","");
my $marcxml_open = q{<?xml version="1.0" encoding="UTF-8"?>
<collection xmlns="http://www.loc.gov/MARC21/slim">
};
my $marcxml_close = q{
</collection>
};
# Protect again simultaneous update of the zebra index by using a lock file.
# Create our own lock directory if its missing. This shouild be created
# by koha-zebra-ctl.sh or at system installation. If the desired directory
@ -478,10 +486,10 @@ sub export_marc_records_from_sth {
my $num_exported = 0;
open my $fh, '>:encoding(UTF-8) ', "$directory/exported_records" or die $!;
if (include_xml_wrapper($as_xml, $record_type)) {
# include XML declaration and root element
print {$fh} '<?xml version="1.0" encoding="UTF-8"?><collection>';
}
print {$fh} $marcxml_open
if include_xml_wrapper($as_xml, $record_type);
my $i = 0;
my ( $itemtag, $itemsubfield ) = GetMarcFromKohaField("items.itemnumber",'');
while (my ($record_number) = $sth->fetchrow_array) {
@ -550,7 +558,8 @@ sub export_marc_records_from_sth {
}
}
print "\nRecords exported: $num_exported\n" if ( $verbose_logging );
print {$fh} '</collection>' if (include_xml_wrapper($as_xml, $record_type));
print {$fh} $marcxml_close
if include_xml_wrapper($as_xml, $record_type);
close $fh;
return $num_exported;
}
@ -560,10 +569,10 @@ sub export_marc_records_from_list {
my $num_exported = 0;
open my $fh, '>:encoding(UTF-8)', "$directory/exported_records" or die $!;
if (include_xml_wrapper($as_xml, $record_type)) {
# include XML declaration and root element
print {$fh} '<?xml version="1.0" encoding="UTF-8"?><collection>';
}
print {$fh} $marcxml_open
if include_xml_wrapper($as_xml, $record_type);
my $i = 0;
# Skip any deleted records. We check for this anyway, but this reduces error spam
@ -592,7 +601,10 @@ sub export_marc_records_from_list {
}
}
print "\nRecords exported: $num_exported\n" if ( $verbose_logging );
print {$fh} '</collection>' if (include_xml_wrapper($as_xml, $record_type));
print {$fh} $marcxml_close
if include_xml_wrapper($as_xml, $record_type);
close $fh;
return $num_exported;
}
@ -602,10 +614,10 @@ sub generate_deleted_marc_records {
my $records_deleted = {};
open my $fh, '>:encoding(UTF-8)', "$directory/exported_records" or die $!;
if (include_xml_wrapper($as_xml, $record_type)) {
# include XML declaration and root element
print {$fh} '<?xml version="1.0" encoding="UTF-8"?><collection>';
}
print {$fh} $marcxml_open
if include_xml_wrapper($as_xml, $record_type);
my $i = 0;
foreach my $record_number (map { $_->{biblio_auth_number} } @$entries ) {
print "\r$i" unless ($i++ %100 or !$verbose_logging);
@ -633,7 +645,10 @@ sub generate_deleted_marc_records {
$records_deleted->{$record_number} = 1;
}
print "\nRecords exported: $i\n" if ( $verbose_logging );
print {$fh} '</collection>' if (include_xml_wrapper($as_xml, $record_type));
print {$fh} $marcxml_close
if include_xml_wrapper($as_xml, $record_type);
close $fh;
return $records_deleted;