4 use Consolidation\AnnotatedCommand\ExitCodeInterface;
5 use Consolidation\AnnotatedCommand\OutputDataInterface;
8 class ResultData extends Data implements ExitCodeInterface, OutputDataInterface
15 const EXITCODE_OK = 0;
16 const EXITCODE_ERROR = 1;
17 /** Symfony Console handles these conditions; Robo returns the status
18 code selected by Symfony. These are here for documentation purposes. */
19 const EXITCODE_MISSING_OPTIONS = 2;
20 const EXITCODE_COMMAND_NOT_FOUND = 127;
22 /** The command was aborted because the user chose to cancel it at some prompt.
23 This exit code is arbitrarily the same as EX_TEMPFAIL in sysexits.h, although
24 note that shell error codes are distinct from C exit codes, so this alignment
25 not particularly meaningful. */
26 const EXITCODE_USER_CANCEL = 75;
29 * @param int $exitCode
30 * @param string $message
33 public function __construct($exitCode = self::EXITCODE_OK, $message = '', $data = [])
35 $this->exitCode = $exitCode;
36 parent::__construct($message, $data);
40 * @param string $message
43 * @return \Robo\ResultData
45 public static function message($message, $data = [])
47 return new self(self::EXITCODE_OK, $message, $data);
51 * @param string $message
54 * @return \Robo\ResultData
56 public static function cancelled($message = '', $data = [])
58 return new ResultData(self::EXITCODE_USER_CANCEL, $message, $data);
64 public function getExitCode()
66 return $this->exitCode;
72 public function getOutputData()
74 if (!empty($this->message) && !isset($this['already-printed']) && isset($this['provide-outputdata'])) {
75 return $this->message;
80 * Indicate that the message in this data has already been displayed.
82 public function alreadyPrinted()
84 $this['already-printed'] = true;
88 * Opt-in to providing the result message as the output data
90 public function provideOutputdata()
92 $this['provide-outputdata'] = true;
98 public function wasSuccessful()
100 return $this->exitCode === self::EXITCODE_OK;
106 public function wasCancelled()
108 return $this->exitCode == self::EXITCODE_USER_CANCEL;