1
0
Fork 0
mirror of https://we.phorge.it/source/arcanist.git synced 2024-11-22 14:52:40 +01:00

(experimental) When "arc close-revision --finalize ..." skips closing a revision, print a message

Summary: Fixes T13458. Emit an explicit message when "arc close-revision --finalize" bails out because the revision is not "Accepted".

Test Plan: Ran `arc close-revision [--finalize] ...` on various revisions, saw more clear messaging.

Maniphest Tasks: T13458

Differential Revision: https://secure.phabricator.com/D20915
This commit is contained in:
epriestley 2019-11-18 20:28:58 -08:00
parent 039144ea24
commit e19fe12f7e

View file

@ -89,11 +89,13 @@ EOTEXT
)); ));
$revision = head($revisions); $revision = head($revisions);
$object_name = "D{$revision_id}";
if (!$revision && !$is_finalize) { if (!$revision && !$is_finalize) {
throw new ArcanistUsageException( throw new ArcanistUsageException(
pht( pht(
'Revision %s does not exist.', 'Revision %s does not exist.',
"D{$revision_id}")); $object_name));
} }
$status_accepted = ArcanistDifferentialRevisionStatus::ACCEPTED; $status_accepted = ArcanistDifferentialRevisionStatus::ACCEPTED;
@ -104,15 +106,20 @@ EOTEXT
pht( pht(
"Revision %s can not be closed. You can only close ". "Revision %s can not be closed. You can only close ".
"revisions which have been 'accepted'.", "revisions which have been 'accepted'.",
"D{$revision_id}")); $object_name));
} }
if ($revision) { if ($revision) {
$revision_display = sprintf(
'%s %s',
$object_name,
$revision['title']);
if (!$is_finalize && $revision['authorPHID'] != $this->getUserPHID()) { if (!$is_finalize && $revision['authorPHID'] != $this->getUserPHID()) {
$prompt = pht( $prompt = pht(
'You are not the author of revision %s, '. 'You are not the author of revision "%s", '.
'are you sure you want to close it?', 'are you sure you want to close it?',
"D{$revision_id}"); $object_name);
if (!phutil_console_confirm($prompt)) { if (!phutil_console_confirm($prompt)) {
throw new ArcanistUserAbortException(); throw new ArcanistUserAbortException();
} }
@ -120,24 +127,42 @@ EOTEXT
$actually_close = true; $actually_close = true;
if ($is_finalize) { if ($is_finalize) {
if ($this->getRepositoryPHID() || if ($this->getRepositoryPHID()) {
$revision['status'] != $status_accepted) { $actually_close = false;
} else if ($revision['status'] != $status_accepted) {
// See T13458. The server doesn't permit a transition to "Closed"
// over the API if the revision is not "Accepted". If we won't be
// able to close the revision, skip the attempt and print a
// message.
$this->writeWarn(
pht('OPEN REVISION'),
pht(
'Revision "%s" is not in state "Accepted", so it will '.
'be left open.',
$object_name));
$actually_close = false; $actually_close = false;
} }
} }
if ($actually_close) {
$revision_name = $revision['title'];
echo pht( if ($actually_close) {
"Closing revision %s '%s'...\n", $this->writeInfo(
"D{$revision_id}", pht('CLOSE'),
$revision_name); pht(
'Closing revision "%s"...',
$revision_display));
$conduit->callMethodSynchronous( $conduit->callMethodSynchronous(
'differential.close', 'differential.close',
array( array(
'revisionID' => $revision_id, 'revisionID' => $revision_id,
)); ));
$this->writeOkay(
pht('CLOSE'),
pht(
'Done, closed revision.'));
} }
} }