]> git.wh0rd.org Git - tt-rss.git/commitdiff
fix several issues with updater (refs #562)
authorAndrew Dolgov <fox@madoka.volgo-balt.ru>
Sat, 16 Mar 2013 10:53:10 +0000 (14:53 +0400)
committerAndrew Dolgov <fox@madoka.volgo-balt.ru>
Sat, 16 Mar 2013 10:53:10 +0000 (14:53 +0400)
plugins/updater/init.php

index 50a1a33efb9c6ee67a04e6e338df9b7f55c05f06..d940aefeb5eb34a02c2f41566337e45c117baa32 100644 (file)
@@ -27,219 +27,222 @@ class Updater extends Plugin {
                $work_dir = dirname(dirname(dirname(__FILE__)));
                $parent_dir = dirname($work_dir);
 
+               $log = array();
+               if (!is_array($params)) $params = array();
+
+               $stop = false;
+
                if (!chdir($work_dir)) {
                        array_push($log, "Unable to change to work directory: $work_dir");
-                       $stop = true; break;
+                       $stop = true;
                }
 
-               $stop = false;
-               $log = array();
-               if (!is_array($params)) $params = array();
-
-               switch ($step) {
-               case 0:
-                       array_push($log, "Work directory: $work_dir");
+               if (!$stop) {
+                       switch ($step) {
+                       case 0:
+                               array_push($log, "Work directory: $work_dir");
 
-                       if (!is_writable($work_dir) && !is_writable("$parent_dir")) {
-                               $user = posix_getpwuid(posix_geteuid());
-                               $user = $user["name"];
-                               array_push($log, "Both tt-rss and parent directories should be writable as current user ($user).");
-                               $stop = true; break;
-                       }
+                               if (!is_writable($work_dir) && !is_writable("$parent_dir")) {
+                                       $user = posix_getpwuid(posix_geteuid());
+                                       $user = $user["name"];
+                                       array_push($log, "Both tt-rss and parent directories should be writable as current user ($user).");
+                                       $stop = true; break;
+                               }
 
-                       if (!file_exists("$work_dir/config.php") || !file_exists("$work_dir/include/sanity_check.php")) {
-                               array_push($log, "Work directory $work_dir doesn't look like tt-rss installation.");
-                               $stop = true; break;
-                       }
+                               if (!file_exists("$work_dir/config.php") || !file_exists("$work_dir/include/sanity_check.php")) {
+                                       array_push($log, "Work directory $work_dir doesn't look like tt-rss installation.");
+                                       $stop = true; break;
+                               }
 
-                       if (!is_writable(sys_get_temp_dir())) {
-                               array_push($log, "System temporary directory should be writable as current user.");
-                               $stop = true; break;
-                       }
+                               if (!is_writable(sys_get_temp_dir())) {
+                                       array_push($log, "System temporary directory should be writable as current user.");
+                                       $stop = true; break;
+                               }
 
-                       array_push($log, "Checking for tar...");
+                               array_push($log, "Checking for tar...");
 
-                       $system_rc = 0;
-                       system("which tar >/dev/null", $system_rc);
+                               $system_rc = 0;
+                               system("which tar >/dev/null", $system_rc);
 
-                       if ($system_rc != 0) {
-                               array_push($log, "Could not run tar executable (RC=$system_rc).");
-                               $stop = true; break;
-                       }
+                               if ($system_rc != 0) {
+                                       array_push($log, "Could not run tar executable (RC=$system_rc).");
+                                       $stop = true; break;
+                               }
 
-                       array_push($log, "Checking for gunzip...");
+                               array_push($log, "Checking for gunzip...");
 
-                       $system_rc = 0;
-                       system("which gunzip >/dev/null", $system_rc);
+                               $system_rc = 0;
+                               system("which gunzip >/dev/null", $system_rc);
 
-                       if ($system_rc != 0) {
-                               array_push($log, "Could not run gunzip executable (RC=$system_rc).");
-                               $stop = true; break;
-                       }
+                               if ($system_rc != 0) {
+                                       array_push($log, "Could not run gunzip executable (RC=$system_rc).");
+                                       $stop = true; break;
+                               }
 
 
-                       array_push($log, "Checking for latest version...");
+                               array_push($log, "Checking for latest version...");
 
-                       $version_info = json_decode(fetch_file_contents("http://tt-rss.org/version.php"),
-                               true);
+                               $version_info = json_decode(fetch_file_contents("http://tt-rss.org/version.php"),
+                                       true);
 
-                       if (!is_array($version_info)) {
-                               array_push($log, "Unable to fetch version information.");
-                               $stop = true; break;
-                       }
+                               if (!is_array($version_info)) {
+                                       array_push($log, "Unable to fetch version information.");
+                                       $stop = true; break;
+                               }
 
-                       $target_version = $version_info["version"];
-                       $target_dir = "$parent_dir/tt-rss-$target_version";
+                               $target_version = $version_info["version"];
+                               $target_dir = "$parent_dir/tt-rss-$target_version";
 
-                       array_push($log, "Target version: $target_version");
-                       $params["target_version"] = $target_version;
+                               array_push($log, "Target version: $target_version");
+                               $params["target_version"] = $target_version;
 
-                       if (version_compare(VERSION, $target_version) != -1 && !$force) {
-                               array_push($log, "Your Tiny Tiny RSS installation is up to date.");
-                               $stop = true; break;
-                       }
+                               if (version_compare(VERSION, $target_version) != -1 && !$force) {
+                                       array_push($log, "Your Tiny Tiny RSS installation is up to date.");
+                                       $stop = true; break;
+                               }
 
-                       if (file_exists($target_dir)) {
-                               array_push($log, "Target directory $target_dir already exists.");
-                               $stop = true; break;
-                       }
+                               if (file_exists($target_dir)) {
+                                       array_push($log, "Target directory $target_dir already exists.");
+                                       $stop = true; break;
+                               }
 
-                       break;
-               case 1:
-                       $target_version = $params["target_version"];
+                               break;
+                       case 1:
+                               $target_version = $params["target_version"];
 
-                       array_push($log, "Downloading checksums...");
-                       $md5sum_data = fetch_file_contents("http://tt-rss.org/download/md5sum.txt");
+                               array_push($log, "Downloading checksums...");
+                               $md5sum_data = fetch_file_contents("http://tt-rss.org/download/md5sum.txt");
 
-                       if (!$md5sum_data) {
-                               array_push($log, "Could not download checksums.");
-                               $stop = true; break;
-                       }
+                               if (!$md5sum_data) {
+                                       array_push($log, "Could not download checksums.");
+                                       $stop = true; break;
+                               }
 
-                       $md5sum_data = explode("\n", $md5sum_data);
+                               $md5sum_data = explode("\n", $md5sum_data);
 
-                       foreach ($md5sum_data as $line) {
-                               $pair = explode("  ", $line);
+                               foreach ($md5sum_data as $line) {
+                                       $pair = explode("  ", $line);
 
-                               if ($pair[1] == "tt-rss-$target_version.tar.gz") {
-                                       $target_md5sum = $pair[0];
-                                       break;
+                                       if ($pair[1] == "tt-rss-$target_version.tar.gz") {
+                                               $target_md5sum = $pair[0];
+                                               break;
+                                       }
                                }
-                       }
 
-                       if (!$target_md5sum) {
-                               array_push($log, "Unable to locate checksum for target version.");
-                               $stop = true; break;
-                       }
+                               if (!$target_md5sum) {
+                                       array_push($log, "Unable to locate checksum for target version.");
+                                       $stop = true; break;
+                               }
 
-                       $params["target_md5sum"] = $target_md5sum;
+                               $params["target_md5sum"] = $target_md5sum;
 
-                       break;
-               case 2:
-                       $target_version = $params["target_version"];
-                       $target_md5sum = $params["target_md5sum"];
+                               break;
+                       case 2:
+                               $target_version = $params["target_version"];
+                               $target_md5sum = $params["target_md5sum"];
 
-                       array_push($log, "Downloading distribution tarball...");
+                               array_push($log, "Downloading distribution tarball...");
 
-                       $tarball_url = "http://tt-rss.org/download/tt-rss-$target_version.tar.gz";
-                       $data = fetch_file_contents($tarball_url);
+                               $tarball_url = "http://tt-rss.org/download/tt-rss-$target_version.tar.gz";
+                               $data = fetch_file_contents($tarball_url);
 
-                       if (!$data) {
-                               array_push($log, "Could not download distribution tarball ($tarball_url).");
-                               $stop = true; break;
-                       }
+                               if (!$data) {
+                                       array_push($log, "Could not download distribution tarball ($tarball_url).");
+                                       $stop = true; break;
+                               }
 
-                       array_push($log, "Verifying tarball checksum...");
+                               array_push($log, "Verifying tarball checksum...");
 
-                       $test_md5sum = md5($data);
+                               $test_md5sum = md5($data);
 
-                       if ($test_md5sum != $target_md5sum) {
-                               array_push($log, "Downloaded checksum doesn't match (got $test_md5sum, expected $target_md5sum).");
-                               $stop = true; break;
-                       }
+                               if ($test_md5sum != $target_md5sum) {
+                                       array_push($log, "Downloaded checksum doesn't match (got $test_md5sum, expected $target_md5sum).");
+                                       $stop = true; break;
+                               }
 
-                       $tmp_file = tempnam(sys_get_temp_dir(), 'tt-rss');
-                       array_push($log, "Saving download to $tmp_file");
+                               $tmp_file = tempnam(sys_get_temp_dir(), 'tt-rss');
+                               array_push($log, "Saving download to $tmp_file");
 
-                       if (!file_put_contents($tmp_file, $data)) {
-                               array_push($log, "Unable to save download.");
-                               $stop = true; break;
-                       }
+                               if (!file_put_contents($tmp_file, $data)) {
+                                       array_push($log, "Unable to save download.");
+                                       $stop = true; break;
+                               }
 
-                       $params["tmp_file"] = $tmp_file;
+                               $params["tmp_file"] = $tmp_file;
 
-                       break;
-               case 3:
-                       $tmp_file = $params["tmp_file"];
-                       $target_version = $params["target_version"];
+                               break;
+                       case 3:
+                               $tmp_file = $params["tmp_file"];
+                               $target_version = $params["target_version"];
 
-                       if (!chdir($parent_dir)) {
-                               array_push($log, "Unable to change into parent directory.");
-                               $stop = true; break;
-                       }
+                               if (!chdir($parent_dir)) {
+                                       array_push($log, "Unable to change into parent directory.");
+                                       $stop = true; break;
+                               }
 
-                       $old_dir = tmpdirname($parent_dir, "tt-rss-old");
+                               $old_dir = tmpdirname($parent_dir, "tt-rss-old");
 
-                       array_push($log, "Renaming tt-rss directory to ".basename($old_dir));
-                       if (!rename($work_dir, $old_dir)) {
-                               array_push($log, "Unable to rename tt-rss directory.");
-                               $stop = true; break;
-                       }
+                               array_push($log, "Renaming tt-rss directory to ".basename($old_dir));
+                               if (!rename($work_dir, $old_dir)) {
+                                       array_push($log, "Unable to rename tt-rss directory.");
+                                       $stop = true; break;
+                               }
 
-                       array_push($log, "Extracting tarball...");
-                       system("tar zxf $tmp_file", $system_rc);
+                               array_push($log, "Extracting tarball...");
+                               system("tar zxf $tmp_file", $system_rc);
 
-                       if ($system_rc != 0) {
-                               array_push($log, "Error while extracting tarball (RC=$system_rc).");
-                               $stop = true; break;
-                       }
+                               if ($system_rc != 0) {
+                                       array_push($log, "Error while extracting tarball (RC=$system_rc).");
+                                       $stop = true; break;
+                               }
 
-                       $target_dir = "$parent_dir/tt-rss-$target_version";
+                               $target_dir = "$parent_dir/tt-rss-$target_version";
 
-                       array_push($log, "Renaming target directory...");
-                       if (!rename($target_dir, $work_dir)) {
-                               array_push($log, "Unable to rename target directory.");
-                               $stop = true; break;
-                       }
+                               array_push($log, "Renaming target directory...");
+                               if (!rename($target_dir, $work_dir)) {
+                                       array_push($log, "Unable to rename target directory.");
+                                       $stop = true; break;
+                               }
 
-                       if (!chdir($work_dir)) {
-                               array_push($log, "Unable to change to work directory: $work_dir");
-                               $stop = true; break;
-                       }
+                               if (!chdir($work_dir)) {
+                                       array_push($log, "Unable to change to work directory: $work_dir");
+                                       $stop = true; break;
+                               }
 
-                       array_push($log, "Copying config.php...");
-                       if (!copy("$old_dir/config.php", "$work_dir/config.php")) {
-                               array_push($log, "Unable to copy config.php to $work_dir.");
-                               $stop = true; break;
-                       }
+                               array_push($log, "Copying config.php...");
+                               if (!copy("$old_dir/config.php", "$work_dir/config.php")) {
+                                       array_push($log, "Unable to copy config.php to $work_dir.");
+                                       $stop = true; break;
+                               }
 
-                       array_push($log, "Cleaning up...");
-                       unlink($tmp_file);
+                               array_push($log, "Cleaning up...");
+                               unlink($tmp_file);
 
-                       array_push($log, "Fixing permissions...");
+                               array_push($log, "Fixing permissions...");
 
-                       $directories = array(
-                               CACHE_DIR,
-                               CACHE_DIR . "/export",
-                               CACHE_DIR . "/images",
-                               CACHE_DIR . "/simplepie",
-                               ICONS_DIR,
-                               LOCK_DIRECTORY);
+                               $directories = array(
+                                       CACHE_DIR,
+                                       CACHE_DIR . "/export",
+                                       CACHE_DIR . "/images",
+                                       CACHE_DIR . "/simplepie",
+                                       ICONS_DIR,
+                                       LOCK_DIRECTORY);
 
-                       foreach ($directories as $dir) {
-                               array_push($log, "-> $dir");
-                               chmod($dir, 0777);
-                       }
+                               foreach ($directories as $dir) {
+                                       array_push($log, "-> $dir");
+                                       chmod($dir, 0777);
+                               }
 
-                       array_push($log, "Upgrade completed.");
-                       array_push($log, "Your old tt-rss directory is saved at $old_dir. ".
-                               "Please migrate locally modified files (if any) and remove it.");
-                       array_push($log, "You might need to re-enter current directory in shell to see new files.");
+                               array_push($log, "Upgrade completed.");
+                               array_push($log, "Your old tt-rss directory is saved at $old_dir. ".
+                                       "Please migrate locally modified files (if any) and remove it.");
+                               array_push($log, "You might need to re-enter current directory in shell to see new files.");
 
-                       $stop = true;
-                       break;
-               default:
-                       $stop = true;
+                               $stop = true;
+                               break;
+                       default:
+                               $stop = true;
+                       }
                }
 
                return array("step" => $step, "stop" => $stop, "params" => $params, "log" => $log);