diff options
author | Vladimir Glazounov <vg@openoffice.org> | 2008-08-18 09:49:08 +0000 |
---|---|---|
committer | Vladimir Glazounov <vg@openoffice.org> | 2008-08-18 09:49:08 +0000 |
commit | 6ab4561852e8044475841a4142d5ab24189b87d1 (patch) | |
tree | 7e3ffccb72ac1d9cc350f1ad10fca93c1c8c2934 /solenv/bin | |
parent | b43367edc12c8dc25f074fccf717b67b351ba176 (diff) |
INTEGRATION: CWS native180 (1.11.168); FILE MERGED
2008/08/05 14:00:01 is 1.11.168.1: #i91954# prepare products for msp usage
Diffstat (limited to 'solenv/bin')
-rw-r--r-- | solenv/bin/modules/installer/windows/media.pm | 76 |
1 files changed, 71 insertions, 5 deletions
diff --git a/solenv/bin/modules/installer/windows/media.pm b/solenv/bin/modules/installer/windows/media.pm index bcdce9081f9a..c8b1e03ab5e3 100644 --- a/solenv/bin/modules/installer/windows/media.pm +++ b/solenv/bin/modules/installer/windows/media.pm @@ -8,7 +8,7 @@ # # $RCSfile: media.pm,v $ # -# $Revision: 1.11 $ +# $Revision: 1.12 $ # # This file is part of OpenOffice.org. # @@ -211,6 +211,28 @@ sub get_maximum_filenumber } ################################################################################# +# Setting the last sequence for the cabinet files +################################################################################# + +sub get_last_sequence +{ + my ( $cabfilename, $alludpatelastsequences ) = @_; + + my $sequence = 0; + + if (( $installer::globals::updatedatabase ) && ( exists($alludpatelastsequences->{$cabfilename}) )) + { + $sequence = $alludpatelastsequences->{$cabfilename}; + } + else + { + $sequence = $installer::globals::lastsequence{$cabfilename}; + } + + return $sequence; +} + +################################################################################# # Creating the file Media.idt dynamically # Content: # DiskId LastSequence DiskPrompt Cabinet VolumeLabel Source @@ -219,7 +241,7 @@ sub get_maximum_filenumber sub create_media_table { - my ($filesref, $basedir, $allvariables) = @_; + my ($filesref, $basedir, $allvariables, $alludpatelastsequences, $allupdatediskids) = @_; my @mediatable = (); @@ -238,7 +260,7 @@ sub create_media_table $diskid++; $media{'DiskId'} = get_media_diskid($diskid); - $media{'LastSequence'} = $installer::globals::lastsequence{$cabfile}; + $media{'LastSequence'} = get_last_sequence($cabfile, $alludpatelastsequences); $media{'DiskPrompt'} = get_media_diskprompt(); $media{'Cabinet'} = get_cabfilename($cabfile); $media{'VolumeLabel'} = get_media_volumelabel(); @@ -248,7 +270,46 @@ sub create_media_table . $media{'Cabinet'} . "\t" . $media{'VolumeLabel'} . "\t" . $media{'Source'} . "\n"; push(@mediatable, $oneline); + + # Comparing the disk id with the disk id from update database. Both have to be identical. New files have to be added + # to the new pff cabinet file. And existing cab files must not be removed. + if ( $installer::globals::updatedatabase ) + { + # Comparing lines in new media table with line from media table in udpate database. + if ( exists($allupdatediskids->{$media{'Cabinet'}}) ) + { + if ( $media{'DiskId'} != $allupdatediskids->{$media{'Cabinet'}} ) + { + installer::exiter::exit_program("ERROR: Different DiskIDs for cab file \"$media{'Cabinet'}\".\nCurrent installation set: \"$media{'DiskId'}\", but update database used \"$allupdatediskids->{$media{'Cabinet'}}\".\nWere cabinet files removed or added?", "create_media_table"); + } + } + else + { + my $localinfoline = "Warning: Could not find cabinet file \"$media{'Cabinet'}}\" in update database. This seems to be an new cabinet file!?\n"; + push(@installer::globals::logfileinfo, $localinfoline); + } + } + } + + # one new cabinet file for all files added after the final release + if (( $installer::globals::updatedatabase ) && ( $installer::globals::pfffileexists )) + { + my %media = (); + $diskid++; + + $media{'DiskId'} = get_media_diskid($diskid) + $installer::globals::mergemodulenumber; # Adding mergemodulenumber, because this files are included later + $media{'LastSequence'} = $installer::globals::updatesequencecounter; + $media{'DiskPrompt'} = get_media_diskprompt(); + $media{'Cabinet'} = get_cabfilename($installer::globals::pffcabfilename); + $media{'VolumeLabel'} = get_media_volumelabel(); + $media{'Source'} = get_media_source(); + + my $oneline = $media{'DiskId'} . "\t" . $media{'LastSequence'} . "\t" . $media{'DiskPrompt'} . "\t" + . $media{'Cabinet'} . "\t" . $media{'VolumeLabel'} . "\t" . $media{'Source'} . "\n"; + + push(@mediatable, $oneline); } + } elsif ( $installer::globals::cab_file_per_component ) { @@ -299,6 +360,9 @@ sub create_media_table my $cabfull = 0; my $counter = 0; + # Sorting of files collector files required ! + # Attention: The order in the cab file is not guaranteed (especially in udpate process) + for ( my $i = 0; $i <= $#{$filesref}; $i++ ) { if (( $counter >= $maxfilenumber ) || ( $i == $#{$filesref} )) { $cabfull = 1; } @@ -325,7 +389,8 @@ sub create_media_table $cabfilenumber++; $media{'DiskId'} = get_media_diskid($cabfilenumber); - $media{'LastSequence'} = get_media_lastsequence($onefile); + # $media{'LastSequence'} = get_media_lastsequence($onefile); + $media{'LastSequence'} = $i + 1; # This should be correct, also for unsorted files collectors $media{'DiskPrompt'} = get_media_diskprompt(); $media{'Cabinet'} = generate_cab_filename_for_some_cabs($allvariables, $cabfilenumber); $media{'VolumeLabel'} = get_media_volumelabel(); @@ -359,7 +424,8 @@ sub create_media_table my $maximumfile = $#{$filesref}; $media{'DiskId'} = get_media_diskid($diskid); - $media{'LastSequence'} = ${$filesref}[$maximumfile]->{'sequencenumber'}; # sequence number of the last file + # $media{'LastSequence'} = ${$filesref}[$maximumfile]->{'sequencenumber'}; # sequence number of the last file + $media{'LastSequence'} = $maximumfile + 1; # This works also for unsorted file collector $media{'DiskPrompt'} = get_media_diskprompt(); $media{'Cabinet'} = generate_cab_filename($allvariables); $media{'VolumeLabel'} = get_media_volumelabel(); |