source: github/bin/installto.sh

Last change on this file was ae0c133d, checked in by Aleksander Machniak <alec@…>, 8 weeks ago

Fix error handling in CLI mode, use STDERR and non-empty exit code (#1489043)

Conflicts:

program/lib/Roundcube/rcube.php

  • Property mode set to 100755
File size: 3.4 KB
Line 
1#!/usr/bin/env php
2<?php
3/*
4 +-----------------------------------------------------------------------+
5 | bin/installto.sh                                                      |
6 |                                                                       |
7 | This file is part of the Roundcube Webmail client                     |
8 | Copyright (C) 2012, The Roundcube Dev Team                            |
9 |                                                                       |
10 | Licensed under the GNU General Public License version 3 or            |
11 | any later version with exceptions for skins & plugins.                |
12 | See the README file for a full license statement.                     |
13 |                                                                       |
14 | PURPOSE:                                                              |
15 |   Update an existing Roundcube installation with files from           |
16 |   this version                                                        |
17 +-----------------------------------------------------------------------+
18 | Author: Thomas Bruederli <roundcube@gmail.com>                        |
19 +-----------------------------------------------------------------------+
20*/
21
22define('INSTALL_PATH', realpath(dirname(__FILE__) . '/..') . '/' );
23
24require_once INSTALL_PATH . 'program/include/clisetup.php';
25
26$target_dir = unslashify($_SERVER['argv'][1]);
27
28if (empty($target_dir) || !is_dir(realpath($target_dir)))
29  rcube::raise_error("Invalid target: not a directory\nUsage: installto.sh <TARGET>", false, true);
30
31// read version from iniset.php
32$iniset = @file_get_contents($target_dir . '/program/include/iniset.php');
33if (!preg_match('/define\(.RCMAIL_VERSION.,\s*.([0-9.]+[a-z-]*)/', $iniset, $m))
34  rcube::raise_error("No valid Roundcube installation found at $target_dir", false, true);
35
36$oldversion = $m[1];
37
38if (version_compare(version_parse($oldversion), version_parse(RCMAIL_VERSION), '>='))
39  rcube::raise_error("Installation at target location is up-to-date!", false, true);
40
41echo "Upgrading from $oldversion. Do you want to continue? (y/N)\n";
42$input = trim(fgets(STDIN));
43
44if (strtolower($input) == 'y') {
45  $err = false;
46  echo "Copying files to target location...";
47  foreach (array('program','installer','bin','SQL','plugins','skins') as $dir) {
48    if (!system("rsync -avC " . INSTALL_PATH . "$dir/* $target_dir/$dir/")) {
49      $err = true;
50      break;
51    }
52  }
53  foreach (array('index.php','.htaccess','config/main.inc.php.dist','config/db.inc.php.dist','CHANGELOG','README.md','UPGRADING','LICENSE') as $file) {
54    if (!system("rsync -av " . INSTALL_PATH . "$file $target_dir/$file")) {
55      $err = true;
56      break;
57    }
58  }
59  echo "done.\n\n";
60
61  if (is_dir("$target_dir/skins/default")) {
62      echo "Removing old default skin...";
63      system("rm -rf $target_dir/skins/default $target_dir/plugins/jqueryui/themes/default");
64      foreach (glob(INSTALL_PATH . "plugins/*/skins") as $plugin_skin_dir) {
65          $plugin_skin_dir = preg_replace('!^.*' . INSTALL_PATH . '!', '', $plugin_skin_dir);
66          if (is_dir("$target_dir/$plugin_skin_dir/classic"))
67            system("rm -rf $target_dir/$plugin_skin_dir/default");
68      }
69      echo "done.\n\n";
70  }
71
72  if (!$err) {
73    echo "Running update script at target...\n";
74    system("cd $target_dir && bin/update.sh --version=$oldversion");
75    echo "All done.\n";
76  }
77}
78else
79  echo "Update cancelled. See ya!\n";
80
81?>
Note: See TracBrowser for help on using the repository browser.