Correct a parameter order swap in "diffusion.historyquery" for Mercurial
[phabricator.git] / src / applications / diffusion / query / DiffusionRenameHistoryQuery.php
bloba2de0a1e6c33829e306aa822d90908245788953d
1 <?php
3 final class DiffusionRenameHistoryQuery extends Phobject {
5 private $oldCommit;
6 private $wasCreated;
7 private $request;
8 private $viewer;
10 public function setViewer(PhabricatorUser $viewer) {
11 $this->viewer = $viewer;
12 return $this;
15 public function getWasCreated() {
16 return $this->wasCreated;
19 public function setRequest(DiffusionRequest $request) {
20 $this->request = $request;
21 return $this;
24 public function setOldCommit($old_commit) {
25 $this->oldCommit = $old_commit;
26 return $this;
29 public function getOldCommit() {
30 return $this->oldCommit;
33 public function loadOldFilename() {
34 $drequest = $this->request;
35 $repository_id = $drequest->getRepository()->getID();
36 $conn_r = id(new PhabricatorRepository())->establishConnection('r');
38 $commit_id = $this->loadCommitId($this->oldCommit);
39 $old_commit_sequence = $this->loadCommitSequence($commit_id);
41 $path = '/'.$drequest->getPath();
42 $commit_id = $this->loadCommitId($drequest->getCommit());
44 do {
45 $commit_sequence = $this->loadCommitSequence($commit_id);
46 $change = queryfx_one(
47 $conn_r,
48 'SELECT pc.changeType, pc.targetCommitID, tp.path
49 FROM %T p
50 JOIN %T pc ON p.id = pc.pathID
51 LEFT JOIN %T tp ON pc.targetPathID = tp.id
52 WHERE p.pathHash = %s
53 AND pc.repositoryID = %d
54 AND pc.changeType IN (%d, %d)
55 AND pc.commitSequence BETWEEN %d AND %d
56 ORDER BY pc.commitSequence DESC
57 LIMIT 1',
58 PhabricatorRepository::TABLE_PATH,
59 PhabricatorRepository::TABLE_PATHCHANGE,
60 PhabricatorRepository::TABLE_PATH,
61 md5($path),
62 $repository_id,
63 ArcanistDiffChangeType::TYPE_MOVE_HERE,
64 ArcanistDiffChangeType::TYPE_ADD,
65 $old_commit_sequence,
66 $commit_sequence);
67 if ($change) {
68 if ($change['changeType'] == ArcanistDiffChangeType::TYPE_ADD) {
69 $this->wasCreated = true;
70 return $path;
72 $commit_id = $change['targetCommitID'];
73 $path = $change['path'];
75 } while ($change && $path);
77 return $path;
80 private function loadCommitId($commit_identifier) {
81 $commit = id(new DiffusionCommitQuery())
82 ->setViewer($this->viewer)
83 ->withIdentifiers(array($commit_identifier))
84 ->withRepository($this->request->getRepository())
85 ->executeOne();
86 return $commit->getID();
89 private function loadCommitSequence($commit_id) {
90 $conn_r = id(new PhabricatorRepository())->establishConnection('r');
91 $path_change = queryfx_one(
92 $conn_r,
93 'SELECT commitSequence
94 FROM %T
95 WHERE repositoryID = %d AND commitID = %d
96 LIMIT 1',
97 PhabricatorRepository::TABLE_PATHCHANGE,
98 $this->request->getRepository()->getID(),
99 $commit_id);
100 return reset($path_change);