From c5f5520013102ccdbec051701e12e96068423f0b Mon Sep 17 00:00:00 2001 From: Tristan Darricau Date: Mon, 5 May 2014 12:06:37 +0200 Subject: [PATCH 1/6] [ticket/12325] Generate the list of the deleted files and folders https://tracker.phpbb.com/browse/PHPBB3-12325 PHPBB3-12325 --- build/build.xml | 1 + build/build_helper.php | 34 ++++++++++++++++++++++++++++++++++ build/package.php | 13 +++++++++++++ 3 files changed, 48 insertions(+) diff --git a/build/build.xml b/build/build.xml index 01fb48a383..79b6096c97 100644 --- a/build/build.xml +++ b/build/build.xml @@ -141,6 +141,7 @@ + diff --git a/build/build_helper.php b/build/build_helper.php index d6169b913b..756176a135 100644 --- a/build/build_helper.php +++ b/build/build_helper.php @@ -312,4 +312,38 @@ class build_package return $result; } + + function collect_deleted_files($deleted_filename, $package_name) + { + $result = array(); + $file_contents = file($deleted_filename); + + foreach ($file_contents as $line) + { + $line = trim($line); + + if (!$line) + { + continue; + } + + $line = str_replace('Only in ' . $package_name, '', $line); + + if (substr(0, 1, $line) == '/') + { + $replace = ''; + } + else + { + $replace = '/'; + } + + $line = str_replace(': ', $replace, $line); + $line = ltrim($line, '/'); + + $result[] = $line; + } + + return $result; + } } diff --git a/build/package.php b/build/package.php index 00930abe65..206e3b6640 100755 --- a/build/package.php +++ b/build/package.php @@ -45,6 +45,10 @@ if (sizeof($package->old_packages)) $package->get('patch_directory') . '/phpBB-' . $dest_package_filename . $package->get('new_version_number') . '.patch', $_package_name ); + $diff_file_changes[$_package_name]['deleted'] = $package->collect_deleted_files( + $package->get('patch_directory') . '/phpBB-' . $dest_package_filename . $package->get('new_version_number') . '.deleted', + $_package_name + ); } // Now put those files determined within the correct directories @@ -292,6 +296,15 @@ $update_info = array( $index_contents .= "\t'binary' => array(),\n"; } + if (sizeof($file_contents['deleted'])) + { + $index_contents .= "\t'deleted' => array(\n\t\t'" . implode("',\n\t\t'", $file_contents['deleted']) . "',\n\t),\n"; + } + else + { + $index_contents .= "\t'deleted' => array(),\n"; + } + $index_contents .= ");\n"; $fp = fopen($dest_filename_dir . '/install/update/index.php', 'wt'); From 81ac5e7a0085fb972af8aaf13f0da337f3971c6f Mon Sep 17 00:00:00 2001 From: Tristan Darricau Date: Mon, 5 May 2014 16:19:09 +0200 Subject: [PATCH 2/6] [ticket/12325] Add files located in deleted dirs PHPBB3-12325 --- build/build_helper.php | 32 +++++++++++++++++++++++++++++--- 1 file changed, 29 insertions(+), 3 deletions(-) diff --git a/build/build_helper.php b/build/build_helper.php index 756176a135..4300803872 100644 --- a/build/build_helper.php +++ b/build/build_helper.php @@ -328,8 +328,9 @@ class build_package } $line = str_replace('Only in ' . $package_name, '', $line); + $line = ltrim($line, '/'); - if (substr(0, 1, $line) == '/') + if (substr($line, 0, 1) == ':') { $replace = ''; } @@ -339,11 +340,36 @@ class build_package } $line = str_replace(': ', $replace, $line); - $line = ltrim($line, '/'); - $result[] = $line; + if (is_dir("{$this->locations['old_versions']}{$package_name}/{$line}")) + { + $this->add_files_recursive($result, "{$this->locations['old_versions']}{$package_name}/{$line}", $line); + } + else + { + $result[] = $line; + } } return $result; } + + function add_files_recursive(array &$result, $directory_absolute, $directory) + { + $files = scandir($directory_absolute); + foreach ($files as $file) + { + if (is_dir($directory_absolute . '/' . $file)) + { + if ($file != '.' && $file != '..') + { + $this->add_files_recursive($result, $directory_absolute . '/' . $file, $directory . '/' . $file); + } + } + else + { + $result[] = $directory . '/' . $file; + } + } + } } From f6a8485dae5b0d4e456c79bac6e599178cfffa73 Mon Sep 17 00:00:00 2001 From: Tristan Darricau Date: Mon, 5 May 2014 16:27:16 +0200 Subject: [PATCH 3/6] [ticket/12325] Add visibilities PHPBB3-12325 --- build/build_helper.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/build/build_helper.php b/build/build_helper.php index 4300803872..169d9b5357 100644 --- a/build/build_helper.php +++ b/build/build_helper.php @@ -313,7 +313,7 @@ class build_package return $result; } - function collect_deleted_files($deleted_filename, $package_name) + public function collect_deleted_files($deleted_filename, $package_name) { $result = array(); $file_contents = file($deleted_filename); @@ -354,7 +354,7 @@ class build_package return $result; } - function add_files_recursive(array &$result, $directory_absolute, $directory) + private function add_files_recursive(array &$result, $directory_absolute, $directory) { $files = scandir($directory_absolute); foreach ($files as $file) From 21f06ac9e6e371b117815b3d792544b4b4319c30 Mon Sep 17 00:00:00 2001 From: Tristan Darricau Date: Mon, 5 May 2014 18:16:42 +0200 Subject: [PATCH 4/6] [ticket/12325] Change private function to protected PHPBB3-12325 --- build/build_helper.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build/build_helper.php b/build/build_helper.php index 169d9b5357..7330e1e8c7 100644 --- a/build/build_helper.php +++ b/build/build_helper.php @@ -354,7 +354,7 @@ class build_package return $result; } - private function add_files_recursive(array &$result, $directory_absolute, $directory) + protected function add_files_recursive(array &$result, $directory_absolute, $directory) { $files = scandir($directory_absolute); foreach ($files as $file) From cd5129f261b19d4e74188f652a72bd71504b439b Mon Sep 17 00:00:00 2001 From: Tristan Darricau Date: Tue, 6 May 2014 10:53:54 +0200 Subject: [PATCH 5/6] [ticket/12325] Doc blocks PHPBB3-12325 --- build/build_helper.php | 24 +++++++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) diff --git a/build/build_helper.php b/build/build_helper.php index 7330e1e8c7..6a0fc0042e 100644 --- a/build/build_helper.php +++ b/build/build_helper.php @@ -313,6 +313,13 @@ class build_package return $result; } + /** + * Collect the list of the deleted files from a list of deleted files and folders. + * + * @param string $deleted_filename The full path to a file containing the list of deleted files and directories + * @param string $package_name The name of the package + * @return array + */ public function collect_deleted_files($deleted_filename, $package_name) { $result = array(); @@ -343,7 +350,7 @@ class build_package if (is_dir("{$this->locations['old_versions']}{$package_name}/{$line}")) { - $this->add_files_recursive($result, "{$this->locations['old_versions']}{$package_name}/{$line}", $line); + $result = array_merge($result, $this->get_files_recursive("{$this->locations['old_versions']}{$package_name}/{$line}", $line)); } else { @@ -354,16 +361,25 @@ class build_package return $result; } - protected function add_files_recursive(array &$result, $directory_absolute, $directory) + /** + * Get recursively the list of the files contained in a directory + * + * @param string $directory_absolute Absolute path to the directory + * @param string $directory Relative path to the directory (used to prefixed the name of the files) + * @return array + */ + protected function get_files_recursive($directory_absolute, $directory) { + $result = array(); $files = scandir($directory_absolute); + foreach ($files as $file) { if (is_dir($directory_absolute . '/' . $file)) { if ($file != '.' && $file != '..') { - $this->add_files_recursive($result, $directory_absolute . '/' . $file, $directory . '/' . $file); + $result = array_merge($result, $this->get_files_recursive($directory_absolute . '/' . $file, $directory . '/' . $file)); } } else @@ -371,5 +387,7 @@ class build_package $result[] = $directory . '/' . $file; } } + + return $result; } } From e4beea0c1e2a2dc423d112cf14277b49cd4f1f4e Mon Sep 17 00:00:00 2001 From: Tristan Darricau Date: Tue, 6 May 2014 13:27:36 +0200 Subject: [PATCH 6/6] [ticket/12325] Use \RecursiveDirectoryIterator PHPBB3-12325 --- build/build_helper.php | 55 ++++++++++++++---------------------------- 1 file changed, 18 insertions(+), 37 deletions(-) diff --git a/build/build_helper.php b/build/build_helper.php index 6a0fc0042e..7c75206d6d 100644 --- a/build/build_helper.php +++ b/build/build_helper.php @@ -325,19 +325,19 @@ class build_package $result = array(); $file_contents = file($deleted_filename); - foreach ($file_contents as $line) + foreach ($file_contents as $filename) { - $line = trim($line); + $filename = trim($filename); - if (!$line) + if (!$filename) { continue; } - $line = str_replace('Only in ' . $package_name, '', $line); - $line = ltrim($line, '/'); + $filename = str_replace('Only in ' . $package_name, '', $filename); + $filename = ltrim($filename, '/'); - if (substr($line, 0, 1) == ':') + if (substr($filename, 0, 1) == ':') { $replace = ''; } @@ -346,45 +346,26 @@ class build_package $replace = '/'; } - $line = str_replace(': ', $replace, $line); + $filename = str_replace(': ', $replace, $filename); - if (is_dir("{$this->locations['old_versions']}{$package_name}/{$line}")) + if (is_dir("{$this->locations['old_versions']}{$package_name}/{$filename}")) { - $result = array_merge($result, $this->get_files_recursive("{$this->locations['old_versions']}{$package_name}/{$line}", $line)); - } - else - { - $result[] = $line; - } - } + $iterator = new \RecursiveIteratorIterator( + new \RecursiveDirectoryIterator( + "{$this->locations['old_versions']}{$package_name}/{$filename}", + \FilesystemIterator::UNIX_PATHS | \FilesystemIterator::SKIP_DOTS + ), + \RecursiveIteratorIterator::LEAVES_ONLY + ); - return $result; - } - - /** - * Get recursively the list of the files contained in a directory - * - * @param string $directory_absolute Absolute path to the directory - * @param string $directory Relative path to the directory (used to prefixed the name of the files) - * @return array - */ - protected function get_files_recursive($directory_absolute, $directory) - { - $result = array(); - $files = scandir($directory_absolute); - - foreach ($files as $file) - { - if (is_dir($directory_absolute . '/' . $file)) - { - if ($file != '.' && $file != '..') + foreach ($iterator as $file_info) { - $result = array_merge($result, $this->get_files_recursive($directory_absolute . '/' . $file, $directory . '/' . $file)); + $result[] = "{$filename}/{$iterator->getSubPathname()}"; } } else { - $result[] = $directory . '/' . $file; + $result[] = $filename; } }