From 32f12d1f8fb7aeca9e034a431b9b3e1b189197f6 Mon Sep 17 00:00:00 2001 From: epriestley Date: Mon, 9 Apr 2012 17:35:01 -0700 Subject: [PATCH] Don't fatal when generating patch emails for diffs with binaries Summary: When Phabricator is configured to generate patch email, we'll fatal if the patch contains binaries and is generating to Git because ArcanistBundle can't load the binary data. Provide a callback to load the data. See D2174. (This may cause us to generate absolutely enormous emails, but you get what you asked for...) Test Plan: Created a diff with an image under "send git patches" email configuration. Reviewers: Makinde, btrahan, vrana, jungejason Reviewed By: Makinde CC: aran Differential Revision: https://secure.phabricator.com/D2175 --- .../reviewrequest/DifferentialReviewRequestMail.php | 12 ++++++++++++ .../differential/mail/reviewrequest/__init__.php | 1 + 2 files changed, 13 insertions(+) diff --git a/src/applications/differential/mail/reviewrequest/DifferentialReviewRequestMail.php b/src/applications/differential/mail/reviewrequest/DifferentialReviewRequestMail.php index fac9fc6f79..3431d7dab4 100644 --- a/src/applications/differential/mail/reviewrequest/DifferentialReviewRequestMail.php +++ b/src/applications/differential/mail/reviewrequest/DifferentialReviewRequestMail.php @@ -112,6 +112,16 @@ abstract class DifferentialReviewRequestMail extends DifferentialMail { return $attachments; } + public function loadFileByPHID($phid) { + $file = id(new PhabricatorFile())->loadOneWhere( + 'phid = %s', + $phid); + if (!$file) { + return null; + } + return $file->loadFileData(); + } + private function buildPatch() { $revision = $this->getRevision(); $revision_id = $revision->getID(); @@ -133,6 +143,8 @@ abstract class DifferentialReviewRequestMail extends DifferentialMail { } $bundle = ArcanistBundle::newFromChanges($changes); + $bundle->setLoadFileDataCallback(array($this, 'loadFileByPHID')); + $format = PhabricatorEnv::getEnvConfig('metamta.differential.patch-format'); switch ($format) { case 'git': diff --git a/src/applications/differential/mail/reviewrequest/__init__.php b/src/applications/differential/mail/reviewrequest/__init__.php index 0c4c47cb38..708b7363e8 100644 --- a/src/applications/differential/mail/reviewrequest/__init__.php +++ b/src/applications/differential/mail/reviewrequest/__init__.php @@ -10,6 +10,7 @@ phutil_require_module('arcanist', 'parser/bundle'); phutil_require_module('arcanist', 'parser/diff/change'); phutil_require_module('phabricator', 'applications/differential/mail/base'); +phutil_require_module('phabricator', 'applications/files/storage/file'); phutil_require_module('phabricator', 'applications/metamta/storage/mail'); phutil_require_module('phabricator', 'applications/phid/handle/data'); phutil_require_module('phabricator', 'infrastructure/env');