From 9a651c18ec0bc00af11fe7ee80d7ab07ab8983fd Mon Sep 17 00:00:00 2001 From: epriestley Date: Tue, 22 Sep 2015 13:03:29 -0700 Subject: [PATCH] (stable) Recover gracefully from Conduit failure when building "Tags" field in commit mail Summary: Ref T9458. This is basically the same as D13319, but the "Tags" field didn't get covered in that change. Specifically, the issue is: - We try to generate mail to a disabled user (later, we'll drop it without delivering it, but that filtering doesn't happen yet). - The disabled user doesn't have permission to use Conduit (or any other Conduit-related problem occurs). - We fail here, then retry generating the mail again later. Instead, just degrade to not building the field and showing what went wrong. Test Plan: - Pushed some commits, saw mail generate. - Added a fake exception to the field, saw the mail generate with an error message. Reviewers: chad Reviewed By: chad Maniphest Tasks: T9458 Differential Revision: https://secure.phabricator.com/D14142 --- .../PhabricatorCommitTagsField.php | 23 +++++++++++-------- 1 file changed, 14 insertions(+), 9 deletions(-) diff --git a/src/applications/repository/customfield/PhabricatorCommitTagsField.php b/src/applications/repository/customfield/PhabricatorCommitTagsField.php index b69d246d85..001d81e960 100644 --- a/src/applications/repository/customfield/PhabricatorCommitTagsField.php +++ b/src/applications/repository/customfield/PhabricatorCommitTagsField.php @@ -29,18 +29,23 @@ final class PhabricatorCommitTagsField 'callsign' => $this->getObject()->getRepository()->getCallsign(), ); - $tags_raw = id(new ConduitCall('diffusion.tagsquery', $params)) - ->setUser($this->getViewer()) - ->execute(); + try { + $tags_raw = id(new ConduitCall('diffusion.tagsquery', $params)) + ->setUser($this->getViewer()) + ->execute(); - $tags = DiffusionRepositoryTag::newFromConduit($tags_raw); - if (!$tags) { - return; + $tags = DiffusionRepositoryTag::newFromConduit($tags_raw); + if (!$tags) { + return; + } + $tag_names = mpull($tags, 'getName'); + sort($tag_names); + $tag_names = implode(', ', $tag_names); + } catch (Exception $ex) { + $tag_names = pht('<%s: %s>', get_class($ex), $ex->getMessage()); } - $tag_names = mpull($tags, 'getName'); - sort($tag_names); - $body->addTextSection(pht('TAGS'), implode(', ', $tag_names)); + $body->addTextSection(pht('TAGS'), $tag_names); } }