| Filename | /cygdrive/c/lo/libo-master/instsetoo_native/util/C:/lo/libo-master/solenv/bin/modules/installer/systemactions.pm |
| Statements | Executed 578543 statements in 26.8s |
| Calls | P | F | Exclusive Time |
Inclusive Time |
Subroutine |
|---|---|---|---|---|---|
| 25568 | 5 | 1 | 6.80s | 6.80s | installer::systemactions::CORE:ftfile (opcode) |
| 29363 | 8 | 1 | 4.72s | 4.72s | installer::systemactions::CORE:ftdir (opcode) |
| 13 | 1 | 1 | 4.54s | 4.54s | installer::systemactions::CORE:backtick (opcode) |
| 8669 | 1 | 1 | 1.85s | 1.85s | installer::systemactions::CORE:unlink (opcode) |
| 7903 | 1 | 1 | 1.57s | 1.57s | installer::systemactions::CORE:fteexec (opcode) |
| 8868 | 3 | 1 | 1.33s | 1.33s | installer::systemactions::CORE:chmod (opcode) |
| 1914 | 1 | 1 | 1.28s | 1.28s | installer::systemactions::CORE:rmdir (opcode) |
| 529 | 1 | 1 | 823ms | 823ms | installer::systemactions::CORE:rename (opcode) |
| 218 | 2 | 1 | 809ms | 11.6s | installer::systemactions::copy_directory_with_fileextension |
| 17561 | 7 | 1 | 763ms | 763ms | installer::systemactions::CORE:readdir (opcode) |
| 7903 | 12 | 6 | 360ms | 21.8s | installer::systemactions::copy_one_file |
| 816 | 1 | 1 | 333ms | 333ms | installer::systemactions::CORE:mkdir (opcode) |
| 1914 | 4 | 3 | 320ms | 7.38s | installer::systemactions::remove_complete_directory (recurses: max depth 13, inclusive time 64.6s) |
| 3066 | 6 | 1 | 284ms | 284ms | installer::systemactions::CORE:open_dir (opcode) |
| 497 | 2 | 2 | 236ms | 2.64s | installer::systemactions::read_full_directory (recurses: max depth 7, inclusive time 1.64s) |
| 1911 | 1 | 1 | 151ms | 151ms | installer::systemactions::CORE:ftlink (opcode) |
| 109690 | 7 | 1 | 130ms | 130ms | installer::systemactions::CORE:match (opcode) |
| 111164 | 15 | 1 | 95.5ms | 95.5ms | installer::systemactions::CORE:regcomp (opcode) |
| 218 | 2 | 1 | 86.8ms | 11.5s | installer::systemactions::copy_directory |
| 3066 | 6 | 1 | 66.7ms | 66.7ms | installer::systemactions::CORE:closedir (opcode) |
| 110 | 2 | 2 | 55.8ms | 111ms | installer::systemactions::find_file_with_file_extension |
| 109 | 1 | 1 | 51.0ms | 777ms | installer::systemactions::rename_files_with_fileextension |
| 965 | 2 | 2 | 29.2ms | 693ms | installer::systemactions::create_directory_with_privileges |
| 3034 | 12 | 1 | 20.5ms | 20.5ms | installer::systemactions::CORE:subst (opcode) |
| 529 | 24 | 4 | 10.7ms | 834ms | installer::systemactions::rename_one_file |
| 964 | 21 | 10 | 10.4ms | 703ms | installer::systemactions::create_directory |
| 14 | 2 | 2 | 6.92ms | 11.9ms | installer::systemactions::get_number_of_langs |
| 20 | 14 | 8 | 2.81ms | 4.60s | installer::systemactions::create_directories |
| 110 | 1 | 1 | 2.55ms | 2.55ms | installer::systemactions::CORE:sort (opcode) |
| 1 | 1 | 1 | 2.19ms | 2.61ms | installer::systemactions::BEGIN@32 |
| 1 | 1 | 1 | 1.04ms | 1.36ms | installer::systemactions::BEGIN@36 |
| 1 | 1 | 1 | 1.03ms | 1.35ms | installer::systemactions::BEGIN@35 |
| 1 | 1 | 1 | 373µs | 456µs | installer::systemactions::BEGIN@30 |
| 1 | 1 | 1 | 72µs | 90.5ms | installer::systemactions::rename_string_in_directory |
| 1 | 1 | 1 | 51µs | 1.62ms | installer::systemactions::create_pid_directory |
| 1 | 1 | 1 | 41µs | 1.11ms | installer::systemactions::create_directory_next_to_directory |
| 1 | 1 | 1 | 27µs | 136ms | installer::systemactions::rename_directory |
| 1 | 1 | 1 | 21µs | 72µs | installer::systemactions::BEGIN@31 |
| 1 | 1 | 1 | 16µs | 20µs | installer::systemactions::BEGIN@33 |
| 1 | 1 | 1 | 13µs | 15µs | installer::systemactions::BEGIN@34 |
| 0 | 0 | 0 | 0s | 0s | installer::systemactions::copy_complete_directory |
| 0 | 0 | 0 | 0s | 0s | installer::systemactions::create_directory_structure |
| 0 | 0 | 0 | 0s | 0s | installer::systemactions::create_unique_directory |
| 0 | 0 | 0 | 0s | 0s | installer::systemactions::find_new_content_in_directory |
| 0 | 0 | 0 | 0s | 0s | installer::systemactions::get_all_directories |
| 0 | 0 | 0 | 0s | 0s | installer::systemactions::get_all_directories_without_path |
| 0 | 0 | 0 | 0s | 0s | installer::systemactions::get_directoryname |
| 0 | 0 | 0 | 0s | 0s | installer::systemactions::hardlink_complete_directory |
| 0 | 0 | 0 | 0s | 0s | installer::systemactions::hardlink_one_file |
| 0 | 0 | 0 | 0s | 0s | installer::systemactions::is_empty_dir |
| 0 | 0 | 0 | 0s | 0s | installer::systemactions::make_numbered_dir |
| 0 | 0 | 0 | 0s | 0s | installer::systemactions::read_complete_directory |
| 0 | 0 | 0 | 0s | 0s | installer::systemactions::read_directory |
| 0 | 0 | 0 | 0s | 0s | installer::systemactions::remove_empty_dirs_in_folder |
| 0 | 0 | 0 | 0s | 0s | installer::systemactions::softlink_complete_directory |
| 0 | 0 | 0 | 0s | 0s | installer::systemactions::softlink_one_file |
| 0 | 0 | 0 | 0s | 0s | installer::systemactions::try_to_create_directory |
| Line | State ments |
Time on line |
Calls | Time in subs |
Code |
|---|---|---|---|---|---|
| 1 | #************************************************************************* | ||||
| 2 | # | ||||
| 3 | # DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. | ||||
| 4 | # | ||||
| 5 | # Copyright 2000, 2010 Oracle and/or its affiliates. | ||||
| 6 | # | ||||
| 7 | # OpenOffice.org - a multi-platform office productivity suite | ||||
| 8 | # | ||||
| 9 | # This file is part of OpenOffice.org. | ||||
| 10 | # | ||||
| 11 | # OpenOffice.org is free software: you can redistribute it and/or modify | ||||
| 12 | # it under the terms of the GNU Lesser General Public License version 3 | ||||
| 13 | # only, as published by the Free Software Foundation. | ||||
| 14 | # | ||||
| 15 | # OpenOffice.org is distributed in the hope that it will be useful, | ||||
| 16 | # but WITHOUT ANY WARRANTY; without even the implied warranty of | ||||
| 17 | # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||||
| 18 | # GNU Lesser General Public License version 3 for more details | ||||
| 19 | # (a copy is included in the LICENSE file that accompanied this code). | ||||
| 20 | # | ||||
| 21 | # You should have received a copy of the GNU Lesser General Public License | ||||
| 22 | # version 3 along with OpenOffice.org. If not, see | ||||
| 23 | # <http://www.openoffice.org/license.html> | ||||
| 24 | # for a copy of the LGPLv3 License. | ||||
| 25 | # | ||||
| 26 | #************************************************************************* | ||||
| 27 | |||||
| 28 | package installer::systemactions; | ||||
| 29 | |||||
| 30 | 2 | 63µs | 2 | 540µs | # spent 456µs (373+84) within installer::systemactions::BEGIN@30 which was called:
# once (373µs+84µs) by installer::exiter::BEGIN@36 at line 30 # spent 456µs making 1 call to installer::systemactions::BEGIN@30
# spent 84µs making 1 call to Exporter::import |
| 31 | 2 | 62µs | 2 | 123µs | # spent 72µs (21+51) within installer::systemactions::BEGIN@31 which was called:
# once (21µs+51µs) by installer::exiter::BEGIN@36 at line 31 # spent 72µs making 1 call to installer::systemactions::BEGIN@31
# spent 51µs making 1 call to Exporter::import |
| 32 | 2 | 1.04ms | 2 | 2.62ms | # spent 2.61ms (2.19+427µs) within installer::systemactions::BEGIN@32 which was called:
# once (2.19ms+427µs) by installer::exiter::BEGIN@36 at line 32 # spent 2.61ms making 1 call to installer::systemactions::BEGIN@32
# spent 3µs making 1 call to UNIVERSAL::import |
| 33 | 2 | 57µs | 2 | 24µs | # spent 20µs (16+4) within installer::systemactions::BEGIN@33 which was called:
# once (16µs+4µs) by installer::exiter::BEGIN@36 at line 33 # spent 20µs making 1 call to installer::systemactions::BEGIN@33
# spent 4µs making 1 call to UNIVERSAL::import |
| 34 | 2 | 51µs | 2 | 17µs | # spent 15µs (13+2) within installer::systemactions::BEGIN@34 which was called:
# once (13µs+2µs) by installer::exiter::BEGIN@36 at line 34 # spent 15µs making 1 call to installer::systemactions::BEGIN@34
# spent 2µs making 1 call to UNIVERSAL::import |
| 35 | 2 | 998µs | 2 | 1.36ms | # spent 1.35ms (1.03+324µs) within installer::systemactions::BEGIN@35 which was called:
# once (1.03ms+324µs) by installer::exiter::BEGIN@36 at line 35 # spent 1.35ms making 1 call to installer::systemactions::BEGIN@35
# spent 3µs making 1 call to UNIVERSAL::import |
| 36 | 2 | 10.9ms | 2 | 1.37ms | # spent 1.36ms (1.04+324µs) within installer::systemactions::BEGIN@36 which was called:
# once (1.04ms+324µs) by installer::exiter::BEGIN@36 at line 36 # spent 1.36ms making 1 call to installer::systemactions::BEGIN@36
# spent 3µs making 1 call to UNIVERSAL::import |
| 37 | |||||
| 38 | ###################################################### | ||||
| 39 | # Creating a new direcotory | ||||
| 40 | ###################################################### | ||||
| 41 | |||||
| 42 | sub create_directory | ||||
| 43 | # spent 703ms (10.4+693) within installer::systemactions::create_directory which was called 964 times, avg 729µs/call:
# 210 times (1.60ms+190ms) by installer::archivefiles::resolving_archive_flag at line 250 of /cygdrive/c/lo/libo-master/instsetoo_native/util/C:/lo/libo-master/solenv/bin/modules/installer/archivefiles.pm, avg 913µs/call
# 210 times (2.27ms+133ms) by installer::archivefiles::resolving_archive_flag at line 243 of /cygdrive/c/lo/libo-master/instsetoo_native/util/C:/lo/libo-master/solenv/bin/modules/installer/archivefiles.pm, avg 644µs/call
# 110 times (951µs+75.1ms) by installer::scpzipfiles::resolving_scpzip_replace_flag at line 102 of /cygdrive/c/lo/libo-master/instsetoo_native/util/C:/lo/libo-master/solenv/bin/modules/installer/scpzipfiles.pm, avg 691µs/call
# 109 times (1.73ms+80.1ms) by installer::run at line 1557 of /cygdrive/c/lo/libo-master/instsetoo_native/util/C:/lo/libo-master/solenv/bin/modules/installer.pm, avg 751µs/call
# 109 times (1.37ms+73.0ms) by installer::windows::idtglobal::prepare_language_idt_directory at line 761 of /cygdrive/c/lo/libo-master/instsetoo_native/util/C:/lo/libo-master/solenv/bin/modules/installer/windows/idtglobal.pm, avg 682µs/call
# 109 times (1.25ms+72.4ms) by installer::windows::idtglobal::prepare_language_idt_directory at line 782 of /cygdrive/c/lo/libo-master/instsetoo_native/util/C:/lo/libo-master/solenv/bin/modules/installer/windows/idtglobal.pm, avg 676µs/call
# 20 times (156µs+13.8ms) by installer::systemactions::create_directories at line 248, avg 699µs/call
# 20 times (225µs+9.34ms) by installer::systemactions::create_directories at line 236, avg 479µs/call
# 20 times (152µs+5.74ms) by installer::systemactions::create_directories at line 245, avg 294µs/call
# 13 times (322µs+14.1ms) by installer::systemactions::create_directories at line 276, avg 1.11ms/call
# 9 times (96µs+2.79ms) by installer::scppatchsoname::resolving_patchsoname_flag at line 169 of /cygdrive/c/lo/libo-master/instsetoo_native/util/C:/lo/libo-master/solenv/bin/modules/installer/scppatchsoname.pm, avg 321µs/call
# 8 times (107µs+6.60ms) by installer::profiles::create_profiles at line 168 of /cygdrive/c/lo/libo-master/instsetoo_native/util/C:/lo/libo-master/solenv/bin/modules/installer/profiles.pm, avg 839µs/call
# 5 times (81µs+4.97ms) by installer::windows::mergemodule::merge_mergemodules_into_msi_database at line 94 of /cygdrive/c/lo/libo-master/instsetoo_native/util/C:/lo/libo-master/solenv/bin/modules/installer/windows/mergemodule.pm, avg 1.01ms/call
# 5 times (40µs+4.62ms) by installer::windows::mergemodule::change_file_table at line 1120 of /cygdrive/c/lo/libo-master/instsetoo_native/util/C:/lo/libo-master/solenv/bin/modules/installer/windows/mergemodule.pm, avg 933µs/call
# once (19µs+1.30ms) by installer::run at line 553 of /cygdrive/c/lo/libo-master/instsetoo_native/util/C:/lo/libo-master/solenv/bin/modules/installer.pm
# once (13µs+1.30ms) by installer::systemactions::create_pid_directory at line 1234
# once (9µs+975µs) by installer::parameter::setglobalvariables at line 395 of /cygdrive/c/lo/libo-master/instsetoo_native/util/C:/lo/libo-master/solenv/bin/modules/installer/parameter.pm
# once (8µs+967µs) by installer::systemactions::create_directory_next_to_directory at line 908
# once (11µs+936µs) by installer::run at line 1467 of /cygdrive/c/lo/libo-master/instsetoo_native/util/C:/lo/libo-master/solenv/bin/modules/installer.pm
# once (14µs+911µs) by installer::run at line 1708 of /cygdrive/c/lo/libo-master/instsetoo_native/util/C:/lo/libo-master/solenv/bin/modules/installer.pm
# once (10µs+654µs) by installer::worker::remove_old_installation_sets at line 149 of /cygdrive/c/lo/libo-master/instsetoo_native/util/C:/lo/libo-master/solenv/bin/modules/installer/worker.pm | ||||
| 44 | 1928 | 8.58ms | my ($directory) = @_; | ||
| 45 | |||||
| 46 | 964 | 693ms | create_directory_with_privileges( $directory, "755" ); # spent 693ms making 964 calls to installer::systemactions::create_directory_with_privileges, avg 718µs/call | ||
| 47 | } | ||||
| 48 | |||||
| 49 | ###################################################### | ||||
| 50 | # Creating a new direcotory with defined privileges | ||||
| 51 | ###################################################### | ||||
| 52 | |||||
| 53 | sub create_directory_with_privileges | ||||
| 54 | # spent 693ms (29.2+664) within installer::systemactions::create_directory_with_privileges which was called 965 times, avg 718µs/call:
# 964 times (29.2ms+663ms) by installer::systemactions::create_directory at line 46, avg 718µs/call
# once (51µs+520µs) by installer::parameter::setglobalvariables at line 380 of /cygdrive/c/lo/libo-master/instsetoo_native/util/C:/lo/libo-master/solenv/bin/modules/installer/parameter.pm | ||||
| 55 | 4825 | 179ms | my ($directory, $privileges) = @_; | ||
| 56 | |||||
| 57 | my $returnvalue = 1; | ||||
| 58 | my $infoline = ""; | ||||
| 59 | my $localprivileges = oct("0".$privileges); # changes "777" to 0777 | ||||
| 60 | |||||
| 61 | 2079 | 372ms | 965 | 163ms | if (!(-d $directory)) # spent 163ms making 965 calls to installer::systemactions::CORE:ftdir, avg 169µs/call |
| 62 | { | ||||
| 63 | 816 | 333ms | $returnvalue = mkdir($directory, $localprivileges); # spent 333ms making 816 calls to installer::systemactions::CORE:mkdir, avg 408µs/call | ||
| 64 | |||||
| 65 | 2448 | 144ms | if ($returnvalue) | ||
| 66 | { | ||||
| 67 | $infoline = "\nCreated directory: $directory\n"; | ||||
| 68 | push(@installer::globals::logfileinfo, $infoline); | ||||
| 69 | |||||
| 70 | 816 | 136ms | chmod $localprivileges, $directory; # spent 136ms making 816 calls to installer::systemactions::CORE:chmod, avg 167µs/call | ||
| 71 | } | ||||
| 72 | else | ||||
| 73 | { | ||||
| 74 | # New solution in parallel packing: It is possible, that the directory now exists, although it | ||||
| 75 | # was not created in this process. There is only an important error, if the directory does not | ||||
| 76 | # exist now. | ||||
| 77 | |||||
| 78 | $infoline = "\nDid not succeed in creating directory: \"$directory\". Further attempts will follow.\n"; | ||||
| 79 | push(@installer::globals::logfileinfo, $infoline); | ||||
| 80 | |||||
| 81 | if (!(-d $directory)) | ||||
| 82 | { | ||||
| 83 | # Problem with parallel packaging? -> Try a little harder, before exiting. | ||||
| 84 | # Did someone else remove the parent directory in the meantime? | ||||
| 85 | my $parentdir = $directory; | ||||
| 86 | installer::pathanalyzer::get_path_from_fullqualifiedname(\$parentdir); | ||||
| 87 | if (!(-d $parentdir)) | ||||
| 88 | { | ||||
| 89 | $returnvalue = mkdir($directory, $localprivileges); | ||||
| 90 | |||||
| 91 | if ($returnvalue) | ||||
| 92 | { | ||||
| 93 | $infoline = "\nAttention: Successfully created parent directory (should already be created before): $parentdir\n"; | ||||
| 94 | push(@installer::globals::logfileinfo, $infoline); | ||||
| 95 | |||||
| 96 | chmod $localprivileges, $parentdir; | ||||
| 97 | } | ||||
| 98 | else | ||||
| 99 | { | ||||
| 100 | $infoline = "\nError: \"$directory\" could not be created. Even the parent directory \"$parentdir\" does not exist and could not be created.\n"; | ||||
| 101 | push(@installer::globals::logfileinfo, $infoline); | ||||
| 102 | if ( -d $parentdir ) | ||||
| 103 | { | ||||
| 104 | $infoline = "\nAttention: Finally the parent directory \"$parentdir\" exists, but I could not create it.\n"; | ||||
| 105 | push(@installer::globals::logfileinfo, $infoline); | ||||
| 106 | } | ||||
| 107 | else | ||||
| 108 | { | ||||
| 109 | # Now it is time to exit, even the parent could not be created. | ||||
| 110 | installer::exiter::exit_program("ERROR: Could not create parent directory \"$parentdir\"", "create_directory_with_privileges"); | ||||
| 111 | } | ||||
| 112 | } | ||||
| 113 | } | ||||
| 114 | |||||
| 115 | # At this point we have to assume, that the parent directory exist. | ||||
| 116 | # Trying once more to create the desired directory | ||||
| 117 | |||||
| 118 | $returnvalue = mkdir($directory, $localprivileges); | ||||
| 119 | |||||
| 120 | if ($returnvalue) | ||||
| 121 | { | ||||
| 122 | $infoline = "\nAttention: Created directory \"$directory\" in the second try.\n"; | ||||
| 123 | push(@installer::globals::logfileinfo, $infoline); | ||||
| 124 | |||||
| 125 | chmod $localprivileges, $directory; | ||||
| 126 | } | ||||
| 127 | else | ||||
| 128 | { | ||||
| 129 | if ( -d $directory ) | ||||
| 130 | { | ||||
| 131 | $infoline = "\nAttention: Finally the directory \"$directory\" exists, but I could not create it.\n"; | ||||
| 132 | push(@installer::globals::logfileinfo, $infoline); | ||||
| 133 | } | ||||
| 134 | else | ||||
| 135 | { | ||||
| 136 | # It is time to exit, even the second try failed. | ||||
| 137 | installer::exiter::exit_program("ERROR: Failed to create the directory: $directory", "create_directory_with_privileges"); | ||||
| 138 | } | ||||
| 139 | } | ||||
| 140 | } | ||||
| 141 | else | ||||
| 142 | { | ||||
| 143 | $infoline = "\nAnother process created this directory in exactly this moment :-) : $directory\n"; | ||||
| 144 | push(@installer::globals::logfileinfo, $infoline); | ||||
| 145 | } | ||||
| 146 | } | ||||
| 147 | } | ||||
| 148 | else | ||||
| 149 | { | ||||
| 150 | $infoline = "\nAlready existing directory, did not create: $directory\n"; | ||||
| 151 | push(@installer::globals::logfileinfo, $infoline); | ||||
| 152 | |||||
| 153 | 149 | 31.5ms | chmod $localprivileges, $directory; # spent 31.5ms making 149 calls to installer::systemactions::CORE:chmod, avg 211µs/call | ||
| 154 | } | ||||
| 155 | } | ||||
| 156 | |||||
| 157 | ####################################################################### | ||||
| 158 | # Calculating the number of languages in the string | ||||
| 159 | ####################################################################### | ||||
| 160 | |||||
| 161 | sub get_number_of_langs | ||||
| 162 | # spent 11.9ms (6.92+4.94) within installer::systemactions::get_number_of_langs which was called 14 times, avg 847µs/call:
# 13 times (6.44ms+4.60ms) by installer::systemactions::create_directories at line 269, avg 849µs/call
# once (484µs+343µs) by installer::run at line 542 of /cygdrive/c/lo/libo-master/instsetoo_native/util/C:/lo/libo-master/solenv/bin/modules/installer.pm | ||||
| 163 | 70 | 358µs | my ($languagestring) = @_; | ||
| 164 | |||||
| 165 | my $number = 1; | ||||
| 166 | |||||
| 167 | my $workstring = $languagestring; | ||||
| 168 | |||||
| 169 | 14 | 130µs | while ( $workstring =~ /^\s*(.*)_(.*?)\s*$/ ) # spent 130µs making 14 calls to installer::systemactions::CORE:match, avg 9µs/call | ||
| 170 | { | ||||
| 171 | 3024 | 11.5ms | $workstring = $1; | ||
| 172 | 1512 | 4.81ms | $number++; # spent 4.81ms making 1512 calls to installer::systemactions::CORE:match, avg 3µs/call | ||
| 173 | } | ||||
| 174 | |||||
| 175 | return $number; | ||||
| 176 | } | ||||
| 177 | |||||
| 178 | ####################################################################### | ||||
| 179 | # Creating the directories, in which files are generated or unzipped | ||||
| 180 | ####################################################################### | ||||
| 181 | |||||
| 182 | sub create_directories | ||||
| 183 | # spent 4.60s (2.81ms+4.60) within installer::systemactions::create_directories which was called 20 times, avg 230ms/call:
# 5 times (481µs+6.85ms) by installer::windows::mergemodule::change_file_table at line 1113 of /cygdrive/c/lo/libo-master/instsetoo_native/util/C:/lo/libo-master/solenv/bin/modules/installer/windows/mergemodule.pm, avg 1.47ms/call
# 2 times (306µs+573ms) by installer::scppatchsoname::resolving_patchsoname_flag at line 145 of /cygdrive/c/lo/libo-master/instsetoo_native/util/C:/lo/libo-master/solenv/bin/modules/installer/scppatchsoname.pm, avg 287ms/call
# 2 times (291µs+558ms) by installer::scpzipfiles::resolving_scpzip_replace_flag at line 79 of /cygdrive/c/lo/libo-master/instsetoo_native/util/C:/lo/libo-master/solenv/bin/modules/installer/scpzipfiles.pm, avg 279ms/call
# once (159µs+502ms) by installer::run at line 1731 of /cygdrive/c/lo/libo-master/instsetoo_native/util/C:/lo/libo-master/solenv/bin/modules/installer.pm
# once (345µs+481ms) by installer::archivefiles::resolving_archive_flag at line 156 of /cygdrive/c/lo/libo-master/instsetoo_native/util/C:/lo/libo-master/solenv/bin/modules/installer/archivefiles.pm
# once (152µs+465ms) by installer::windows::mergemodule::merge_mergemodules_into_msi_database at line 81 of /cygdrive/c/lo/libo-master/instsetoo_native/util/C:/lo/libo-master/solenv/bin/modules/installer/windows/mergemodule.pm
# once (164µs+410ms) by installer::worker::create_installation_directory at line 164 of /cygdrive/c/lo/libo-master/instsetoo_native/util/C:/lo/libo-master/solenv/bin/modules/installer/worker.pm
# once (155µs+367ms) by installer::run at line 1446 of /cygdrive/c/lo/libo-master/instsetoo_native/util/C:/lo/libo-master/solenv/bin/modules/installer.pm
# once (147µs+361ms) by installer::run at line 1447 of /cygdrive/c/lo/libo-master/instsetoo_native/util/C:/lo/libo-master/solenv/bin/modules/installer.pm
# once (148µs+297ms) by installer::substfilenamefiles::resolving_subst_filename_flag at line 44 of /cygdrive/c/lo/libo-master/instsetoo_native/util/C:/lo/libo-master/solenv/bin/modules/installer/substfilenamefiles.pm
# once (150µs+291ms) by installer::worker::resolving_hidden_flag at line 1311 of /cygdrive/c/lo/libo-master/instsetoo_native/util/C:/lo/libo-master/solenv/bin/modules/installer/worker.pm
# once (139µs+280ms) by installer::profiles::create_profiles at line 148 of /cygdrive/c/lo/libo-master/instsetoo_native/util/C:/lo/libo-master/solenv/bin/modules/installer/profiles.pm
# once (102µs+2.12ms) by installer::run at line 133 of /cygdrive/c/lo/libo-master/instsetoo_native/util/C:/lo/libo-master/solenv/bin/modules/installer.pm
# once (72µs+1.16ms) by installer::run at line 249 of /cygdrive/c/lo/libo-master/instsetoo_native/util/C:/lo/libo-master/solenv/bin/modules/installer.pm | ||||
| 184 | 200 | 1.32ms | my ($newdirectory, $languagesref) =@_; | ||
| 185 | |||||
| 186 | 40 | 262µs | $installer::globals::unpackpath =~ s/\Q$installer::globals::separator\E\s*$//; # removing ending slashes and backslashes # spent 180µs making 20 calls to installer::systemactions::CORE:subst, avg 9µs/call
# spent 82µs making 20 calls to installer::systemactions::CORE:regcomp, avg 4µs/call | ||
| 187 | |||||
| 188 | my $path = ""; | ||||
| 189 | |||||
| 190 | 46 | 153µs | 14 | 45µs | if (( $newdirectory eq "uno" ) || ( $newdirectory eq "zip" ) || ( $newdirectory eq "cab" ) || ( $newdirectory =~ /rdb\s*$/i )) # special handling for zip files, cab files and services file because of performance reasons # spent 45µs making 14 calls to installer::systemactions::CORE:match, avg 3µs/call |
| 191 | { | ||||
| 192 | if ( $installer::globals::temppathdefined ) { $path = $installer::globals::temppath; } | ||||
| 193 | else { $path = $installer::globals::unpackpath; } | ||||
| 194 | 12 | 53µs | $path =~ s/\Q$installer::globals::separator\E\s*$//; # removing ending slashes and backslashes # spent 35µs making 6 calls to installer::systemactions::CORE:regcomp, avg 6µs/call
# spent 18µs making 6 calls to installer::systemactions::CORE:subst, avg 3µs/call | ||
| 195 | $path = $path . $installer::globals::separator; | ||||
| 196 | } | ||||
| 197 | else | ||||
| 198 | { | ||||
| 199 | $path = $installer::globals::unpackpath . $installer::globals::separator; | ||||
| 200 | |||||
| 201 | # special handling, if LOCALINSTALLDIR is set | ||||
| 202 | if (( $installer::globals::localinstalldirset ) && ( $newdirectory eq "install" )) | ||||
| 203 | { | ||||
| 204 | $installer::globals::localinstalldir =~ s/\Q$installer::globals::separator\E\s*$//; | ||||
| 205 | $path = $installer::globals::localinstalldir . $installer::globals::separator; | ||||
| 206 | } | ||||
| 207 | } | ||||
| 208 | |||||
| 209 | $infoline = "create_directories: Using $path for $newdirectory !\n"; | ||||
| 210 | push( @installer::globals::logfileinfo, $infoline); | ||||
| 211 | |||||
| 212 | 260 | 637µs | if ($newdirectory eq "unzip" ) # special handling for common directory | ||
| 213 | { | ||||
| 214 | $path = $path . ".." . $installer::globals::separator . "common" . $installer::globals::productextension . $installer::globals::separator; | ||||
| 215 | create_directory($path); | ||||
| 216 | |||||
| 217 | $path = $path . $newdirectory . $installer::globals::separator; | ||||
| 218 | create_directory($path); | ||||
| 219 | } | ||||
| 220 | else | ||||
| 221 | { | ||||
| 222 | my $localproductname = $installer::globals::product; | ||||
| 223 | my $localproductsubdir = ""; | ||||
| 224 | |||||
| 225 | 20 | 29µs | if ( $installer::globals::product =~ /^\s*(.+?)\_\_(.+?)\s*$/ ) # spent 29µs making 20 calls to installer::systemactions::CORE:match, avg 1µs/call | ||
| 226 | { | ||||
| 227 | $localproductname = $1; | ||||
| 228 | $localproductsubdir = $2; | ||||
| 229 | } | ||||
| 230 | |||||
| 231 | 20 | 30µs | if ( $installer::globals::languagepack ) { $path = $path . $localproductname . "_languagepack" . $installer::globals::separator; } | ||
| 232 | elsif ( $installer::globals::helppack ) { $path = $path . $localproductname . "_helppack" . $installer::globals::separator; } | ||||
| 233 | elsif ( $installer::globals::patch ) { $path = $path . $localproductname . "_patch" . $installer::globals::separator; } | ||||
| 234 | else { $path = $path . $localproductname . $installer::globals::separator; } | ||||
| 235 | |||||
| 236 | 20 | 9.57ms | create_directory($path); # spent 9.57ms making 20 calls to installer::systemactions::create_directory, avg 479µs/call | ||
| 237 | |||||
| 238 | if ( $localproductsubdir ) | ||||
| 239 | { | ||||
| 240 | $path = $path . $localproductsubdir . $installer::globals::separator; | ||||
| 241 | create_directory($path); | ||||
| 242 | } | ||||
| 243 | |||||
| 244 | $path = $path . $installer::globals::installertypedir . $installer::globals::separator; | ||||
| 245 | 20 | 5.89ms | create_directory($path); # spent 5.89ms making 20 calls to installer::systemactions::create_directory, avg 294µs/call | ||
| 246 | |||||
| 247 | $path = $path . $newdirectory . $installer::globals::separator; | ||||
| 248 | 20 | 14.0ms | create_directory($path); # spent 14.0ms making 20 calls to installer::systemactions::create_directory, avg 699µs/call | ||
| 249 | |||||
| 250 | my $locallanguagesref = ""; | ||||
| 251 | |||||
| 252 | if ( $$languagesref ) { $locallanguagesref = $$languagesref; } | ||||
| 253 | |||||
| 254 | 20 | 30µs | if ($newdirectory eq "install" && $installer::globals::ooodownloadfilename ne "" ) | ||
| 255 | { | ||||
| 256 | # put packages into versioned path; needed only on linux (fdo#30837) | ||||
| 257 | $path = $path . "$installer::globals::ooodownloadfilename" . $installer::globals::separator; | ||||
| 258 | create_directory($path); | ||||
| 259 | } | ||||
| 260 | else | ||||
| 261 | { | ||||
| 262 | 52 | 295µs | if ($locallanguagesref ne "") # this will be a path like "01_49", for Profiles and ConfigurationFiles, idt-Files | ||
| 263 | { | ||||
| 264 | |||||
| 265 | my $languagestring = $$languagesref; | ||||
| 266 | |||||
| 267 | 52 | 4.54s | if (length($languagestring) > $installer::globals::max_lang_length ) | ||
| 268 | { | ||||
| 269 | 13 | 11.0ms | my $number_of_languages = get_number_of_langs($languagestring); # spent 11.0ms making 13 calls to installer::systemactions::get_number_of_langs, avg 849µs/call | ||
| 270 | 13 | 4.54s | chomp(my $shorter = `echo $languagestring | md5sum | sed -e "s/ .*//g"`); # spent 4.54s making 13 calls to installer::systemactions::CORE:backtick, avg 349ms/call | ||
| 271 | my $id = substr($shorter, 0, 8); # taking only the first 8 digits | ||||
| 272 | $languagestring = "lang_" . $number_of_languages . "_id_" . $id; | ||||
| 273 | } | ||||
| 274 | |||||
| 275 | $path = $path . $languagestring . $installer::globals::separator; | ||||
| 276 | 13 | 14.4ms | create_directory($path); # spent 14.4ms making 13 calls to installer::systemactions::create_directory, avg 1.11ms/call | ||
| 277 | } | ||||
| 278 | } | ||||
| 279 | } | ||||
| 280 | |||||
| 281 | 20 | 776µs | installer::remover::remove_ending_pathseparator(\$path); # spent 776µs making 20 calls to installer::remover::remove_ending_pathseparator, avg 39µs/call | ||
| 282 | |||||
| 283 | 20 | 485µs | $path = installer::converter::make_path_conform($path); # spent 485µs making 20 calls to installer::converter::make_path_conform, avg 24µs/call | ||
| 284 | |||||
| 285 | return $path; | ||||
| 286 | } | ||||
| 287 | |||||
| 288 | ######################## | ||||
| 289 | # Copying one file | ||||
| 290 | ######################## | ||||
| 291 | |||||
| 292 | sub copy_one_file | ||||
| 293 | # spent 21.8s (360ms+21.4) within installer::systemactions::copy_one_file which was called 7903 times, avg 2.75ms/call:
# 4687 times (209ms+10.3s) by installer::systemactions::copy_directory at line 454, avg 2.24ms/call
# 1853 times (90.9ms+6.69s) by installer::systemactions::copy_directory_with_fileextension at line 665, avg 3.66ms/call
# 981 times (40.5ms+2.29s) by installer::windows::idtglobal::prepare_language_idt_directory at line 806 of /cygdrive/c/lo/libo-master/instsetoo_native/util/C:/lo/libo-master/solenv/bin/modules/installer/windows/idtglobal.pm, avg 2.37ms/call
# 110 times (4.60ms+248ms) by installer::scpzipfiles::resolving_scpzip_replace_flag at line 127 of /cygdrive/c/lo/libo-master/instsetoo_native/util/C:/lo/libo-master/solenv/bin/modules/installer/scpzipfiles.pm, avg 2.29ms/call
# 109 times (8.21ms+1.30s) by installer::run at line 1689 of /cygdrive/c/lo/libo-master/instsetoo_native/util/C:/lo/libo-master/solenv/bin/modules/installer.pm, avg 12.0ms/call
# 109 times (4.38ms+240ms) by installer::windows::idtglobal::prepare_language_idt_directory at line 795 of /cygdrive/c/lo/libo-master/instsetoo_native/util/C:/lo/libo-master/solenv/bin/modules/installer/windows/idtglobal.pm, avg 2.24ms/call
# 33 times (1.56ms+87.4ms) by installer::windows::mergemodule::change_file_table at line 1237 of /cygdrive/c/lo/libo-master/instsetoo_native/util/C:/lo/libo-master/solenv/bin/modules/installer/windows/mergemodule.pm, avg 2.69ms/call
# 9 times (424µs+20.3ms) by installer::scppatchsoname::resolving_patchsoname_flag at line 178 of /cygdrive/c/lo/libo-master/instsetoo_native/util/C:/lo/libo-master/solenv/bin/modules/installer/scppatchsoname.pm, avg 2.31ms/call
# 5 times (361µs+111ms) by installer::windows::mergemodule::merge_mergemodules_into_msi_database at line 362 of /cygdrive/c/lo/libo-master/instsetoo_native/util/C:/lo/libo-master/solenv/bin/modules/installer/windows/mergemodule.pm, avg 22.3ms/call
# 5 times (361µs+70.8ms) by installer::windows::mergemodule::merge_mergemodules_into_msi_database at line 101 of /cygdrive/c/lo/libo-master/instsetoo_native/util/C:/lo/libo-master/solenv/bin/modules/installer/windows/mergemodule.pm, avg 14.2ms/call
# once (71µs+24.1ms) by installer::run at line 1711 of /cygdrive/c/lo/libo-master/instsetoo_native/util/C:/lo/libo-master/solenv/bin/modules/installer.pm
# once (73µs+21.9ms) by installer::run at line 1709 of /cygdrive/c/lo/libo-master/instsetoo_native/util/C:/lo/libo-master/solenv/bin/modules/installer.pm | ||||
| 294 | 63224 | 1.68s | my ($source, $dest) = @_; | ||
| 295 | |||||
| 296 | my ($returnvalue, $infoline); | ||||
| 297 | |||||
| 298 | 7903 | 17.2s | my $copyreturn = copy($source, $dest); # spent 17.2s making 7903 calls to File::Copy::copy, avg 2.17ms/call | ||
| 299 | |||||
| 300 | 15806 | 20.5ms | if ($copyreturn) | ||
| 301 | { | ||||
| 302 | $infoline = "Copy: $source to $dest\n"; | ||||
| 303 | $returnvalue = 1; | ||||
| 304 | } | ||||
| 305 | else | ||||
| 306 | { | ||||
| 307 | $infoline = "ERROR: Could not copy $source to $dest $!\n"; | ||||
| 308 | $returnvalue = 0; | ||||
| 309 | } | ||||
| 310 | |||||
| 311 | push(@installer::globals::logfileinfo, $infoline); | ||||
| 312 | |||||
| 313 | if ( !$returnvalue ) { | ||||
| 314 | return $returnvalue; | ||||
| 315 | } | ||||
| 316 | |||||
| 317 | # taking care of file attributes | ||||
| 318 | 39515 | 2.87s | 7903 | 1.50s | if ($installer::globals::iswin && -f $dest) { # spent 1.50s making 7903 calls to installer::systemactions::CORE:ftfile, avg 190µs/call |
| 319 | 7903 | 1.57s | my $mode = -x $source ? 0775 : 0664; # spent 1.57s making 7903 calls to installer::systemactions::CORE:fteexec, avg 198µs/call | ||
| 320 | my $mode_str = sprintf("%o", $mode); | ||||
| 321 | 7903 | 1.16s | my $chmodreturn = chmod($mode, $dest); # spent 1.16s making 7903 calls to installer::systemactions::CORE:chmod, avg 147µs/call | ||
| 322 | 15806 | 17.4ms | if ($chmodreturn) | ||
| 323 | { | ||||
| 324 | $infoline = "chmod $mode_str, $dest\n"; | ||||
| 325 | $returnvalue = 1; | ||||
| 326 | } | ||||
| 327 | else | ||||
| 328 | { | ||||
| 329 | $infoline = "WARNING: Could not chmod $dest: $!\n"; | ||||
| 330 | $returnvalue = 0; | ||||
| 331 | } | ||||
| 332 | |||||
| 333 | push(@installer::globals::logfileinfo, $infoline); | ||||
| 334 | } | ||||
| 335 | |||||
| 336 | return $returnvalue; | ||||
| 337 | } | ||||
| 338 | |||||
| 339 | ########################## | ||||
| 340 | # Hard linking one file | ||||
| 341 | ########################## | ||||
| 342 | |||||
| 343 | sub hardlink_one_file | ||||
| 344 | { | ||||
| 345 | my ($source, $dest) = @_; | ||||
| 346 | |||||
| 347 | my ($returnvalue, $infoline); | ||||
| 348 | |||||
| 349 | my $copyreturn = link($source, $dest); | ||||
| 350 | |||||
| 351 | if ($copyreturn) | ||||
| 352 | { | ||||
| 353 | $infoline = "Link: $source to $dest\n"; | ||||
| 354 | $returnvalue = 1; | ||||
| 355 | } | ||||
| 356 | else | ||||
| 357 | { | ||||
| 358 | $infoline = "ERROR: Could not link $source to $dest\n"; | ||||
| 359 | $returnvalue = 0; | ||||
| 360 | } | ||||
| 361 | |||||
| 362 | push(@installer::globals::logfileinfo, $infoline); | ||||
| 363 | |||||
| 364 | return $returnvalue; | ||||
| 365 | } | ||||
| 366 | |||||
| 367 | ########################## | ||||
| 368 | # Soft linking one file | ||||
| 369 | ########################## | ||||
| 370 | |||||
| 371 | sub softlink_one_file | ||||
| 372 | { | ||||
| 373 | my ($source, $dest) = @_; | ||||
| 374 | |||||
| 375 | my ($returnvalue, $infoline); | ||||
| 376 | |||||
| 377 | my $linkreturn = symlink($source, $dest); | ||||
| 378 | |||||
| 379 | if ($linkreturn) | ||||
| 380 | { | ||||
| 381 | $infoline = "Symlink: $source to $dest\n"; | ||||
| 382 | $returnvalue = 1; | ||||
| 383 | } | ||||
| 384 | else | ||||
| 385 | { | ||||
| 386 | $infoline = "ERROR: Could not symlink $source to $dest\n"; | ||||
| 387 | $returnvalue = 0; | ||||
| 388 | } | ||||
| 389 | |||||
| 390 | push(@installer::globals::logfileinfo, $infoline); | ||||
| 391 | |||||
| 392 | return $returnvalue; | ||||
| 393 | } | ||||
| 394 | |||||
| 395 | ######################## | ||||
| 396 | # Renaming one file | ||||
| 397 | ######################## | ||||
| 398 | |||||
| 399 | sub rename_one_file | ||||
| 400 | # spent 834ms (10.7+823) within installer::systemactions::rename_one_file which was called 529 times, avg 1.58ms/call:
# 436 times (8.34ms+593ms) by installer::systemactions::rename_files_with_fileextension at line 708, avg 1.38ms/call
# 5 times (85µs+31.6ms) by installer::windows::mergemodule::merge_mergemodules_into_msi_database at line 457 of /cygdrive/c/lo/libo-master/instsetoo_native/util/C:/lo/libo-master/solenv/bin/modules/installer/windows/mergemodule.pm, avg 6.35ms/call
# 5 times (107µs+20.9ms) by installer::windows::mergemodule::merge_mergemodules_into_msi_database at line 455 of /cygdrive/c/lo/libo-master/instsetoo_native/util/C:/lo/libo-master/solenv/bin/modules/installer/windows/mergemodule.pm, avg 4.20ms/call
# 5 times (231µs+9.09ms) by installer::windows::mergemodule::merge_mergemodules_into_msi_database at line 454 of /cygdrive/c/lo/libo-master/instsetoo_native/util/C:/lo/libo-master/solenv/bin/modules/installer/windows/mergemodule.pm, avg 1.86ms/call
# 5 times (288µs+6.35ms) by installer::windows::mergemodule::merge_mergemodules_into_msi_database at line 529 of /cygdrive/c/lo/libo-master/instsetoo_native/util/C:/lo/libo-master/solenv/bin/modules/installer/windows/mergemodule.pm, avg 1.33ms/call
# 5 times (153µs+5.21ms) by installer::windows::mergemodule::merge_mergemodules_into_msi_database at line 530 of /cygdrive/c/lo/libo-master/instsetoo_native/util/C:/lo/libo-master/solenv/bin/modules/installer/windows/mergemodule.pm, avg 1.07ms/call
# 5 times (91µs+3.74ms) by installer::windows::mergemodule::merge_mergemodules_into_msi_database at line 531 of /cygdrive/c/lo/libo-master/instsetoo_native/util/C:/lo/libo-master/solenv/bin/modules/installer/windows/mergemodule.pm, avg 766µs/call
# 5 times (80µs+3.19ms) by installer::windows::mergemodule::merge_mergemodules_into_msi_database at line 532 of /cygdrive/c/lo/libo-master/instsetoo_native/util/C:/lo/libo-master/solenv/bin/modules/installer/windows/mergemodule.pm, avg 655µs/call
# 4 times (113µs+16.3ms) by installer::windows::mergemodule::merge_mergemodules_into_msi_database at line 408 of /cygdrive/c/lo/libo-master/instsetoo_native/util/C:/lo/libo-master/solenv/bin/modules/installer/windows/mergemodule.pm, avg 4.12ms/call
# 4 times (170µs+13.7ms) by installer::windows::mergemodule::merge_mergemodules_into_msi_database at line 400 of /cygdrive/c/lo/libo-master/instsetoo_native/util/C:/lo/libo-master/solenv/bin/modules/installer/windows/mergemodule.pm, avg 3.46ms/call
# 4 times (69µs+9.62ms) by installer::windows::mergemodule::merge_mergemodules_into_msi_database at line 405 of /cygdrive/c/lo/libo-master/instsetoo_native/util/C:/lo/libo-master/solenv/bin/modules/installer/windows/mergemodule.pm, avg 2.42ms/call
# 4 times (141µs+3.68ms) by installer::windows::mergemodule::merge_mergemodules_into_msi_database at line 485 of /cygdrive/c/lo/libo-master/instsetoo_native/util/C:/lo/libo-master/solenv/bin/modules/installer/windows/mergemodule.pm, avg 955µs/call
# 4 times (64µs+3.14ms) by installer::windows::mergemodule::merge_mergemodules_into_msi_database at line 407 of /cygdrive/c/lo/libo-master/instsetoo_native/util/C:/lo/libo-master/solenv/bin/modules/installer/windows/mergemodule.pm, avg 801µs/call
# 4 times (66µs+3.10ms) by installer::windows::mergemodule::merge_mergemodules_into_msi_database at line 456 of /cygdrive/c/lo/libo-master/instsetoo_native/util/C:/lo/libo-master/solenv/bin/modules/installer/windows/mergemodule.pm, avg 791µs/call
# 4 times (65µs+2.78ms) by installer::windows::mergemodule::merge_mergemodules_into_msi_database at line 491 of /cygdrive/c/lo/libo-master/instsetoo_native/util/C:/lo/libo-master/solenv/bin/modules/installer/windows/mergemodule.pm, avg 711µs/call
# 4 times (65µs+2.69ms) by installer::windows::mergemodule::merge_mergemodules_into_msi_database at line 487 of /cygdrive/c/lo/libo-master/instsetoo_native/util/C:/lo/libo-master/solenv/bin/modules/installer/windows/mergemodule.pm, avg 688µs/call
# 4 times (80µs+2.60ms) by installer::windows::mergemodule::merge_mergemodules_into_msi_database at line 401 of /cygdrive/c/lo/libo-master/instsetoo_native/util/C:/lo/libo-master/solenv/bin/modules/installer/windows/mergemodule.pm, avg 671µs/call
# 4 times (72µs+2.59ms) by installer::windows::mergemodule::merge_mergemodules_into_msi_database at line 486 of /cygdrive/c/lo/libo-master/instsetoo_native/util/C:/lo/libo-master/solenv/bin/modules/installer/windows/mergemodule.pm, avg 666µs/call
# 4 times (65µs+2.57ms) by installer::windows::mergemodule::merge_mergemodules_into_msi_database at line 490 of /cygdrive/c/lo/libo-master/instsetoo_native/util/C:/lo/libo-master/solenv/bin/modules/installer/windows/mergemodule.pm, avg 660µs/call
# 4 times (66µs+2.54ms) by installer::windows::mergemodule::merge_mergemodules_into_msi_database at line 489 of /cygdrive/c/lo/libo-master/instsetoo_native/util/C:/lo/libo-master/solenv/bin/modules/installer/windows/mergemodule.pm, avg 650µs/call
# 4 times (67µs+2.49ms) by installer::windows::mergemodule::merge_mergemodules_into_msi_database at line 403 of /cygdrive/c/lo/libo-master/instsetoo_native/util/C:/lo/libo-master/solenv/bin/modules/installer/windows/mergemodule.pm, avg 640µs/call
# 4 times (64µs+2.48ms) by installer::windows::mergemodule::merge_mergemodules_into_msi_database at line 488 of /cygdrive/c/lo/libo-master/instsetoo_native/util/C:/lo/libo-master/solenv/bin/modules/installer/windows/mergemodule.pm, avg 635µs/call
# once (60µs+71.4ms) by installer::windows::msiglobal::rename_msi_database_in_installset at line 968 of /cygdrive/c/lo/libo-master/instsetoo_native/util/C:/lo/libo-master/solenv/bin/modules/installer/windows/msiglobal.pm
# once (48µs+8.22ms) by installer::run at line 1810 of /cygdrive/c/lo/libo-master/instsetoo_native/util/C:/lo/libo-master/solenv/bin/modules/installer.pm | ||||
| 401 | 3174 | 833ms | my ($source, $dest) = @_; | ||
| 402 | |||||
| 403 | my ($returnvalue, $infoline); | ||||
| 404 | |||||
| 405 | 529 | 823ms | my $renamereturn = rename($source, $dest); # spent 823ms making 529 calls to installer::systemactions::CORE:rename, avg 1.56ms/call | ||
| 406 | |||||
| 407 | 1058 | 1.45ms | if ($renamereturn) | ||
| 408 | { | ||||
| 409 | $infoline = "Rename: $source to $dest\n"; | ||||
| 410 | $returnvalue = 1; | ||||
| 411 | } | ||||
| 412 | else | ||||
| 413 | { | ||||
| 414 | $infoline = "ERROR: Could not rename $source to $dest\n"; | ||||
| 415 | $returnvalue = 0; | ||||
| 416 | } | ||||
| 417 | |||||
| 418 | push(@installer::globals::logfileinfo, $infoline); | ||||
| 419 | |||||
| 420 | return $returnvalue; | ||||
| 421 | } | ||||
| 422 | |||||
| 423 | ########################################## | ||||
| 424 | # Copying all files from one directory | ||||
| 425 | # to another directory | ||||
| 426 | ########################################## | ||||
| 427 | |||||
| 428 | sub copy_directory | ||||
| 429 | # spent 11.5s (86.8ms+11.4) within installer::systemactions::copy_directory which was called 218 times, avg 52.7ms/call:
# 109 times (55.4ms+7.34s) by installer::windows::idtglobal::prepare_language_idt_directory at line 757 of /cygdrive/c/lo/libo-master/instsetoo_native/util/C:/lo/libo-master/solenv/bin/modules/installer/windows/idtglobal.pm, avg 67.8ms/call
# 109 times (31.5ms+4.05s) by installer::windows::idtglobal::prepare_language_idt_directory at line 762 of /cygdrive/c/lo/libo-master/instsetoo_native/util/C:/lo/libo-master/solenv/bin/modules/installer/windows/idtglobal.pm, avg 37.5ms/call | ||||
| 430 | 2834 | 76.8ms | my ($sourcedir, $destdir) = @_; | ||
| 431 | |||||
| 432 | my @sourcefiles = (); | ||||
| 433 | |||||
| 434 | 436 | 3.20ms | $sourcedir =~ s/\Q$installer::globals::separator\E\s*$//; # spent 2.45ms making 218 calls to installer::systemactions::CORE:subst, avg 11µs/call
# spent 750µs making 218 calls to installer::systemactions::CORE:regcomp, avg 3µs/call | ||
| 435 | 436 | 1.16ms | $destdir =~ s/\Q$installer::globals::separator\E\s*$//; # spent 859µs making 218 calls to installer::systemactions::CORE:subst, avg 4µs/call
# spent 297µs making 218 calls to installer::systemactions::CORE:regcomp, avg 1µs/call | ||
| 436 | |||||
| 437 | my $infoline = "\n"; | ||||
| 438 | push(@installer::globals::logfileinfo, $infoline); | ||||
| 439 | $infoline = "Copying files from directory $sourcedir to directory $destdir\n"; | ||||
| 440 | push(@installer::globals::logfileinfo, $infoline); | ||||
| 441 | |||||
| 442 | 218 | 22.7ms | opendir(DIR, $sourcedir); # spent 22.7ms making 218 calls to installer::systemactions::CORE:open_dir, avg 104µs/call | ||
| 443 | 218 | 27.9ms | @sourcefiles = readdir(DIR); # spent 27.9ms making 218 calls to installer::systemactions::CORE:readdir, avg 128µs/call | ||
| 444 | 218 | 4.98ms | closedir(DIR); # spent 4.98ms making 218 calls to installer::systemactions::CORE:closedir, avg 23µs/call | ||
| 445 | |||||
| 446 | my $onefile; | ||||
| 447 | |||||
| 448 | foreach $onefile (@sourcefiles) | ||||
| 449 | { | ||||
| 450 | 19620 | 881ms | if ((!($onefile eq ".")) && (!($onefile eq ".."))) | ||
| 451 | { | ||||
| 452 | my $sourcefile = $sourcedir . $installer::globals::separator . $onefile; | ||||
| 453 | my $destfile = $destdir . $installer::globals::separator . $onefile; | ||||
| 454 | 9483 | 11.3s | if ( -f $sourcefile ) # only files, no directories # spent 10.5s making 4687 calls to installer::systemactions::copy_one_file, avg 2.24ms/call
# spent 816ms making 4796 calls to installer::systemactions::CORE:ftfile, avg 170µs/call | ||
| 455 | { | ||||
| 456 | copy_one_file($sourcefile, $destfile); | ||||
| 457 | } | ||||
| 458 | } | ||||
| 459 | } | ||||
| 460 | } | ||||
| 461 | |||||
| 462 | ########################################## | ||||
| 463 | # Copying all files from one directory | ||||
| 464 | # to another directory | ||||
| 465 | ########################################## | ||||
| 466 | |||||
| 467 | sub is_empty_dir | ||||
| 468 | { | ||||
| 469 | my ($dir) = @_; | ||||
| 470 | |||||
| 471 | my $directory_is_empty = 1; | ||||
| 472 | my @sourcefiles = (); | ||||
| 473 | |||||
| 474 | opendir(DIR, $dir); | ||||
| 475 | @sourcefiles = readdir(DIR); | ||||
| 476 | closedir(DIR); | ||||
| 477 | |||||
| 478 | my $onefile; | ||||
| 479 | my @realcontent = (); | ||||
| 480 | |||||
| 481 | foreach $onefile (@sourcefiles) | ||||
| 482 | { | ||||
| 483 | if ((!($onefile eq ".")) && (!($onefile eq ".."))) | ||||
| 484 | { | ||||
| 485 | push(@realcontent, $onefile); | ||||
| 486 | } | ||||
| 487 | } | ||||
| 488 | |||||
| 489 | if ( $#realcontent > -1 ) { $directory_is_empty = 0; } | ||||
| 490 | |||||
| 491 | return $directory_is_empty; | ||||
| 492 | } | ||||
| 493 | |||||
| 494 | ##################################################################### | ||||
| 495 | # Creating hard links to a complete directory with sub directories. | ||||
| 496 | ##################################################################### | ||||
| 497 | |||||
| 498 | sub hardlink_complete_directory | ||||
| 499 | { | ||||
| 500 | my ($sourcedir, $destdir) = @_; | ||||
| 501 | |||||
| 502 | my @sourcefiles = (); | ||||
| 503 | |||||
| 504 | $sourcedir =~ s/\Q$installer::globals::separator\E\s*$//; | ||||
| 505 | $destdir =~ s/\Q$installer::globals::separator\E\s*$//; | ||||
| 506 | |||||
| 507 | if ( ! -d $destdir ) { create_directory($destdir); } | ||||
| 508 | |||||
| 509 | my $infoline = "\n"; | ||||
| 510 | push(@installer::globals::logfileinfo, $infoline); | ||||
| 511 | $infoline = "Creating hard links for all files from directory $sourcedir to directory $destdir\n"; | ||||
| 512 | push(@installer::globals::logfileinfo, $infoline); | ||||
| 513 | |||||
| 514 | opendir(DIR, $sourcedir); | ||||
| 515 | @sourcefiles = readdir(DIR); | ||||
| 516 | closedir(DIR); | ||||
| 517 | |||||
| 518 | my $onefile; | ||||
| 519 | |||||
| 520 | foreach $onefile (@sourcefiles) | ||||
| 521 | { | ||||
| 522 | if ((!($onefile eq ".")) && (!($onefile eq ".."))) | ||||
| 523 | { | ||||
| 524 | my $source = $sourcedir . $installer::globals::separator . $onefile; | ||||
| 525 | my $dest = $destdir . $installer::globals::separator . $onefile; | ||||
| 526 | if ( -f $source ) # only files, no directories | ||||
| 527 | { | ||||
| 528 | hardlink_one_file($source, $dest); | ||||
| 529 | } | ||||
| 530 | if ( -d $source ) # recursive | ||||
| 531 | { | ||||
| 532 | hardlink_complete_directory($source, $dest); | ||||
| 533 | } | ||||
| 534 | } | ||||
| 535 | } | ||||
| 536 | } | ||||
| 537 | |||||
| 538 | ##################################################################### | ||||
| 539 | # Creating hard links to a complete directory with sub directories. | ||||
| 540 | ##################################################################### | ||||
| 541 | |||||
| 542 | sub softlink_complete_directory | ||||
| 543 | { | ||||
| 544 | my ($sourcedir, $destdir, $depth) = @_; | ||||
| 545 | |||||
| 546 | my @sourcefiles = (); | ||||
| 547 | |||||
| 548 | $sourcedir =~ s/\Q$installer::globals::separator\E\s*$//; | ||||
| 549 | $destdir =~ s/\Q$installer::globals::separator\E\s*$//; | ||||
| 550 | |||||
| 551 | if ( ! -d $destdir ) { create_directory($destdir); } | ||||
| 552 | |||||
| 553 | my $infoline = "\n"; | ||||
| 554 | push(@installer::globals::logfileinfo, $infoline); | ||||
| 555 | $infoline = "Creating soft links for all files from directory $sourcedir to directory $destdir\n"; | ||||
| 556 | push(@installer::globals::logfileinfo, $infoline); | ||||
| 557 | |||||
| 558 | opendir(DIR, $sourcedir); | ||||
| 559 | @sourcefiles = readdir(DIR); | ||||
| 560 | closedir(DIR); | ||||
| 561 | |||||
| 562 | my $onefile; | ||||
| 563 | |||||
| 564 | foreach $onefile (@sourcefiles) | ||||
| 565 | { | ||||
| 566 | if ((!($onefile eq ".")) && (!($onefile eq ".."))) | ||||
| 567 | { | ||||
| 568 | my $source = $sourcedir . $installer::globals::separator . $onefile; | ||||
| 569 | my $dest = $destdir . $installer::globals::separator . $onefile; | ||||
| 570 | if ( -f $source ) # only files, no directories | ||||
| 571 | { | ||||
| 572 | my $localsource = $source; | ||||
| 573 | if ( $depth > 0 ) { for ( my $i = 1; $i <= $depth; $i++ ) { $localsource = "../" . $localsource; } } | ||||
| 574 | softlink_one_file($localsource, $dest); | ||||
| 575 | } | ||||
| 576 | if ( -d $source ) # recursive | ||||
| 577 | { | ||||
| 578 | my $newdepth = $depth + 1; | ||||
| 579 | softlink_complete_directory($source, $dest, $newdepth); | ||||
| 580 | } | ||||
| 581 | } | ||||
| 582 | } | ||||
| 583 | } | ||||
| 584 | |||||
| 585 | ##################################################### | ||||
| 586 | # Copying a complete directory with sub directories. | ||||
| 587 | ##################################################### | ||||
| 588 | |||||
| 589 | sub copy_complete_directory | ||||
| 590 | { | ||||
| 591 | my ($sourcedir, $destdir) = @_; | ||||
| 592 | |||||
| 593 | my @sourcefiles = (); | ||||
| 594 | |||||
| 595 | $sourcedir =~ s/\Q$installer::globals::separator\E\s*$//; | ||||
| 596 | $destdir =~ s/\Q$installer::globals::separator\E\s*$//; | ||||
| 597 | |||||
| 598 | if ( ! -d $destdir ) { create_directory($destdir); } | ||||
| 599 | |||||
| 600 | my $infoline = "\n"; | ||||
| 601 | push(@installer::globals::logfileinfo, $infoline); | ||||
| 602 | $infoline = "Copying files from directory $sourcedir to directory $destdir\n"; | ||||
| 603 | push(@installer::globals::logfileinfo, $infoline); | ||||
| 604 | |||||
| 605 | opendir(DIR, $sourcedir); | ||||
| 606 | @sourcefiles = readdir(DIR); | ||||
| 607 | closedir(DIR); | ||||
| 608 | |||||
| 609 | my $onefile; | ||||
| 610 | |||||
| 611 | foreach $onefile (@sourcefiles) | ||||
| 612 | { | ||||
| 613 | if ((!($onefile eq ".")) && (!($onefile eq ".."))) | ||||
| 614 | { | ||||
| 615 | my $source = $sourcedir . $installer::globals::separator . $onefile; | ||||
| 616 | my $dest = $destdir . $installer::globals::separator . $onefile; | ||||
| 617 | if ( -f $source ) # only files, no directories | ||||
| 618 | { | ||||
| 619 | copy_one_file($source, $dest); | ||||
| 620 | } | ||||
| 621 | if ( -d $source ) # recursive | ||||
| 622 | { | ||||
| 623 | if ((!( $source =~ /packages\/SUNW/ )) && (!( $source =~ /packages\/OOO/ ))) # do not copy complete Solaris packages! | ||||
| 624 | { | ||||
| 625 | copy_complete_directory($source, $dest); | ||||
| 626 | } | ||||
| 627 | } | ||||
| 628 | } | ||||
| 629 | } | ||||
| 630 | } | ||||
| 631 | |||||
| 632 | ##################################################### | ||||
| 633 | # Copying all files with a specified file extension | ||||
| 634 | # from one directory to another directory. | ||||
| 635 | ##################################################### | ||||
| 636 | |||||
| 637 | sub copy_directory_with_fileextension | ||||
| 638 | # spent 11.6s (809ms+10.8) within installer::systemactions::copy_directory_with_fileextension which was called 218 times, avg 53.1ms/call:
# 109 times (385ms+5.73s) by installer::windows::idtglobal::prepare_language_idt_directory at line 817 of /cygdrive/c/lo/libo-master/instsetoo_native/util/C:/lo/libo-master/solenv/bin/modules/installer/windows/idtglobal.pm, avg 56.1ms/call
# 109 times (424ms+5.04s) by installer::windows::idtglobal::prepare_language_idt_directory at line 812 of /cygdrive/c/lo/libo-master/instsetoo_native/util/C:/lo/libo-master/solenv/bin/modules/installer/windows/idtglobal.pm, avg 50.1ms/call | ||||
| 639 | 2834 | 497ms | my ($sourcedir, $destdir, $extension) = @_; | ||
| 640 | |||||
| 641 | my @sourcefiles = (); | ||||
| 642 | |||||
| 643 | 436 | 2.77ms | $sourcedir =~ s/\Q$installer::globals::separator\E\s*$//; # spent 2.16ms making 218 calls to installer::systemactions::CORE:subst, avg 10µs/call
# spent 610µs making 218 calls to installer::systemactions::CORE:regcomp, avg 3µs/call | ||
| 644 | 436 | 1.11ms | $destdir =~ s/\Q$installer::globals::separator\E\s*$//; # spent 824µs making 218 calls to installer::systemactions::CORE:subst, avg 4µs/call
# spent 289µs making 218 calls to installer::systemactions::CORE:regcomp, avg 1µs/call | ||
| 645 | |||||
| 646 | $infoline = "\n"; | ||||
| 647 | push(@installer::globals::logfileinfo, $infoline); | ||||
| 648 | $infoline = "Copying files with extension $extension from directory $sourcedir to directory $destdir\n"; | ||||
| 649 | push(@installer::globals::logfileinfo, $infoline); | ||||
| 650 | |||||
| 651 | 218 | 22.5ms | opendir(DIR, $sourcedir); # spent 22.5ms making 218 calls to installer::systemactions::CORE:open_dir, avg 103µs/call | ||
| 652 | 218 | 373ms | @sourcefiles = readdir(DIR); # spent 373ms making 218 calls to installer::systemactions::CORE:readdir, avg 1.71ms/call | ||
| 653 | 218 | 6.05ms | closedir(DIR); # spent 6.05ms making 218 calls to installer::systemactions::CORE:closedir, avg 28µs/call | ||
| 654 | |||||
| 655 | my $onefile; | ||||
| 656 | |||||
| 657 | foreach $onefile (@sourcefiles) | ||||
| 658 | { | ||||
| 659 | 196200 | 876ms | if ((!($onefile eq ".")) && (!($onefile eq ".."))) | ||
| 660 | { | ||||
| 661 | 5559 | 3.42s | 195764 | 186ms | if ( $onefile =~ /\.$extension\s*$/ ) # only copying specified files # spent 108ms making 97882 calls to installer::systemactions::CORE:match, avg 1µs/call
# spent 77.5ms making 97882 calls to installer::systemactions::CORE:regcomp, avg 792ns/call |
| 662 | { | ||||
| 663 | my $sourcefile = $sourcedir . $installer::globals::separator . $onefile; | ||||
| 664 | my $destfile = $destdir . $installer::globals::separator . $onefile; | ||||
| 665 | 3706 | 10.2s | if ( -f $sourcefile ) # only files, no directories # spent 6.79s making 1853 calls to installer::systemactions::copy_one_file, avg 3.66ms/call
# spent 3.39s making 1853 calls to installer::systemactions::CORE:ftfile, avg 1.83ms/call | ||
| 666 | { | ||||
| 667 | copy_one_file($sourcefile, $destfile); | ||||
| 668 | } | ||||
| 669 | } | ||||
| 670 | } | ||||
| 671 | } | ||||
| 672 | } | ||||
| 673 | |||||
| 674 | ######################################################## | ||||
| 675 | # Renaming all files with a specified file extension | ||||
| 676 | # in a specified directory. | ||||
| 677 | # Example: "Feature.idt.01" -> "Feature.idt" | ||||
| 678 | ######################################################## | ||||
| 679 | |||||
| 680 | sub rename_files_with_fileextension | ||||
| 681 | # spent 777ms (51.0+726) within installer::systemactions::rename_files_with_fileextension which was called 109 times, avg 7.13ms/call:
# 109 times (51.0ms+726ms) by installer::windows::idtglobal::prepare_language_idt_directory at line 818 of /cygdrive/c/lo/libo-master/instsetoo_native/util/C:/lo/libo-master/solenv/bin/modules/installer/windows/idtglobal.pm, avg 7.13ms/call | ||||
| 682 | 1308 | 39.9ms | my ($dir, $extension) = @_; | ||
| 683 | |||||
| 684 | my @sourcefiles = (); | ||||
| 685 | |||||
| 686 | 218 | 1.05ms | $dir =~ s/\Q$installer::globals::separator\E\s*$//; # spent 852µs making 109 calls to installer::systemactions::CORE:subst, avg 8µs/call
# spent 196µs making 109 calls to installer::systemactions::CORE:regcomp, avg 2µs/call | ||
| 687 | |||||
| 688 | my $infoline = "\n"; | ||||
| 689 | push(@installer::globals::logfileinfo, $infoline); | ||||
| 690 | $infoline = "Renaming files with extension \"$extension\" in the directory $dir\n"; | ||||
| 691 | push(@installer::globals::logfileinfo, $infoline); | ||||
| 692 | |||||
| 693 | 109 | 11.0ms | opendir(DIR, $dir); # spent 11.0ms making 109 calls to installer::systemactions::CORE:open_dir, avg 101µs/call | ||
| 694 | 109 | 17.2ms | @sourcefiles = readdir(DIR); # spent 17.2ms making 109 calls to installer::systemactions::CORE:readdir, avg 158µs/call | ||
| 695 | 109 | 2.51ms | closedir(DIR); # spent 2.51ms making 109 calls to installer::systemactions::CORE:closedir, avg 23µs/call | ||
| 696 | |||||
| 697 | my $onefile; | ||||
| 698 | |||||
| 699 | foreach $onefile (@sourcefiles) | ||||
| 700 | { | ||||
| 701 | 10464 | 50.3ms | if ((!($onefile eq ".")) && (!($onefile eq ".."))) | ||
| 702 | { | ||||
| 703 | 1744 | 85.0ms | 10246 | 13.9ms | if ( $onefile =~ /^\s*(\S.*?)\.$extension\s*$/ ) # only renaming specified files # spent 8.49ms making 5123 calls to installer::systemactions::CORE:regcomp, avg 2µs/call
# spent 5.44ms making 5123 calls to installer::systemactions::CORE:match, avg 1µs/call |
| 704 | { | ||||
| 705 | my $destfile = $1; | ||||
| 706 | my $sourcefile = $dir . $installer::globals::separator . $onefile; | ||||
| 707 | $destfile = $dir . $installer::globals::separator . $destfile; | ||||
| 708 | 872 | 681ms | if ( -f $sourcefile ) # only files, no directories # spent 602ms making 436 calls to installer::systemactions::rename_one_file, avg 1.38ms/call
# spent 78.9ms making 436 calls to installer::systemactions::CORE:ftfile, avg 181µs/call | ||
| 709 | { | ||||
| 710 | rename_one_file($sourcefile, $destfile); | ||||
| 711 | } | ||||
| 712 | } | ||||
| 713 | } | ||||
| 714 | } | ||||
| 715 | } | ||||
| 716 | |||||
| 717 | ######################################################## | ||||
| 718 | # Finding all files with a specified file extension | ||||
| 719 | # in a specified directory. | ||||
| 720 | ######################################################## | ||||
| 721 | |||||
| 722 | sub find_file_with_file_extension | ||||
| 723 | # spent 111ms (55.8+55.2) within installer::systemactions::find_file_with_file_extension which was called 110 times, avg 1.01ms/call:
# 109 times (55.6ms+54.8ms) by installer::windows::idtglobal::setencoding at line 1372 of /cygdrive/c/lo/libo-master/instsetoo_native/util/C:/lo/libo-master/solenv/bin/modules/installer/windows/idtglobal.pm, avg 1.01ms/call
# once (162µs+369µs) by installer::windows::msiglobal::include_cabs_into_msi at line 1253 of /cygdrive/c/lo/libo-master/instsetoo_native/util/C:/lo/libo-master/solenv/bin/modules/installer/windows/msiglobal.pm | ||||
| 724 | 1430 | 55.1ms | my ($extension, $dir) = @_; | ||
| 725 | |||||
| 726 | my @allfiles = (); | ||||
| 727 | |||||
| 728 | 220 | 1.22ms | $dir =~ s/\Q$installer::globals::separator\E\s*$//; # spent 878µs making 110 calls to installer::systemactions::CORE:subst, avg 8µs/call
# spent 347µs making 110 calls to installer::systemactions::CORE:regcomp, avg 3µs/call | ||
| 729 | |||||
| 730 | my $infoline = "\n"; | ||||
| 731 | push(@installer::globals::logfileinfo, $infoline); | ||||
| 732 | $infoline = "Searching files with extension \"$extension\" in the directory $dir\n"; | ||||
| 733 | push(@installer::globals::logfileinfo, $infoline); | ||||
| 734 | |||||
| 735 | 110 | 14.9ms | opendir(DIR, $dir); # spent 14.9ms making 110 calls to installer::systemactions::CORE:open_dir, avg 136µs/call | ||
| 736 | 220 | 20.8ms | @sourcefiles = sort readdir(DIR); # spent 18.3ms making 110 calls to installer::systemactions::CORE:readdir, avg 166µs/call
# spent 2.55ms making 110 calls to installer::systemactions::CORE:sort, avg 23µs/call | ||
| 737 | 110 | 2.73ms | closedir(DIR); # spent 2.73ms making 110 calls to installer::systemactions::CORE:closedir, avg 25µs/call | ||
| 738 | |||||
| 739 | my $onefile; | ||||
| 740 | |||||
| 741 | foreach $onefile (@sourcefiles) | ||||
| 742 | { | ||||
| 743 | 10470 | 56.0ms | if ((!($onefile eq ".")) && (!($onefile eq ".."))) | ||
| 744 | { | ||||
| 745 | 10250 | 15.4ms | if ( $onefile =~ /^\s*(\S.*?)\.$extension\s*$/ ) # spent 11.1ms making 5125 calls to installer::systemactions::CORE:match, avg 2µs/call
# spent 4.36ms making 5125 calls to installer::systemactions::CORE:regcomp, avg 850ns/call | ||
| 746 | { | ||||
| 747 | push(@allfiles, $onefile) | ||||
| 748 | } | ||||
| 749 | } | ||||
| 750 | } | ||||
| 751 | |||||
| 752 | return \@allfiles; | ||||
| 753 | } | ||||
| 754 | |||||
| 755 | ############################################################## | ||||
| 756 | # Creating a unique directory, for example "01_inprogress_7" | ||||
| 757 | # in the install directory. | ||||
| 758 | ############################################################## | ||||
| 759 | |||||
| 760 | sub make_numbered_dir | ||||
| 761 | { | ||||
| 762 | my ($newstring, $olddir) = @_; | ||||
| 763 | |||||
| 764 | my $basedir = $olddir; | ||||
| 765 | installer::pathanalyzer::get_path_from_fullqualifiedname(\$basedir); | ||||
| 766 | |||||
| 767 | my $alldirs = get_all_directories($basedir); | ||||
| 768 | |||||
| 769 | # searching for the highest number extension | ||||
| 770 | |||||
| 771 | my $maxnumber = 0; | ||||
| 772 | |||||
| 773 | for ( my $i = 0; $i <= $#{$alldirs}; $i++ ) | ||||
| 774 | { | ||||
| 775 | if ( ${$alldirs}[$i] =~ /\_(\d+)\s*$/ ) | ||||
| 776 | { | ||||
| 777 | my $number = $1; | ||||
| 778 | if ( $number > $maxnumber ) { $maxnumber = $number; } | ||||
| 779 | } | ||||
| 780 | } | ||||
| 781 | |||||
| 782 | my $newnumber = $maxnumber + 1; | ||||
| 783 | |||||
| 784 | my $newdir = $olddir . "_" . $newstring . "_" . $newnumber; | ||||
| 785 | |||||
| 786 | my $returndir = ""; | ||||
| 787 | |||||
| 788 | if ( move($olddir, $newdir) ) | ||||
| 789 | { | ||||
| 790 | $infoline = "\nMoved directory from $olddir to $newdir\n"; | ||||
| 791 | push(@installer::globals::logfileinfo, $infoline); | ||||
| 792 | $returndir = $newdir; | ||||
| 793 | } | ||||
| 794 | else | ||||
| 795 | { | ||||
| 796 | $infoline = "\nATTENTION: Could not move directory from $olddir to $newdir, \"make_numbered_dir\"\n"; | ||||
| 797 | push(@installer::globals::logfileinfo, $infoline); | ||||
| 798 | $returndir = $olddir; | ||||
| 799 | } | ||||
| 800 | |||||
| 801 | return $returndir; | ||||
| 802 | } | ||||
| 803 | |||||
| 804 | ##################################################################################### | ||||
| 805 | # Renaming a directory by exchanging a string, for example from "01_inprogress_7" | ||||
| 806 | # to "01_witherror_7". | ||||
| 807 | ##################################################################################### | ||||
| 808 | |||||
| 809 | sub rename_string_in_directory | ||||
| 810 | # spent 90.5ms (72µs+90.5) within installer::systemactions::rename_string_in_directory which was called:
# once (72µs+90.5ms) by installer::worker::analyze_and_save_logfile at line 211 of /cygdrive/c/lo/libo-master/instsetoo_native/util/C:/lo/libo-master/solenv/bin/modules/installer/worker.pm | ||||
| 811 | 7 | 409µs | my ($olddir, $oldstring, $newstring) = @_; | ||
| 812 | |||||
| 813 | my $newdir = $olddir; | ||||
| 814 | my $infoline = ""; | ||||
| 815 | |||||
| 816 | 2 | 31µs | $newdir =~ s/$oldstring/$newstring/g; # spent 26µs making 1 call to installer::systemactions::CORE:regcomp
# spent 5µs making 1 call to installer::systemactions::CORE:subst | ||
| 817 | |||||
| 818 | 1 | 318µs | if (( -d $newdir ) && ( $olddir ne $newdir )) { remove_complete_directory($newdir, 1); } # spent 318µs making 1 call to installer::systemactions::CORE:ftdir | ||
| 819 | |||||
| 820 | 2 | 14µs | 1 | 90.1ms | if ( move($olddir, $newdir) ) # spent 90.1ms making 1 call to File::Copy::move |
| 821 | { | ||||
| 822 | $infoline = "\nMoved directory from $olddir to $newdir\n"; | ||||
| 823 | push(@installer::globals::logfileinfo, $infoline); | ||||
| 824 | } | ||||
| 825 | else | ||||
| 826 | { | ||||
| 827 | $infoline = "\nATTENTION: Could not move directory from $olddir to $newdir, \"rename_string_in_directory\"\n"; | ||||
| 828 | push(@installer::globals::logfileinfo, $infoline); | ||||
| 829 | } | ||||
| 830 | |||||
| 831 | return $newdir; | ||||
| 832 | } | ||||
| 833 | |||||
| 834 | ###################################################### | ||||
| 835 | # Returning the complete directory name, | ||||
| 836 | # input is the first part of the directory name. | ||||
| 837 | ###################################################### | ||||
| 838 | |||||
| 839 | sub get_directoryname | ||||
| 840 | { | ||||
| 841 | my ($searchdir, $startstring) = @_; | ||||
| 842 | |||||
| 843 | my $dirname = ""; | ||||
| 844 | my $founddir = 0; | ||||
| 845 | my $direntry; | ||||
| 846 | |||||
| 847 | opendir(DIR, $searchdir); | ||||
| 848 | |||||
| 849 | foreach $direntry (readdir (DIR)) | ||||
| 850 | { | ||||
| 851 | next if $direntry eq "."; | ||||
| 852 | next if $direntry eq ".."; | ||||
| 853 | |||||
| 854 | if (( -d $direntry ) && ( $direntry =~ /^\s*\Q$startstring\E/ )) | ||||
| 855 | { | ||||
| 856 | $dirname = $direntry; | ||||
| 857 | $founddir = 1; | ||||
| 858 | last; | ||||
| 859 | } | ||||
| 860 | } | ||||
| 861 | |||||
| 862 | closedir(DIR); | ||||
| 863 | |||||
| 864 | if ( ! $founddir ) { installer::exiter::exit_program("ERROR: Did not find directory beginning with $startstring in directory $searchdir", "get_directoryname"); } | ||||
| 865 | |||||
| 866 | return $dirname; | ||||
| 867 | } | ||||
| 868 | |||||
| 869 | |||||
| 870 | ################################### | ||||
| 871 | # Renaming a directory | ||||
| 872 | ################################### | ||||
| 873 | |||||
| 874 | sub rename_directory | ||||
| 875 | # spent 136ms (27µs+136) within installer::systemactions::rename_directory which was called:
# once (27µs+136ms) by installer::worker::create_installation_directory at line 168 of /cygdrive/c/lo/libo-master/instsetoo_native/util/C:/lo/libo-master/solenv/bin/modules/installer/worker.pm | ||||
| 876 | 4 | 19µs | my ($olddir, $newdir) = @_; | ||
| 877 | |||||
| 878 | my $infoline = ""; | ||||
| 879 | |||||
| 880 | 2 | 10µs | 1 | 136ms | if ( move($olddir, $newdir) ) # spent 136ms making 1 call to File::Copy::move |
| 881 | { | ||||
| 882 | $infoline = "\nMoved directory from $olddir to $newdir\n"; | ||||
| 883 | push(@installer::globals::logfileinfo, $infoline); | ||||
| 884 | } | ||||
| 885 | else | ||||
| 886 | { | ||||
| 887 | installer::exiter::exit_program("ERROR: Could not move directory from $olddir to $newdir $!", "rename_directory"); | ||||
| 888 | } | ||||
| 889 | |||||
| 890 | return $newdir; | ||||
| 891 | } | ||||
| 892 | |||||
| 893 | ############################################################## | ||||
| 894 | # Creating a directory next to an existing directory | ||||
| 895 | ############################################################## | ||||
| 896 | |||||
| 897 | sub create_directory_next_to_directory | ||||
| 898 | # spent 1.11ms (41µs+1.07) within installer::systemactions::create_directory_next_to_directory which was called:
# once (41µs+1.07ms) by installer::run at line 1448 of /cygdrive/c/lo/libo-master/instsetoo_native/util/C:/lo/libo-master/solenv/bin/modules/installer.pm | ||||
| 899 | 7 | 80µs | my ($topdir, $dirname) = @_; | ||
| 900 | |||||
| 901 | my $basedir = $topdir; | ||||
| 902 | 1 | 48µs | installer::pathanalyzer::get_path_from_fullqualifiedname(\$basedir); # spent 48µs making 1 call to installer::pathanalyzer::get_path_from_fullqualifiedname | ||
| 903 | |||||
| 904 | 2 | 45µs | $basedir =~ s/\Q$installer::globals::separator\E\s*$//; # spent 39µs making 1 call to installer::systemactions::CORE:regcomp
# spent 6µs making 1 call to installer::systemactions::CORE:subst | ||
| 905 | |||||
| 906 | my $newdir = $basedir . $installer::globals::separator . $dirname; | ||||
| 907 | |||||
| 908 | 1 | 975µs | create_directory($newdir); # spent 975µs making 1 call to installer::systemactions::create_directory | ||
| 909 | |||||
| 910 | return $newdir; | ||||
| 911 | } | ||||
| 912 | |||||
| 913 | ############################################################## | ||||
| 914 | # Collecting all directories inside a directory | ||||
| 915 | ############################################################## | ||||
| 916 | |||||
| 917 | sub get_all_directories | ||||
| 918 | { | ||||
| 919 | my ($basedir) = @_; | ||||
| 920 | |||||
| 921 | my @alldirs = (); | ||||
| 922 | my $direntry; | ||||
| 923 | |||||
| 924 | $basedir =~ s/\Q$installer::globals::separator\E\s*$//; | ||||
| 925 | |||||
| 926 | opendir(DIR, $basedir); | ||||
| 927 | |||||
| 928 | foreach $direntry (readdir (DIR)) | ||||
| 929 | { | ||||
| 930 | next if $direntry eq "."; | ||||
| 931 | next if $direntry eq ".."; | ||||
| 932 | |||||
| 933 | my $completeentry = $basedir . $installer::globals::separator . $direntry; | ||||
| 934 | |||||
| 935 | if ( -d $completeentry ) { push(@alldirs, $completeentry); } | ||||
| 936 | } | ||||
| 937 | |||||
| 938 | closedir(DIR); | ||||
| 939 | |||||
| 940 | return \@alldirs; | ||||
| 941 | } | ||||
| 942 | |||||
| 943 | ############################################################## | ||||
| 944 | # Collecting all directories inside a directory | ||||
| 945 | # Returning without path | ||||
| 946 | ############################################################## | ||||
| 947 | |||||
| 948 | sub get_all_directories_without_path | ||||
| 949 | { | ||||
| 950 | my ($basedir) = @_; | ||||
| 951 | |||||
| 952 | my @alldirs = (); | ||||
| 953 | my $direntry; | ||||
| 954 | |||||
| 955 | $basedir =~ s/\Q$installer::globals::separator\E\s*$//; | ||||
| 956 | |||||
| 957 | opendir(DIR, $basedir); | ||||
| 958 | |||||
| 959 | foreach $direntry (readdir (DIR)) | ||||
| 960 | { | ||||
| 961 | next if $direntry eq "."; | ||||
| 962 | next if $direntry eq ".."; | ||||
| 963 | |||||
| 964 | my $completeentry = $basedir . $installer::globals::separator . $direntry; | ||||
| 965 | |||||
| 966 | if ( -d $completeentry ) { push(@alldirs, $direntry); } | ||||
| 967 | } | ||||
| 968 | |||||
| 969 | closedir(DIR); | ||||
| 970 | |||||
| 971 | return \@alldirs; | ||||
| 972 | } | ||||
| 973 | |||||
| 974 | ############################################################## | ||||
| 975 | # Collecting all files and directories inside one directory | ||||
| 976 | ############################################################## | ||||
| 977 | |||||
| 978 | sub read_directory | ||||
| 979 | { | ||||
| 980 | my ($basedir) = @_; | ||||
| 981 | |||||
| 982 | my @allcontent = (); | ||||
| 983 | my $direntry; | ||||
| 984 | |||||
| 985 | $basedir =~ s/\Q$installer::globals::separator\E\s*$//; | ||||
| 986 | |||||
| 987 | opendir(DIR, $basedir); | ||||
| 988 | |||||
| 989 | foreach $direntry (readdir (DIR)) | ||||
| 990 | { | ||||
| 991 | next if $direntry eq "."; | ||||
| 992 | next if $direntry eq ".."; | ||||
| 993 | |||||
| 994 | my $completeentry = $basedir . $installer::globals::separator . $direntry; | ||||
| 995 | |||||
| 996 | if (( -f $completeentry ) || ( -d $completeentry )) { push(@allcontent, $completeentry); } | ||||
| 997 | } | ||||
| 998 | |||||
| 999 | closedir(DIR); | ||||
| 1000 | |||||
| 1001 | return \@allcontent; | ||||
| 1002 | } | ||||
| 1003 | |||||
| 1004 | ############################################################## | ||||
| 1005 | # Finding the new content in a directory | ||||
| 1006 | ############################################################## | ||||
| 1007 | |||||
| 1008 | sub find_new_content_in_directory | ||||
| 1009 | { | ||||
| 1010 | my ( $basedir, $oldcontent ) = @_; | ||||
| 1011 | |||||
| 1012 | my @newcontent = (); | ||||
| 1013 | my @allcontent = (); | ||||
| 1014 | |||||
| 1015 | my $direntry; | ||||
| 1016 | |||||
| 1017 | $basedir =~ s/\Q$installer::globals::separator\E\s*$//; | ||||
| 1018 | |||||
| 1019 | opendir(DIR, $basedir); | ||||
| 1020 | |||||
| 1021 | foreach $direntry (readdir (DIR)) | ||||
| 1022 | { | ||||
| 1023 | next if $direntry eq "."; | ||||
| 1024 | next if $direntry eq ".."; | ||||
| 1025 | |||||
| 1026 | my $completeentry = $basedir . $installer::globals::separator . $direntry; | ||||
| 1027 | |||||
| 1028 | if (( -f $completeentry ) || ( -d $completeentry )) | ||||
| 1029 | { | ||||
| 1030 | push(@allcontent, $completeentry); | ||||
| 1031 | if (! grep {$_ eq $completeentry} @{$oldcontent}) | ||||
| 1032 | { | ||||
| 1033 | push(@newcontent, $completeentry); | ||||
| 1034 | } | ||||
| 1035 | } | ||||
| 1036 | } | ||||
| 1037 | |||||
| 1038 | closedir(DIR); | ||||
| 1039 | |||||
| 1040 | return (\@newcontent, \@allcontent); | ||||
| 1041 | } | ||||
| 1042 | |||||
| 1043 | ############################################################## | ||||
| 1044 | # Trying to create a directory, no error if this fails | ||||
| 1045 | ############################################################## | ||||
| 1046 | |||||
| 1047 | sub try_to_create_directory | ||||
| 1048 | { | ||||
| 1049 | my ($directory) = @_; | ||||
| 1050 | |||||
| 1051 | my $returnvalue = 1; | ||||
| 1052 | my $created_directory = 0; | ||||
| 1053 | |||||
| 1054 | if (!(-d $directory)) | ||||
| 1055 | { | ||||
| 1056 | $returnvalue = mkdir($directory, 0775); | ||||
| 1057 | |||||
| 1058 | if ($returnvalue) | ||||
| 1059 | { | ||||
| 1060 | $created_directory = 1; | ||||
| 1061 | $infoline = "\nCreated directory: $directory\n"; | ||||
| 1062 | push(@installer::globals::logfileinfo, $infoline); | ||||
| 1063 | |||||
| 1064 | chmod 0775, $directory; | ||||
| 1065 | } | ||||
| 1066 | else | ||||
| 1067 | { | ||||
| 1068 | $created_directory = 0; | ||||
| 1069 | } | ||||
| 1070 | } | ||||
| 1071 | else | ||||
| 1072 | { | ||||
| 1073 | $created_directory = 1; | ||||
| 1074 | } | ||||
| 1075 | |||||
| 1076 | return $created_directory; | ||||
| 1077 | } | ||||
| 1078 | |||||
| 1079 | ############################################################## | ||||
| 1080 | # Creating a complete directory structure | ||||
| 1081 | ############################################################## | ||||
| 1082 | |||||
| 1083 | sub create_directory_structure | ||||
| 1084 | { | ||||
| 1085 | my ($directory) = @_; | ||||
| 1086 | |||||
| 1087 | if ( ! try_to_create_directory($directory) ) | ||||
| 1088 | { | ||||
| 1089 | my $parentdir = $directory; | ||||
| 1090 | installer::pathanalyzer::get_path_from_fullqualifiedname(\$parentdir); | ||||
| 1091 | |||||
| 1092 | my $infoline = "INFO: Did not create directory $directory\n"; | ||||
| 1093 | push(@installer::globals::logfileinfo, $infoline); | ||||
| 1094 | $infoline = "Now trying to create parent directory $parentdir\n"; | ||||
| 1095 | push(@installer::globals::logfileinfo, $infoline); | ||||
| 1096 | |||||
| 1097 | create_directory_structure($parentdir); # recursive | ||||
| 1098 | } | ||||
| 1099 | |||||
| 1100 | create_directory($directory); # now it has to succeed | ||||
| 1101 | } | ||||
| 1102 | |||||
| 1103 | ###################################################### | ||||
| 1104 | # Removing a complete directory with subdirectories | ||||
| 1105 | ###################################################### | ||||
| 1106 | |||||
| 1107 | sub remove_complete_directory | ||||
| 1108 | # spent 7.38s (320ms+7.06) within installer::systemactions::remove_complete_directory which was called 1914 times, avg 3.86ms/call:
# 1911 times (320ms+-320ms) by installer::systemactions::remove_complete_directory at line 1143, avg 0s/call
# once (133µs+7.38s) by installer::worker::clean_output_tree at line 251 of /cygdrive/c/lo/libo-master/instsetoo_native/util/C:/lo/libo-master/solenv/bin/modules/installer/worker.pm
# once (92µs+850µs) by installer::run at line 248 of /cygdrive/c/lo/libo-master/instsetoo_native/util/C:/lo/libo-master/solenv/bin/modules/installer.pm
# once (76µs+697µs) by installer::worker::remove_old_installation_sets at line 135 of /cygdrive/c/lo/libo-master/instsetoo_native/util/C:/lo/libo-master/solenv/bin/modules/installer/worker.pm | ||||
| 1109 | 9570 | 203ms | my ($directory, $start) = @_; | ||
| 1110 | |||||
| 1111 | my @content = (); | ||||
| 1112 | my $infoline = ""; | ||||
| 1113 | |||||
| 1114 | 3828 | 14.8ms | $directory =~ s/\Q$installer::globals::separator\E\s*$//; # spent 12.3ms making 1914 calls to installer::systemactions::CORE:subst, avg 6µs/call
# spent 2.52ms making 1914 calls to installer::systemactions::CORE:regcomp, avg 1µs/call | ||
| 1115 | |||||
| 1116 | 17226 | 2.15s | 1914 | 145ms | if ( -d $directory ) # spent 145ms making 1914 calls to installer::systemactions::CORE:ftdir, avg 76µs/call |
| 1117 | { | ||||
| 1118 | 8 | 15µs | if ( $start ) | ||
| 1119 | { | ||||
| 1120 | $infoline = "\n"; | ||||
| 1121 | push(@installer::globals::logfileinfo, $infoline); | ||||
| 1122 | $infoline = "Removing directory $directory\n"; | ||||
| 1123 | push(@installer::globals::logfileinfo, $infoline); | ||||
| 1124 | } | ||||
| 1125 | |||||
| 1126 | 1914 | 171ms | opendir(DIR, $directory); # spent 171ms making 1914 calls to installer::systemactions::CORE:open_dir, avg 89µs/call | ||
| 1127 | 1914 | 224ms | @content = readdir(DIR); # spent 224ms making 1914 calls to installer::systemactions::CORE:readdir, avg 117µs/call | ||
| 1128 | 1914 | 40.6ms | closedir(DIR); # spent 40.6ms making 1914 calls to installer::systemactions::CORE:closedir, avg 21µs/call | ||
| 1129 | |||||
| 1130 | my $oneitem; | ||||
| 1131 | |||||
| 1132 | foreach $oneitem (@content) | ||||
| 1133 | { | ||||
| 1134 | 46148 | 5.03s | if ((!($oneitem eq ".")) && (!($oneitem eq ".."))) | ||
| 1135 | { | ||||
| 1136 | my $item = $directory . $installer::globals::separator . $oneitem; | ||||
| 1137 | |||||
| 1138 | 21160 | 3.02s | if ( -f $item || -l $item ) # deleting files or links # spent 1.85s making 8669 calls to installer::systemactions::CORE:unlink, avg 214µs/call
# spent 1.02s making 10580 calls to installer::systemactions::CORE:ftfile, avg 96µs/call
# spent 151ms making 1911 calls to installer::systemactions::CORE:ftlink, avg 79µs/call | ||
| 1139 | { | ||||
| 1140 | unlink($item); | ||||
| 1141 | } | ||||
| 1142 | |||||
| 1143 | 12491 | 1.79s | if ( -d $item ) # recursive # spent 1.79s making 10580 calls to installer::systemactions::CORE:ftdir, avg 170µs/call
# spent 64.6s making 1911 calls to installer::systemactions::remove_complete_directory, avg 33.8ms/call, recursion: max depth 13, sum of overlapping time 64.6s | ||
| 1144 | { | ||||
| 1145 | remove_complete_directory($item, 0); | ||||
| 1146 | } | ||||
| 1147 | } | ||||
| 1148 | } | ||||
| 1149 | |||||
| 1150 | # try to remove empty directory | ||||
| 1151 | |||||
| 1152 | 1914 | 1.28s | my $returnvalue = rmdir $directory; # spent 1.28s making 1914 calls to installer::systemactions::CORE:rmdir, avg 669µs/call | ||
| 1153 | |||||
| 1154 | if ( ! $returnvalue ) | ||||
| 1155 | { | ||||
| 1156 | $infoline = "Warning: Problem with removing empty dir $directory\n"; | ||||
| 1157 | push(@installer::globals::logfileinfo, $infoline); | ||||
| 1158 | } | ||||
| 1159 | |||||
| 1160 | # try a little bit harder (sometimes there is a performance problem) | ||||
| 1161 | 1914 | 368ms | if ( -d $directory ) # spent 368ms making 1914 calls to installer::systemactions::CORE:ftdir, avg 192µs/call | ||
| 1162 | { | ||||
| 1163 | for ( my $j = 1; $j <= 3; $j++ ) | ||||
| 1164 | { | ||||
| 1165 | if ( -d $directory ) | ||||
| 1166 | { | ||||
| 1167 | $infoline = "\n"; | ||||
| 1168 | push(@installer::globals::logfileinfo, $infoline); | ||||
| 1169 | $infoline = "Warning (Try $j): Problems with removing directory $directory\n"; | ||||
| 1170 | push(@installer::globals::logfileinfo, $infoline); | ||||
| 1171 | |||||
| 1172 | $returnvalue = rmdir $directory; | ||||
| 1173 | |||||
| 1174 | if ( $returnvalue ) | ||||
| 1175 | { | ||||
| 1176 | $infoline = "Successfully removed empty dir $directory\n"; | ||||
| 1177 | push(@installer::globals::logfileinfo, $infoline); | ||||
| 1178 | } else { | ||||
| 1179 | $infoline = "Warning: rmdir $directory failed.\n"; | ||||
| 1180 | push(@installer::globals::logfileinfo, $infoline); | ||||
| 1181 | } | ||||
| 1182 | } | ||||
| 1183 | } | ||||
| 1184 | } | ||||
| 1185 | } | ||||
| 1186 | } | ||||
| 1187 | |||||
| 1188 | ###################################################### | ||||
| 1189 | # Creating a unique directory with number extension | ||||
| 1190 | ###################################################### | ||||
| 1191 | |||||
| 1192 | sub create_unique_directory | ||||
| 1193 | { | ||||
| 1194 | my ($directory) = @_; | ||||
| 1195 | |||||
| 1196 | $directory =~ s/\Q$installer::globals::separator\E\s*$//; | ||||
| 1197 | $directory = $directory . "_INCREASINGNUMBER"; | ||||
| 1198 | |||||
| 1199 | my $counter = 1; | ||||
| 1200 | my $created = 0; | ||||
| 1201 | my $localdirectory = ""; | ||||
| 1202 | |||||
| 1203 | do | ||||
| 1204 | { | ||||
| 1205 | $localdirectory = $directory; | ||||
| 1206 | $localdirectory =~ s/INCREASINGNUMBER/$counter/; | ||||
| 1207 | $counter++; | ||||
| 1208 | |||||
| 1209 | if ( ! -d $localdirectory ) | ||||
| 1210 | { | ||||
| 1211 | create_directory($localdirectory); | ||||
| 1212 | $created = 1; | ||||
| 1213 | } | ||||
| 1214 | } | ||||
| 1215 | while ( ! $created ); | ||||
| 1216 | |||||
| 1217 | return $localdirectory; | ||||
| 1218 | } | ||||
| 1219 | |||||
| 1220 | ###################################################### | ||||
| 1221 | # Creating a unique directory with pid extension | ||||
| 1222 | ###################################################### | ||||
| 1223 | |||||
| 1224 | sub create_pid_directory | ||||
| 1225 | # spent 1.62ms (51µs+1.57) within installer::systemactions::create_pid_directory which was called:
# once (51µs+1.57ms) by installer::parameter::setglobalvariables at line 389 of /cygdrive/c/lo/libo-master/instsetoo_native/util/C:/lo/libo-master/solenv/bin/modules/installer/parameter.pm | ||||
| 1226 | 7 | 310µs | my ($directory) = @_; | ||
| 1227 | |||||
| 1228 | 2 | 18µs | $directory =~ s/\Q$installer::globals::separator\E\s*$//; # spent 14µs making 1 call to installer::systemactions::CORE:regcomp
# spent 4µs making 1 call to installer::systemactions::CORE:subst | ||
| 1229 | my $pid = $$; # process id | ||||
| 1230 | my $time = time(); # time | ||||
| 1231 | |||||
| 1232 | $directory = $directory . "_" . $pid . $time; | ||||
| 1233 | |||||
| 1234 | 2 | 1.55ms | if ( ! -d $directory ) { create_directory($directory); } # spent 1.31ms making 1 call to installer::systemactions::create_directory
# spent 241µs making 1 call to installer::systemactions::CORE:ftdir | ||
| 1235 | else { installer::exiter::exit_program("ERROR: Directory $directory already exists!", "create_pid_directory"); } | ||||
| 1236 | |||||
| 1237 | return $directory; | ||||
| 1238 | } | ||||
| 1239 | |||||
| 1240 | ############################################################## | ||||
| 1241 | # Reading all files from a directory and its subdirectories | ||||
| 1242 | ############################################################## | ||||
| 1243 | |||||
| 1244 | sub read_complete_directory | ||||
| 1245 | { | ||||
| 1246 | my ($directory, $pathstring, $filecollector) = @_; | ||||
| 1247 | |||||
| 1248 | my @content = (); | ||||
| 1249 | opendir(DIR, $directory); | ||||
| 1250 | @content = readdir(DIR); | ||||
| 1251 | closedir(DIR); | ||||
| 1252 | |||||
| 1253 | my $onefile; | ||||
| 1254 | |||||
| 1255 | foreach $onefile (@content) | ||||
| 1256 | { | ||||
| 1257 | if ((!($onefile eq ".")) && (!($onefile eq ".."))) | ||||
| 1258 | { | ||||
| 1259 | my $completefilename = $directory . $installer::globals::separator . $onefile; | ||||
| 1260 | my $sep = ""; | ||||
| 1261 | if ( $pathstring ne "" ) { $sep = $installer::globals::separator; } | ||||
| 1262 | |||||
| 1263 | if ( ! -d $completefilename ) # only files, no directories | ||||
| 1264 | { | ||||
| 1265 | my $content = $pathstring . $sep . $onefile; | ||||
| 1266 | push(@{$filecollector}, $content); | ||||
| 1267 | } | ||||
| 1268 | else # recursive for directories | ||||
| 1269 | { | ||||
| 1270 | my $newpathstring = $pathstring . $sep . $onefile; | ||||
| 1271 | read_complete_directory($completefilename, $newpathstring, $filecollector); | ||||
| 1272 | } | ||||
| 1273 | } | ||||
| 1274 | } | ||||
| 1275 | } | ||||
| 1276 | |||||
| 1277 | ############################################################## | ||||
| 1278 | # Reading all files from a directory and its subdirectories | ||||
| 1279 | # Version 2 | ||||
| 1280 | ############################################################## | ||||
| 1281 | |||||
| 1282 | # spent 2.64s (236ms+2.40) within installer::systemactions::read_full_directory which was called 497 times, avg 5.31ms/call:
# 487 times (58.5ms+-58.5ms) by installer::systemactions::read_full_directory at line 1302, avg 0s/call
# 10 times (178ms+2.46s) by installer::worker::collect_all_files_from_includepaths at line 1038 of /cygdrive/c/lo/libo-master/instsetoo_native/util/C:/lo/libo-master/solenv/bin/modules/installer/worker.pm, avg 264ms/call | ||||
| 1283 | 3976 | 87.5ms | my ( $currentdir, $pathstring, $collector ) = @_; | ||
| 1284 | my $item; | ||||
| 1285 | my $fullname; | ||||
| 1286 | local *DH; | ||||
| 1287 | |||||
| 1288 | 497 | 42.4ms | unless (opendir(DH, $currentdir)) # spent 42.4ms making 497 calls to installer::systemactions::CORE:open_dir, avg 85µs/call | ||
| 1289 | { | ||||
| 1290 | return; | ||||
| 1291 | } | ||||
| 1292 | 1491 | 54.4ms | while (defined ($item = readdir(DH))) # spent 54.4ms making 1491 calls to installer::systemactions::CORE:readdir, avg 36µs/call | ||
| 1293 | { | ||||
| 1294 | 68499 | 2.47s | next if($item eq "." or $item eq ".."); | ||
| 1295 | $fullname = $currentdir . $installer::globals::separator . $item; | ||||
| 1296 | my $sep = ""; | ||||
| 1297 | if ( $pathstring ne "" ) { $sep = $installer::globals::separator; } | ||||
| 1298 | |||||
| 1299 | 27002 | 78.7ms | 27002 | 2.26s | if( -d $fullname) # spent 2.22s making 13501 calls to installer::systemactions::CORE:ftdir, avg 164µs/call
# spent 48.7ms making 13501 calls to installer::systemactions::CORE:readdir, avg 4µs/call |
| 1300 | { | ||||
| 1301 | my $newpathstring = $pathstring . $sep . $item; | ||||
| 1302 | 974 | 32.2ms | read_full_directory($fullname, $newpathstring, $collector) if(-d $fullname); # spent 32.2ms making 487 calls to installer::systemactions::CORE:ftdir, avg 66µs/call
# spent 1.64s making 487 calls to installer::systemactions::read_full_directory, avg 3.36ms/call, recursion: max depth 7, sum of overlapping time 1.64s | ||
| 1303 | } | ||||
| 1304 | else | ||||
| 1305 | { | ||||
| 1306 | my $content = $pathstring . $sep . $item; | ||||
| 1307 | push(@{$collector}, $content); | ||||
| 1308 | } | ||||
| 1309 | } | ||||
| 1310 | 497 | 9.90ms | closedir(DH); # spent 9.90ms making 497 calls to installer::systemactions::CORE:closedir, avg 20µs/call | ||
| 1311 | return | ||||
| 1312 | } | ||||
| 1313 | |||||
| 1314 | ############################################################## | ||||
| 1315 | # Removing all empty directories below a specified directory | ||||
| 1316 | ############################################################## | ||||
| 1317 | |||||
| 1318 | sub remove_empty_dirs_in_folder | ||||
| 1319 | { | ||||
| 1320 | my ( $dir ) = @_; | ||||
| 1321 | |||||
| 1322 | my @content = (); | ||||
| 1323 | my $infoline = ""; | ||||
| 1324 | |||||
| 1325 | $dir =~ s/\Q$installer::globals::separator\E\s*$//; | ||||
| 1326 | |||||
| 1327 | if ( -d $dir ) | ||||
| 1328 | { | ||||
| 1329 | opendir(DIR, $dir); | ||||
| 1330 | @content = readdir(DIR); | ||||
| 1331 | closedir(DIR); | ||||
| 1332 | |||||
| 1333 | my $oneitem; | ||||
| 1334 | |||||
| 1335 | foreach $oneitem (@content) | ||||
| 1336 | { | ||||
| 1337 | if ((!($oneitem eq ".")) && (!($oneitem eq ".."))) | ||||
| 1338 | { | ||||
| 1339 | my $item = $dir . $installer::globals::separator . $oneitem; | ||||
| 1340 | |||||
| 1341 | if ( -d $item ) # recursive | ||||
| 1342 | { | ||||
| 1343 | remove_empty_dirs_in_folder($item); | ||||
| 1344 | } | ||||
| 1345 | } | ||||
| 1346 | } | ||||
| 1347 | |||||
| 1348 | # try to remove empty directory | ||||
| 1349 | my $returnvalue = rmdir $dir; | ||||
| 1350 | |||||
| 1351 | if ( $returnvalue ) | ||||
| 1352 | { | ||||
| 1353 | $infoline = "Successfully removed empty dir $dir\n"; | ||||
| 1354 | push(@installer::globals::logfileinfo, $infoline); | ||||
| 1355 | } | ||||
| 1356 | |||||
| 1357 | } | ||||
| 1358 | |||||
| 1359 | } | ||||
| 1360 | |||||
| 1361 | 1 | 7µs | 1; | ||
# spent 4.54s within installer::systemactions::CORE:backtick which was called 13 times, avg 349ms/call:
# 13 times (4.54s+0s) by installer::systemactions::create_directories at line 270, avg 349ms/call | |||||
# spent 1.33s within installer::systemactions::CORE:chmod which was called 8868 times, avg 150µs/call:
# 7903 times (1.16s+0s) by installer::systemactions::copy_one_file at line 321, avg 147µs/call
# 816 times (136ms+0s) by installer::systemactions::create_directory_with_privileges at line 70, avg 167µs/call
# 149 times (31.5ms+0s) by installer::systemactions::create_directory_with_privileges at line 153, avg 211µs/call | |||||
# spent 66.7ms within installer::systemactions::CORE:closedir which was called 3066 times, avg 22µs/call:
# 1914 times (40.6ms+0s) by installer::systemactions::remove_complete_directory at line 1128, avg 21µs/call
# 497 times (9.90ms+0s) by installer::systemactions::read_full_directory at line 1310, avg 20µs/call
# 218 times (6.05ms+0s) by installer::systemactions::copy_directory_with_fileextension at line 653, avg 28µs/call
# 218 times (4.98ms+0s) by installer::systemactions::copy_directory at line 444, avg 23µs/call
# 110 times (2.73ms+0s) by installer::systemactions::find_file_with_file_extension at line 737, avg 25µs/call
# 109 times (2.51ms+0s) by installer::systemactions::rename_files_with_fileextension at line 695, avg 23µs/call | |||||
# spent 4.72s within installer::systemactions::CORE:ftdir which was called 29363 times, avg 161µs/call:
# 13501 times (2.22s+0s) by installer::systemactions::read_full_directory at line 1299, avg 164µs/call
# 10580 times (1.79s+0s) by installer::systemactions::remove_complete_directory at line 1143, avg 170µs/call
# 1914 times (368ms+0s) by installer::systemactions::remove_complete_directory at line 1161, avg 192µs/call
# 1914 times (145ms+0s) by installer::systemactions::remove_complete_directory at line 1116, avg 76µs/call
# 965 times (163ms+0s) by installer::systemactions::create_directory_with_privileges at line 61, avg 169µs/call
# 487 times (32.2ms+0s) by installer::systemactions::read_full_directory at line 1302, avg 66µs/call
# once (318µs+0s) by installer::systemactions::rename_string_in_directory at line 818
# once (241µs+0s) by installer::systemactions::create_pid_directory at line 1234 | |||||
# spent 1.57s within installer::systemactions::CORE:fteexec which was called 7903 times, avg 198µs/call:
# 7903 times (1.57s+0s) by installer::systemactions::copy_one_file at line 319, avg 198µs/call | |||||
# spent 6.80s within installer::systemactions::CORE:ftfile which was called 25568 times, avg 266µs/call:
# 10580 times (1.02s+0s) by installer::systemactions::remove_complete_directory at line 1138, avg 96µs/call
# 7903 times (1.50s+0s) by installer::systemactions::copy_one_file at line 318, avg 190µs/call
# 4796 times (816ms+0s) by installer::systemactions::copy_directory at line 454, avg 170µs/call
# 1853 times (3.39s+0s) by installer::systemactions::copy_directory_with_fileextension at line 665, avg 1.83ms/call
# 436 times (78.9ms+0s) by installer::systemactions::rename_files_with_fileextension at line 708, avg 181µs/call | |||||
# spent 151ms within installer::systemactions::CORE:ftlink which was called 1911 times, avg 79µs/call:
# 1911 times (151ms+0s) by installer::systemactions::remove_complete_directory at line 1138, avg 79µs/call | |||||
# spent 130ms within installer::systemactions::CORE:match which was called 109690 times, avg 1µs/call:
# 97882 times (108ms+0s) by installer::systemactions::copy_directory_with_fileextension at line 661, avg 1µs/call
# 5125 times (11.1ms+0s) by installer::systemactions::find_file_with_file_extension at line 745, avg 2µs/call
# 5123 times (5.44ms+0s) by installer::systemactions::rename_files_with_fileextension at line 703, avg 1µs/call
# 1512 times (4.81ms+0s) by installer::systemactions::get_number_of_langs at line 172, avg 3µs/call
# 20 times (29µs+0s) by installer::systemactions::create_directories at line 225, avg 1µs/call
# 14 times (130µs+0s) by installer::systemactions::get_number_of_langs at line 169, avg 9µs/call
# 14 times (45µs+0s) by installer::systemactions::create_directories at line 190, avg 3µs/call | |||||
# spent 333ms within installer::systemactions::CORE:mkdir which was called 816 times, avg 408µs/call:
# 816 times (333ms+0s) by installer::systemactions::create_directory_with_privileges at line 63, avg 408µs/call | |||||
# spent 284ms within installer::systemactions::CORE:open_dir which was called 3066 times, avg 93µs/call:
# 1914 times (171ms+0s) by installer::systemactions::remove_complete_directory at line 1126, avg 89µs/call
# 497 times (42.4ms+0s) by installer::systemactions::read_full_directory at line 1288, avg 85µs/call
# 218 times (22.7ms+0s) by installer::systemactions::copy_directory at line 442, avg 104µs/call
# 218 times (22.5ms+0s) by installer::systemactions::copy_directory_with_fileextension at line 651, avg 103µs/call
# 110 times (14.9ms+0s) by installer::systemactions::find_file_with_file_extension at line 735, avg 136µs/call
# 109 times (11.0ms+0s) by installer::systemactions::rename_files_with_fileextension at line 693, avg 101µs/call | |||||
# spent 763ms within installer::systemactions::CORE:readdir which was called 17561 times, avg 43µs/call:
# 13501 times (48.7ms+0s) by installer::systemactions::read_full_directory at line 1299, avg 4µs/call
# 1914 times (224ms+0s) by installer::systemactions::remove_complete_directory at line 1127, avg 117µs/call
# 1491 times (54.4ms+0s) by installer::systemactions::read_full_directory at line 1292, avg 36µs/call
# 218 times (373ms+0s) by installer::systemactions::copy_directory_with_fileextension at line 652, avg 1.71ms/call
# 218 times (27.9ms+0s) by installer::systemactions::copy_directory at line 443, avg 128µs/call
# 110 times (18.3ms+0s) by installer::systemactions::find_file_with_file_extension at line 736, avg 166µs/call
# 109 times (17.2ms+0s) by installer::systemactions::rename_files_with_fileextension at line 694, avg 158µs/call | |||||
# spent 95.5ms within installer::systemactions::CORE:regcomp which was called 111164 times, avg 859ns/call:
# 97882 times (77.5ms+0s) by installer::systemactions::copy_directory_with_fileextension at line 661, avg 792ns/call
# 5125 times (4.36ms+0s) by installer::systemactions::find_file_with_file_extension at line 745, avg 850ns/call
# 5123 times (8.49ms+0s) by installer::systemactions::rename_files_with_fileextension at line 703, avg 2µs/call
# 1914 times (2.52ms+0s) by installer::systemactions::remove_complete_directory at line 1114, avg 1µs/call
# 218 times (750µs+0s) by installer::systemactions::copy_directory at line 434, avg 3µs/call
# 218 times (610µs+0s) by installer::systemactions::copy_directory_with_fileextension at line 643, avg 3µs/call
# 218 times (297µs+0s) by installer::systemactions::copy_directory at line 435, avg 1µs/call
# 218 times (289µs+0s) by installer::systemactions::copy_directory_with_fileextension at line 644, avg 1µs/call
# 110 times (347µs+0s) by installer::systemactions::find_file_with_file_extension at line 728, avg 3µs/call
# 109 times (196µs+0s) by installer::systemactions::rename_files_with_fileextension at line 686, avg 2µs/call
# 20 times (82µs+0s) by installer::systemactions::create_directories at line 186, avg 4µs/call
# 6 times (35µs+0s) by installer::systemactions::create_directories at line 194, avg 6µs/call
# once (39µs+0s) by installer::systemactions::create_directory_next_to_directory at line 904
# once (26µs+0s) by installer::systemactions::rename_string_in_directory at line 816
# once (14µs+0s) by installer::systemactions::create_pid_directory at line 1228 | |||||
# spent 823ms within installer::systemactions::CORE:rename which was called 529 times, avg 1.56ms/call:
# 529 times (823ms+0s) by installer::systemactions::rename_one_file at line 405, avg 1.56ms/call | |||||
# spent 1.28s within installer::systemactions::CORE:rmdir which was called 1914 times, avg 669µs/call:
# 1914 times (1.28s+0s) by installer::systemactions::remove_complete_directory at line 1152, avg 669µs/call | |||||
# spent 2.55ms within installer::systemactions::CORE:sort which was called 110 times, avg 23µs/call:
# 110 times (2.55ms+0s) by installer::systemactions::find_file_with_file_extension at line 736, avg 23µs/call | |||||
# spent 20.5ms within installer::systemactions::CORE:subst which was called 3034 times, avg 7µs/call:
# 1914 times (12.3ms+0s) by installer::systemactions::remove_complete_directory at line 1114, avg 6µs/call
# 218 times (2.45ms+0s) by installer::systemactions::copy_directory at line 434, avg 11µs/call
# 218 times (2.16ms+0s) by installer::systemactions::copy_directory_with_fileextension at line 643, avg 10µs/call
# 218 times (859µs+0s) by installer::systemactions::copy_directory at line 435, avg 4µs/call
# 218 times (824µs+0s) by installer::systemactions::copy_directory_with_fileextension at line 644, avg 4µs/call
# 110 times (878µs+0s) by installer::systemactions::find_file_with_file_extension at line 728, avg 8µs/call
# 109 times (852µs+0s) by installer::systemactions::rename_files_with_fileextension at line 686, avg 8µs/call
# 20 times (180µs+0s) by installer::systemactions::create_directories at line 186, avg 9µs/call
# 6 times (18µs+0s) by installer::systemactions::create_directories at line 194, avg 3µs/call
# once (6µs+0s) by installer::systemactions::create_directory_next_to_directory at line 904
# once (5µs+0s) by installer::systemactions::rename_string_in_directory at line 816
# once (4µs+0s) by installer::systemactions::create_pid_directory at line 1228 | |||||
# spent 1.85s within installer::systemactions::CORE:unlink which was called 8669 times, avg 214µs/call:
# 8669 times (1.85s+0s) by installer::systemactions::remove_complete_directory at line 1138, avg 214µs/call |