diff --git a/src/applications/repository/storage/PhabricatorRepository.php b/src/applications/repository/storage/PhabricatorRepository.php --- a/src/applications/repository/storage/PhabricatorRepository.php +++ b/src/applications/repository/storage/PhabricatorRepository.php @@ -10,7 +10,8 @@ PhabricatorFlaggableInterface, PhabricatorMarkupInterface, PhabricatorDestructibleInterface, - PhabricatorProjectInterface { + PhabricatorProjectInterface, + PhabricatorApplicationTransactionInterface { /** * Shortest hash we'll recognize in raw "a829f32" form. @@ -1140,6 +1141,20 @@ $cursor->delete(); } + $push_events = id(new PhabricatorRepositoryPushEvent()) + ->loadAllWhere('repositoryPHID = %s', $this->getPHID()); + foreach ($push_events as $push_event) { + // note PhabricatorRepositoryPushLog + // are deleted here too. + $push_event->delete(); + } + + $status_msgs = id(new PhabricatorRepositoryStatusMessage()) + ->loadAllWhere('repositoryID = %d', $this->getID()); + foreach ($status_msgs as $status_msg) { + $status_msg->delete(); + } + $conn_w = $this->establishConnection('w'); queryfx( @@ -1588,4 +1603,18 @@ $this->saveTransaction(); } +/* -( PhabricatorApplicationTransactionInterface )------------------------- */ + + public function getApplicationTransactionEditor() { + return new PhabricatorRepositoryEditor(); + } + + public function getApplicationTransactionObject() { + return $this; + } + + public function getApplicationTransactionTemplate() { + return new PhabricatorRepositoryTransaction(); + } + } diff --git a/src/applications/repository/storage/PhabricatorRepositoryCommit.php b/src/applications/repository/storage/PhabricatorRepositoryCommit.php --- a/src/applications/repository/storage/PhabricatorRepositoryCommit.php +++ b/src/applications/repository/storage/PhabricatorRepositoryCommit.php @@ -181,6 +181,15 @@ foreach ($audits as $audit) { $audit->delete(); } + + $conn_w = $this->establishConnection('w'); + + queryfx( + $conn_w, + 'DELETE FROM %T WHERE childCommitID = %d', + PhabricatorRepository::TABLE_PARENTS, + $this->getID()); + $result = parent::delete(); $this->saveTransaction(); diff --git a/src/applications/repository/storage/PhabricatorRepositoryPushEvent.php b/src/applications/repository/storage/PhabricatorRepositoryPushEvent.php --- a/src/applications/repository/storage/PhabricatorRepositoryPushEvent.php +++ b/src/applications/repository/storage/PhabricatorRepositoryPushEvent.php @@ -65,6 +65,19 @@ return $this->assertAttached($this->logs); } + public function delete() { + $logs = id(new PhabricatorRepositoryPushLog()) + ->loadAllWhere('pushEventPHID = %s', $this->getPHID()); + $this->openTransaction(); + + foreach ($logs as $log) { + $log->delete(); + } + $result = parent::delete(); + + $this->saveTransaction(); + return $result; + } /* -( PhabricatorPolicyInterface )----------------------------------------- */