Path: blob/master/src/applications/diffusion/query/DiffusionRenameHistoryQuery.php
12242 views
<?php12final class DiffusionRenameHistoryQuery extends Phobject {34private $oldCommit;5private $wasCreated;6private $request;7private $viewer;89public function setViewer(PhabricatorUser $viewer) {10$this->viewer = $viewer;11return $this;12}1314public function getWasCreated() {15return $this->wasCreated;16}1718public function setRequest(DiffusionRequest $request) {19$this->request = $request;20return $this;21}2223public function setOldCommit($old_commit) {24$this->oldCommit = $old_commit;25return $this;26}2728public function getOldCommit() {29return $this->oldCommit;30}3132public function loadOldFilename() {33$drequest = $this->request;34$repository_id = $drequest->getRepository()->getID();35$conn_r = id(new PhabricatorRepository())->establishConnection('r');3637$commit_id = $this->loadCommitId($this->oldCommit);38$old_commit_sequence = $this->loadCommitSequence($commit_id);3940$path = '/'.$drequest->getPath();41$commit_id = $this->loadCommitId($drequest->getCommit());4243do {44$commit_sequence = $this->loadCommitSequence($commit_id);45$change = queryfx_one(46$conn_r,47'SELECT pc.changeType, pc.targetCommitID, tp.path48FROM %T p49JOIN %T pc ON p.id = pc.pathID50LEFT JOIN %T tp ON pc.targetPathID = tp.id51WHERE p.pathHash = %s52AND pc.repositoryID = %d53AND pc.changeType IN (%d, %d)54AND pc.commitSequence BETWEEN %d AND %d55ORDER BY pc.commitSequence DESC56LIMIT 1',57PhabricatorRepository::TABLE_PATH,58PhabricatorRepository::TABLE_PATHCHANGE,59PhabricatorRepository::TABLE_PATH,60md5($path),61$repository_id,62ArcanistDiffChangeType::TYPE_MOVE_HERE,63ArcanistDiffChangeType::TYPE_ADD,64$old_commit_sequence,65$commit_sequence);66if ($change) {67if ($change['changeType'] == ArcanistDiffChangeType::TYPE_ADD) {68$this->wasCreated = true;69return $path;70}71$commit_id = $change['targetCommitID'];72$path = $change['path'];73}74} while ($change && $path);7576return $path;77}7879private function loadCommitId($commit_identifier) {80$commit = id(new DiffusionCommitQuery())81->setViewer($this->viewer)82->withIdentifiers(array($commit_identifier))83->withRepository($this->request->getRepository())84->executeOne();85return $commit->getID();86}8788private function loadCommitSequence($commit_id) {89$conn_r = id(new PhabricatorRepository())->establishConnection('r');90$path_change = queryfx_one(91$conn_r,92'SELECT commitSequence93FROM %T94WHERE repositoryID = %d AND commitID = %d95LIMIT 1',96PhabricatorRepository::TABLE_PATHCHANGE,97$this->request->getRepository()->getID(),98$commit_id);99return reset($path_change);100}101102}103104105