diff --git a/src/applications/differential/editor/DifferentialTransactionEditor.php b/src/applications/differential/editor/DifferentialTransactionEditor.php --- a/src/applications/differential/editor/DifferentialTransactionEditor.php +++ b/src/applications/differential/editor/DifferentialTransactionEditor.php @@ -132,12 +132,14 @@ $diff = $this->requireDiff($xaction->getNewValue()); - $object->setLineCount($diff->getLineCount()); + $this->updateRevisionLineCounts($object, $diff); + if ($this->repositoryPHIDOverride !== false) { $object->setRepositoryPHID($this->repositoryPHIDOverride); } else { $object->setRepositoryPHID($diff->getRepositoryPHID()); } + $object->attachActiveDiff($diff); $object->setActiveDiffPHID($diff->getPHID()); return; @@ -1645,5 +1647,25 @@ return true; } + private function updateRevisionLineCounts( + DifferentialRevision $revision, + DifferentialDiff $diff) { + + $revision->setLineCount($diff->getLineCount()); + + $conn = $revision->establishConnection('r'); + + $row = queryfx_one( + $conn, + 'SELECT SUM(addLines) A, SUM(delLines) D FROM %T + WHERE diffID = %d', + id(new DifferentialChangeset())->getTableName(), + $diff->getID()); + + if ($row) { + $revision->setAddedLineCount((int)$row['A']); + $revision->setRemovedLineCount((int)$row['D']); + } + } } diff --git a/src/applications/differential/storage/DifferentialRevision.php b/src/applications/differential/storage/DifferentialRevision.php --- a/src/applications/differential/storage/DifferentialRevision.php +++ b/src/applications/differential/storage/DifferentialRevision.php @@ -61,6 +61,8 @@ const PROPERTY_CLOSED_FROM_ACCEPTED = 'wasAcceptedBeforeClose'; const PROPERTY_DRAFT_HOLD = 'draft.hold'; const PROPERTY_HAS_BROADCAST = 'draft.broadcast'; + const PROPERTY_LINES_ADDED = 'lines.added'; + const PROPERTY_LINES_REMOVED = 'lines.removed'; public static function initializeNewRevision(PhabricatorUser $actor) { $app = id(new PhabricatorApplicationQuery()) @@ -728,6 +730,21 @@ return $this->setProperty(self::PROPERTY_HAS_BROADCAST, $has_broadcast); } + public function setAddedLineCount($count) { + return $this->setProperty(self::PROPERTY_LINES_ADDED, $count); + } + + public function getAddedLineCount() { + return $this->getProperty(self::PROPERTY_LINES_ADDED); + } + + public function setRemovedLineCount($count) { + return $this->setProperty(self::PROPERTY_LINES_REMOVED, $count); + } + + public function getRemovedLineCount() { + return $this->getProperty(self::PROPERTY_LINES_REMOVED); + } public function loadActiveBuilds(PhabricatorUser $viewer) { $diff = $this->getActiveDiff();