public function updateRevisionWithCommit(DifferentialRevision $revision, PhabricatorRepositoryCommit $commit, array $more_xactions, PhabricatorContentSource $content_source)
 {
     $viewer = $this->getViewer();
     $result_data = array();
     $new_diff = $this->newDiffFromCommit($commit);
     $old_diff = $revision->getActiveDiff();
     $changed_uri = null;
     if ($old_diff) {
         $old_diff = id(new DifferentialDiffQuery())->setViewer($viewer)->withIDs(array($old_diff->getID()))->needChangesets(true)->executeOne();
         if ($old_diff) {
             $has_changed = $this->isDiffChangedBeforeCommit($commit, $old_diff, $new_diff);
             if ($has_changed) {
                 $result_data['vsDiff'] = $old_diff->getID();
                 $revision_monogram = $revision->getMonogram();
                 $old_id = $old_diff->getID();
                 $new_id = $new_diff->getID();
                 $changed_uri = "/{$revision_monogram}?vs={$old_id}&id={$new_id}#toc";
                 $changed_uri = PhabricatorEnv::getProductionURI($changed_uri);
             }
         }
     }
     $xactions = array();
     $xactions[] = id(new DifferentialTransaction())->setTransactionType(DifferentialTransaction::TYPE_UPDATE)->setIgnoreOnNoEffect(true)->setNewValue($new_diff->getPHID())->setMetadataValue('isCommitUpdate', true);
     foreach ($more_xactions as $more_xaction) {
         $xactions[] = $more_xaction;
     }
     $editor = id(new DifferentialTransactionEditor())->setActor($viewer)->setContinueOnMissingFields(true)->setContentSource($content_source)->setChangedPriorToCommitURI($changed_uri)->setIsCloseByCommit(true);
     $author_phid = $this->getAuthorPHID();
     if ($author_phid !== null) {
         $editor->setActingAsPHID($author_phid);
     }
     try {
         $editor->applyTransactions($revision, $xactions);
     } catch (PhabricatorApplicationTransactionNoEffectException $ex) {
         // NOTE: We've marked transactions other than the CLOSE transaction
         // as ignored when they don't have an effect, so this means that we
         // lost a race to close the revision. That's perfectly fine, we can
         // just continue normally.
     }
     return $result_data;
 }