diff options
author | Marc Alexander <admin@m-a-styles.de> | 2017-01-25 22:18:29 +0100 |
---|---|---|
committer | Marc Alexander <admin@m-a-styles.de> | 2017-01-25 22:18:29 +0100 |
commit | f66594bf93ca2604be73ef094555af571a55ea9b (patch) | |
tree | e4c2574dd2b7e32d4459e77b0fb019721c51e398 /phpBB/phpbb/install/module/update_filesystem | |
parent | 903d6be3bbd9671079ad1310d3af01cd2e8d24eb (diff) | |
download | forums-f66594bf93ca2604be73ef094555af571a55ea9b.tar forums-f66594bf93ca2604be73ef094555af571a55ea9b.tar.gz forums-f66594bf93ca2604be73ef094555af571a55ea9b.tar.bz2 forums-f66594bf93ca2604be73ef094555af571a55ea9b.tar.xz forums-f66594bf93ca2604be73ef094555af571a55ea9b.zip |
[ticket/15050] Use new file when new file already exists
Instead of trying to diff the new file against a pre-existing file,
we're just going to use the new file. It's impossible to know whether
the pre-existing file is newer or older than the new file. As the
system will rely on the files being in the "new" state it's better
to simply use the file in "new" state.
PHPBB3-15050
Diffstat (limited to 'phpBB/phpbb/install/module/update_filesystem')
-rw-r--r-- | phpBB/phpbb/install/module/update_filesystem/task/diff_files.php | 71 |
1 files changed, 46 insertions, 25 deletions
diff --git a/phpBB/phpbb/install/module/update_filesystem/task/diff_files.php b/phpBB/phpbb/install/module/update_filesystem/task/diff_files.php index e3e6db6263..0c3658bd44 100644 --- a/phpBB/phpbb/install/module/update_filesystem/task/diff_files.php +++ b/phpBB/phpbb/install/module/update_filesystem/task/diff_files.php @@ -132,41 +132,62 @@ class diff_files extends task_base $file_contents = array(); // Handle the special case when user created a file with the filename that is now new in the core - $file_contents[0] = (file_exists($old_path . $filename)) ? file_get_contents($old_path . $filename) : ''; + if (file_exists($old_path . $filename)) + { + $file_contents[0] = file_get_contents($old_path . $filename); - $filenames = array( - $this->phpbb_root_path . $filename, - $new_path . $filename - ); + $filenames = array( + $this->phpbb_root_path . $filename, + $new_path . $filename + ); - foreach ($filenames as $file_to_diff) - { - $file_contents[] = file_get_contents($file_to_diff); + foreach ($filenames as $file_to_diff) + { + $file_contents[] = file_get_contents($file_to_diff); + + if ($file_contents[sizeof($file_contents) - 1] === false) + { + $this->iohandler->add_error_message(array('FILE_DIFFER_ERROR_FILE_CANNOT_BE_READ', $files_to_diff)); + unset($file_contents); + throw new user_interaction_required_exception(); + } + } - if ($file_contents[sizeof($file_contents) - 1] === false) + $diff = new \diff3($file_contents[0], $file_contents[1], $file_contents[2]); + unset($file_contents); + + // Handle conflicts + if ($diff->get_num_conflicts() !== 0) { - $this->iohandler->add_error_message(array('FILE_DIFFER_ERROR_FILE_CANNOT_BE_READ', $files_to_diff)); - unset($file_contents); - throw new user_interaction_required_exception(); + $merge_conflicts[] = $filename; } - } - $diff = new \diff3($file_contents[0], $file_contents[1], $file_contents[2]); - unset($file_contents); + // Save merged output + $this->cache->put( + '_file_' . md5($filename), + base64_encode(implode("\n", $diff->merged_output())) + ); - // Handle conflicts - if ($diff->get_num_conflicts() !== 0) - { - $merge_conflicts[] = $filename; + unset($diff); } + else + { + $new_file_content = file_get_contents($new_path . $filename); - // Save merged output - $this->cache->put( - '_file_' . md5($filename), - base64_encode(implode("\n", $diff->merged_output())) - ); + if ($new_file_content === false) + { + $this->iohandler->add_error_message(array('FILE_DIFFER_ERROR_FILE_CANNOT_BE_READ', $files_to_diff)); + unset($new_file_content ); + throw new user_interaction_required_exception(); + } - unset($diff); + // Save new file content to cache + $this->cache->put( + '_file_' . md5($filename), + base64_encode($new_file_content) + ); + unset($new_file_content); + } $progress_count++; $this->iohandler->set_progress('UPDATE_FILE_DIFF', $progress_count); |