src/unit/engine/UberRevertPlanTestEngine.php (42 lines of code) (raw):
<?php
final class UberRevertPlanTestEngine extends ArcanistUnitTestEngine {
public function run() {
return $this->checkNonEmptyRevertPlan();
}
// Checks the git commit log and the arcanist
// message cache for a revert plan.
private function checkNonEmptyRevertPlan() {
$result = new ArcanistUnitTestResult();
$lines = implode(' ', $this->getMessage());
$revert_plan_exists = preg_match('/\sRevert Plan:/', $lines);
if (!$revert_plan_exists) {
$result->setResult(ArcanistUnitTestResult::RESULT_FAIL);
$result->setName('Revert Plan not found!
(See http://t.uber.com/revert for more info)');
return array($result);
}
$revert_plan_empty = preg_match('/\sRevert Plan:\s*?$/', $lines);
if ($revert_plan_empty) {
$result->setResult(ArcanistUnitTestResult::RESULT_FAIL);
$result->setName('Revert Plan cannot be empty!
(See http://t.uber.com/revert for more info)');
return array($result);
}
$result->setResult(ArcanistUnitTestResult::RESULT_PASS);
$result->setName('Revert Plan found!');
return array($result);
}
private function getMessage() {
$message_file = '.git/arc/create-message';
$output = [];
$return_code = 0;
exec('git log `git merge-base origin/master HEAD`^..HEAD --oneline',
$output, $return_code);
$commit = count($output) - 1;
exec("git log -n {$commit}", $output, $return_code);
if (file_exists($message_file)) {
$message = file_get_contents('.git/arc/create-message');
array_push($output, $message);
}
return $output;
}
}
?>