[FEATURE] Set exit status in CLI scripts
authorThorsten Kahler <thorsten.kahler@dkd.de>
Sun, 12 Feb 2012 23:04:23 +0000 (00:04 +0100)
committerTolleiv Nietsch <info@tolleiv.de>
Wed, 15 Feb 2012 19:22:10 +0000 (20:22 +0100)
Shell commands usually set the exit status > 0 in case an error occured.
This change sets the exit status if the CLI script invocation fails or
an exception is thrown by the CLI script so failed executions can be
detected.

Change-Id: Idfc9cd76657c9b83a2bcc83d0b9f8bdd0e2d1bca
Resolves: #28700
Releases: 4.7
Reviewed-on: http://review.typo3.org/8999
Reviewed-by: Steffen Ritter
Tested-by: Steffen Ritter
Reviewed-by: Tolleiv Nietsch
Tested-by: Tolleiv Nietsch
t3lib/class.t3lib_beuserauth.php
typo3/cli_dispatch.phpsh
typo3/init.php

index 3aa5dc4..6889f22 100644 (file)
@@ -215,16 +215,20 @@ class t3lib_beUserAuth extends t3lib_userAuthGroup {
                                                if (!$this->isAdmin()) {
                                                        return TRUE;
                                                } else {
-                                                       die('ERROR: CLI backend user "' . $userName . '" was ADMIN which is not allowed!' . LF . LF);
+                                                       fwrite(STDERR, 'ERROR: CLI backend user "' . $userName . '" was ADMIN which is not allowed!' . LF . LF);
+                                                       exit(3);
                                                }
                                        } else {
-                                               die('ERROR: No backend user named "' . $userName . '" was found! [Database: ' . TYPO3_db . ']' . LF . LF);
+                                               fwrite(STDERR, 'ERROR: No backend user named "' . $userName . '" was found! [Database: ' . TYPO3_db . ']' . LF . LF);
+                                               exit(3);
                                        }
                                } else {
-                                       die('ERROR: Module name, "' . $GLOBALS['MCONF']['name'] . '", was not prefixed with "_CLI_"' . LF . LF);
+                                       fwrite(STDERR, 'ERROR: Module name, "' . $GLOBALS['MCONF']['name'] . '", was not prefixed with "_CLI_"' . LF . LF);
+                                       exit(3);
                                }
                        } else {
-                               die('ERROR: Another user was already loaded which is impossible in CLI mode!' . LF . LF);
+                               fwrite(STDERR, 'ERROR: Another user was already loaded which is impossible in CLI mode!' . LF . LF);
+                               exit(3);
                        }
                }
        }
index 43c88a7..e2979ad 100755 (executable)
@@ -93,10 +93,12 @@ if ($relativePath) {
                $temp_PATH_thisScript =
                        $workingDirectory.'/'.preg_replace('/\.\//','',$temp_PATH_thisScript);
                if (!@is_file($temp_PATH_thisScript)) {
-                       die('Relative path found, but an error occurred while resolving the absolute path: ' . $temp_PATH_thisScript . chr(10));
+                       fwrite(STDERR, 'Relative path found, but an error occurred while resolving the absolute path: ' . $temp_PATH_thisScript . chr(10));
+                       exit(1);
                }
        } else {
-               die ('Relative path found, but resolving absolute path is not supported on this platform.'.chr(10));
+               fwrite(STDERR, 'Relative path found, but resolving absolute path is not supported on this platform.' . chr(10));
+               exit(1);
        }
 }
 
@@ -104,7 +106,8 @@ if ($relativePath) {
 define('PATH_thisScript',$temp_PATH_thisScript);
 
 if (!isset($_SERVER['argv'][1]))       {
-       die ('The first argument must be a valid key.'.chr(10));
+       fwrite(STDERR, 'The first argument must be a valid key.' . chr(10));
+       exit(1);
 }
 
        // First argument is a key that points to the script configuration
@@ -118,9 +121,15 @@ require(dirname(PATH_thisScript).'/init.php');
 t3lib_div::flushOutputBuffers();
 
 if (defined('TYPO3_cliInclude')) {
-       include(TYPO3_cliInclude);
+       try {
+               include(TYPO3_cliInclude);
+       } catch (Exception $e) {
+               fwrite(STDERR, $e->getMessage() . LF);
+               exit(99);
+       }
 } else {
-       die('No include file configured for key "'.TYPO3_cliKey.'".'.chr(10));
+       fwrite(STDERR,  'No include file configured for key "'.TYPO3_cliKey.'".' . LF);
+       exit(1);
 }
 
 ?>
index cad7f9f..0ab1014 100644 (file)
@@ -243,16 +243,16 @@ if ((TYPO3_REQUESTTYPE & TYPO3_REQUESTTYPE_CLI) && basename(PATH_thisScript) ==
                        define('TYPO3_cliInclude', t3lib_div::getFileAbsFileName($TYPO3_CONF_VARS['SC_OPTIONS']['GLOBAL']['cliKeys'][$temp_cliKey][0]));
                        $MCONF['name'] = $TYPO3_CONF_VARS['SC_OPTIONS']['GLOBAL']['cliKeys'][$temp_cliKey][1];
                } else {
-                       echo "The supplied 'cliKey' was not valid. Please use one of the available from this list:\n\n";
-                       print_r(array_keys($TYPO3_CONF_VARS['SC_OPTIONS']['GLOBAL']['cliKeys']));
-                       echo LF;
-                       exit;
+                       $message = "The supplied 'cliKey' was not valid. Please use one of the available from this list:\n\n";
+                       $message .= var_export(array_keys($TYPO3_CONF_VARS['SC_OPTIONS']['GLOBAL']['cliKeys']), TRUE);
+                       fwrite(STDERR, $message . LF);
+                       exit(2);
                }
        } else {
-               echo "Please supply a 'cliKey' as first argument. The following are available:\n\n";
-               print_r($TYPO3_CONF_VARS['SC_OPTIONS']['GLOBAL']['cliKeys']);
-               echo LF;
-               exit;
+               $message = "Please supply a 'cliKey' as first argument. The following are available:\n\n";
+               $message .= var_export(array_keys($TYPO3_CONF_VARS['SC_OPTIONS']['GLOBAL']['cliKeys']), TRUE);
+               fwrite(STDERR, $message . LF);
+               exit(2);
        }
 }
 
@@ -438,12 +438,12 @@ $GLOBALS['LANG']->init($BE_USER->uc['lang']);
 if (TYPO3_REQUESTTYPE & TYPO3_REQUESTTYPE_CLI) {
                // Status output:
        if (!strcmp($_SERVER['argv'][1],'status'))      {
-               echo "Status of TYPO3 CLI script:\n\n";
-               echo "Username [uid]: ".$BE_USER->user['username']." [".$BE_USER->user['uid']."]\n";
-               echo "Database: ".TYPO3_db.LF;
-               echo "PATH_site: ".PATH_site.LF;
-               echo LF;
-               exit;
+               $message = "Status of TYPO3 CLI script:\n\n";
+               $message .= "Username [uid]: " . $BE_USER->user['username'] . " [" . $BE_USER->user['uid'] . "]\n";
+               $message .= "Database: " . TYPO3_db . LF;
+               $message .= "PATH_site: " . PATH_site . LF;
+               fwrite(STDOUT, $message . LF);
+               exit(0);
        }
 }