@recaptime-dev's working patches + fork for Phorge, a community fork of Phabricator. (Upstream dev and stable branches are at upstream/main and upstream/stable respectively.) hq.recaptime.dev/wiki/Phorge
phorge phabricator
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

Diffusion - tag queries => conduit

Summary: title. Ref T2784.

Test Plan: foreach of SVN, Mercurial, and Git, loaded up a repository. Verified that only git had a tags box and it showed up correctly. Went to CALLSIGN/tags and verified that only git had a tags box and it showed up correctly. Went to various commits across vcs and verified it said "none" unless it was a git commit that also was tagged.

Reviewers: epriestley

Reviewed By: epriestley

CC: chad, aran, Korvin

Maniphest Tasks: T2784

Differential Revision: https://secure.phabricator.com/D5894

+197 -255
+2 -16
src/__phutil_library_map__.php
··· 153 153 'ConduitAPI_diffusion_getcommits_Method' => 'applications/diffusion/conduit/ConduitAPI_diffusion_getcommits_Method.php', 154 154 'ConduitAPI_diffusion_getlintmessages_Method' => 'applications/diffusion/conduit/ConduitAPI_diffusion_getlintmessages_Method.php', 155 155 'ConduitAPI_diffusion_getrecentcommitsbypath_Method' => 'applications/diffusion/conduit/ConduitAPI_diffusion_getrecentcommitsbypath_Method.php', 156 + 'ConduitAPI_diffusion_tagsquery_Method' => 'applications/diffusion/conduit/ConduitAPI_diffusion_tagsquery_Method.php', 156 157 'ConduitAPI_feed_Method' => 'applications/feed/conduit/ConduitAPI_feed_Method.php', 157 158 'ConduitAPI_feed_publish_Method' => 'applications/feed/conduit/ConduitAPI_feed_publish_Method.php', 158 159 'ConduitAPI_feed_query_Method' => 'applications/feed/conduit/ConduitAPI_feed_query_Method.php', ··· 417 418 'DiffusionCommitParentsQuery' => 'applications/diffusion/query/parents/DiffusionCommitParentsQuery.php', 418 419 'DiffusionCommitQuery' => 'applications/diffusion/query/DiffusionCommitQuery.php', 419 420 'DiffusionCommitTagsController' => 'applications/diffusion/controller/DiffusionCommitTagsController.php', 420 - 'DiffusionCommitTagsQuery' => 'applications/diffusion/query/committags/DiffusionCommitTagsQuery.php', 421 421 'DiffusionContainsQuery' => 'applications/diffusion/query/contains/DiffusionContainsQuery.php', 422 422 'DiffusionController' => 'applications/diffusion/controller/DiffusionController.php', 423 423 'DiffusionDiffController' => 'applications/diffusion/controller/DiffusionDiffController.php', ··· 429 429 'DiffusionGitBranch' => 'applications/diffusion/data/DiffusionGitBranch.php', 430 430 'DiffusionGitBranchTestCase' => 'applications/diffusion/data/__tests__/DiffusionGitBranchTestCase.php', 431 431 'DiffusionGitCommitParentsQuery' => 'applications/diffusion/query/parents/DiffusionGitCommitParentsQuery.php', 432 - 'DiffusionGitCommitTagsQuery' => 'applications/diffusion/query/committags/DiffusionGitCommitTagsQuery.php', 433 432 'DiffusionGitContainsQuery' => 'applications/diffusion/query/contains/DiffusionGitContainsQuery.php', 434 433 'DiffusionGitDiffQuery' => 'applications/diffusion/query/diff/DiffusionGitDiffQuery.php', 435 434 'DiffusionGitFileContentQuery' => 'applications/diffusion/query/filecontent/DiffusionGitFileContentQuery.php', ··· 438 437 'DiffusionGitMergedCommitsQuery' => 'applications/diffusion/query/mergedcommits/DiffusionGitMergedCommitsQuery.php', 439 438 'DiffusionGitRawDiffQuery' => 'applications/diffusion/query/rawdiff/DiffusionGitRawDiffQuery.php', 440 439 'DiffusionGitRequest' => 'applications/diffusion/request/DiffusionGitRequest.php', 441 - 'DiffusionGitTagListQuery' => 'applications/diffusion/query/taglist/DiffusionGitTagListQuery.php', 442 440 'DiffusionHistoryController' => 'applications/diffusion/controller/DiffusionHistoryController.php', 443 441 'DiffusionHistoryQuery' => 'applications/diffusion/query/history/DiffusionHistoryQuery.php', 444 442 'DiffusionHistoryTableView' => 'applications/diffusion/view/DiffusionHistoryTableView.php', ··· 452 450 'DiffusionLintDetailsController' => 'applications/diffusion/controller/DiffusionLintDetailsController.php', 453 451 'DiffusionLintSaveRunner' => 'applications/diffusion/DiffusionLintSaveRunner.php', 454 452 'DiffusionMercurialCommitParentsQuery' => 'applications/diffusion/query/parents/DiffusionMercurialCommitParentsQuery.php', 455 - 'DiffusionMercurialCommitTagsQuery' => 'applications/diffusion/query/committags/DiffusionMercurialCommitTagsQuery.php', 456 453 'DiffusionMercurialContainsQuery' => 'applications/diffusion/query/contains/DiffusionMercurialContainsQuery.php', 457 454 'DiffusionMercurialDiffQuery' => 'applications/diffusion/query/diff/DiffusionMercurialDiffQuery.php', 458 455 'DiffusionMercurialFileContentQuery' => 'applications/diffusion/query/filecontent/DiffusionMercurialFileContentQuery.php', ··· 461 458 'DiffusionMercurialMergedCommitsQuery' => 'applications/diffusion/query/mergedcommits/DiffusionMercurialMergedCommitsQuery.php', 462 459 'DiffusionMercurialRawDiffQuery' => 'applications/diffusion/query/rawdiff/DiffusionMercurialRawDiffQuery.php', 463 460 'DiffusionMercurialRequest' => 'applications/diffusion/request/DiffusionMercurialRequest.php', 464 - 'DiffusionMercurialTagListQuery' => 'applications/diffusion/query/taglist/DiffusionMercurialTagListQuery.php', 465 461 'DiffusionMergedCommitsQuery' => 'applications/diffusion/query/mergedcommits/DiffusionMergedCommitsQuery.php', 466 462 'DiffusionPathChange' => 'applications/diffusion/data/DiffusionPathChange.php', 467 463 'DiffusionPathChangeQuery' => 'applications/diffusion/query/pathchange/DiffusionPathChangeQuery.php', ··· 481 477 'DiffusionRequest' => 'applications/diffusion/request/DiffusionRequest.php', 482 478 'DiffusionSetupException' => 'applications/diffusion/exception/DiffusionSetupException.php', 483 479 'DiffusionSvnCommitParentsQuery' => 'applications/diffusion/query/parents/DiffusionSvnCommitParentsQuery.php', 484 - 'DiffusionSvnCommitTagsQuery' => 'applications/diffusion/query/committags/DiffusionSvnCommitTagsQuery.php', 485 480 'DiffusionSvnContainsQuery' => 'applications/diffusion/query/contains/DiffusionSvnContainsQuery.php', 486 481 'DiffusionSvnDiffQuery' => 'applications/diffusion/query/diff/DiffusionSvnDiffQuery.php', 487 482 'DiffusionSvnFileContentQuery' => 'applications/diffusion/query/filecontent/DiffusionSvnFileContentQuery.php', ··· 490 485 'DiffusionSvnMergedCommitsQuery' => 'applications/diffusion/query/mergedcommits/DiffusionSvnMergedCommitsQuery.php', 491 486 'DiffusionSvnRawDiffQuery' => 'applications/diffusion/query/rawdiff/DiffusionSvnRawDiffQuery.php', 492 487 'DiffusionSvnRequest' => 'applications/diffusion/request/DiffusionSvnRequest.php', 493 - 'DiffusionSvnTagListQuery' => 'applications/diffusion/query/taglist/DiffusionSvnTagListQuery.php', 494 488 'DiffusionSymbolController' => 'applications/diffusion/controller/DiffusionSymbolController.php', 495 489 'DiffusionSymbolQuery' => 'applications/diffusion/query/DiffusionSymbolQuery.php', 496 490 'DiffusionTagListController' => 'applications/diffusion/controller/DiffusionTagListController.php', 497 - 'DiffusionTagListQuery' => 'applications/diffusion/query/taglist/DiffusionTagListQuery.php', 498 491 'DiffusionTagListView' => 'applications/diffusion/view/DiffusionTagListView.php', 499 492 'DiffusionURITestCase' => 'applications/diffusion/request/__tests__/DiffusionURITestCase.php', 500 493 'DiffusionView' => 'applications/diffusion/view/DiffusionView.php', ··· 1926 1919 'ConduitAPI_diffusion_getcommits_Method' => 'ConduitAPI_diffusion_Method', 1927 1920 'ConduitAPI_diffusion_getlintmessages_Method' => 'ConduitAPI_diffusion_Method', 1928 1921 'ConduitAPI_diffusion_getrecentcommitsbypath_Method' => 'ConduitAPI_diffusion_Method', 1922 + 'ConduitAPI_diffusion_tagsquery_Method' => 'ConduitAPI_diffusion_abstractquery_Method', 1929 1923 'ConduitAPI_feed_Method' => 'ConduitAPIMethod', 1930 1924 'ConduitAPI_feed_publish_Method' => 'ConduitAPI_feed_Method', 1931 1925 'ConduitAPI_feed_query_Method' => 'ConduitAPI_feed_Method', ··· 2180 2174 'DiffusionCommitParentsQuery' => 'DiffusionQuery', 2181 2175 'DiffusionCommitQuery' => 'PhabricatorCursorPagedPolicyAwareQuery', 2182 2176 'DiffusionCommitTagsController' => 'DiffusionController', 2183 - 'DiffusionCommitTagsQuery' => 'DiffusionQuery', 2184 2177 'DiffusionContainsQuery' => 'DiffusionQuery', 2185 2178 'DiffusionController' => 'PhabricatorController', 2186 2179 'DiffusionDiffController' => 'DiffusionController', ··· 2190 2183 'DiffusionFileContentQuery' => 'DiffusionQuery', 2191 2184 'DiffusionGitBranchTestCase' => 'PhabricatorTestCase', 2192 2185 'DiffusionGitCommitParentsQuery' => 'DiffusionCommitParentsQuery', 2193 - 'DiffusionGitCommitTagsQuery' => 'DiffusionCommitTagsQuery', 2194 2186 'DiffusionGitContainsQuery' => 'DiffusionContainsQuery', 2195 2187 'DiffusionGitDiffQuery' => 'DiffusionDiffQuery', 2196 2188 'DiffusionGitFileContentQuery' => 'DiffusionFileContentQuery', ··· 2199 2191 'DiffusionGitMergedCommitsQuery' => 'DiffusionMergedCommitsQuery', 2200 2192 'DiffusionGitRawDiffQuery' => 'DiffusionRawDiffQuery', 2201 2193 'DiffusionGitRequest' => 'DiffusionRequest', 2202 - 'DiffusionGitTagListQuery' => 'DiffusionTagListQuery', 2203 2194 'DiffusionHistoryController' => 'DiffusionController', 2204 2195 'DiffusionHistoryQuery' => 'DiffusionQuery', 2205 2196 'DiffusionHistoryTableView' => 'DiffusionView', ··· 2212 2203 'DiffusionLintController' => 'DiffusionController', 2213 2204 'DiffusionLintDetailsController' => 'DiffusionController', 2214 2205 'DiffusionMercurialCommitParentsQuery' => 'DiffusionCommitParentsQuery', 2215 - 'DiffusionMercurialCommitTagsQuery' => 'DiffusionCommitTagsQuery', 2216 2206 'DiffusionMercurialContainsQuery' => 'DiffusionContainsQuery', 2217 2207 'DiffusionMercurialDiffQuery' => 'DiffusionDiffQuery', 2218 2208 'DiffusionMercurialFileContentQuery' => 'DiffusionFileContentQuery', ··· 2221 2211 'DiffusionMercurialMergedCommitsQuery' => 'DiffusionMergedCommitsQuery', 2222 2212 'DiffusionMercurialRawDiffQuery' => 'DiffusionRawDiffQuery', 2223 2213 'DiffusionMercurialRequest' => 'DiffusionRequest', 2224 - 'DiffusionMercurialTagListQuery' => 'DiffusionTagListQuery', 2225 2214 'DiffusionMergedCommitsQuery' => 'DiffusionQuery', 2226 2215 'DiffusionPathCompleteController' => 'DiffusionController', 2227 2216 'DiffusionPathQueryTestCase' => 'PhabricatorTestCase', ··· 2233 2222 'DiffusionRepositoryController' => 'DiffusionController', 2234 2223 'DiffusionSetupException' => 'AphrontUsageException', 2235 2224 'DiffusionSvnCommitParentsQuery' => 'DiffusionCommitParentsQuery', 2236 - 'DiffusionSvnCommitTagsQuery' => 'DiffusionCommitTagsQuery', 2237 2225 'DiffusionSvnContainsQuery' => 'DiffusionContainsQuery', 2238 2226 'DiffusionSvnDiffQuery' => 'DiffusionDiffQuery', 2239 2227 'DiffusionSvnFileContentQuery' => 'DiffusionFileContentQuery', ··· 2242 2230 'DiffusionSvnMergedCommitsQuery' => 'DiffusionMergedCommitsQuery', 2243 2231 'DiffusionSvnRawDiffQuery' => 'DiffusionRawDiffQuery', 2244 2232 'DiffusionSvnRequest' => 'DiffusionRequest', 2245 - 'DiffusionSvnTagListQuery' => 'DiffusionTagListQuery', 2246 2233 'DiffusionSymbolController' => 'DiffusionController', 2247 2234 'DiffusionSymbolQuery' => 'PhabricatorOffsetPagedQuery', 2248 2235 'DiffusionTagListController' => 'DiffusionController', 2249 - 'DiffusionTagListQuery' => 'DiffusionQuery', 2250 2236 'DiffusionTagListView' => 'DiffusionView', 2251 2237 'DiffusionURITestCase' => 'ArcanistPhutilTestCase', 2252 2238 'DiffusionView' => 'AphrontView',
+132
src/applications/diffusion/conduit/ConduitAPI_diffusion_tagsquery_Method.php
··· 1 + <?php 2 + 3 + /** 4 + * @group conduit 5 + */ 6 + final class ConduitAPI_diffusion_tagsquery_Method 7 + extends ConduitAPI_diffusion_abstractquery_Method { 8 + 9 + public function getMethodDescription() { 10 + return 11 + 'Find tags for a given commit or list tags in the repository.'; 12 + } 13 + 14 + public function defineReturnType() { 15 + return 'array'; 16 + } 17 + 18 + protected function defineCustomParamTypes() { 19 + return array( 20 + 'commit' => 'optional string', 21 + 'offset' => 'optional int', 22 + 'limit' => 'optional int', 23 + ); 24 + } 25 + 26 + protected function getGitResult(ConduitAPIRequest $request) { 27 + $drequest = $this->getDiffusionRequest(); 28 + $repository = $drequest->getRepository(); 29 + $commit = $drequest->getCommit(); 30 + $offset = $request->getValue('offset'); 31 + $limit = $request->getValue('limit'); 32 + 33 + if (!$commit) { 34 + return $this->loadGitTagList($offset, $limit); 35 + } 36 + 37 + list($err, $stdout) = $repository->execLocalCommand( 38 + 'tag -l --contains %s', 39 + $commit); 40 + 41 + if ($err) { 42 + // Git exits with an error code if the commit is bogus. 43 + return array(); 44 + } 45 + 46 + $stdout = trim($stdout); 47 + if (!strlen($stdout)) { 48 + return array(); 49 + } 50 + 51 + $tag_names = explode("\n", $stdout); 52 + $tag_names = array_fill_keys($tag_names, true); 53 + 54 + $tags = $this->loadGitTagList($offset = 0, $limit = 0, $serialize = false); 55 + 56 + $result = array(); 57 + foreach ($tags as $tag) { 58 + if (isset($tag_names[$tag->getName()])) { 59 + $result[] = $tag->toDictionary(); 60 + } 61 + } 62 + 63 + if ($offset) { 64 + $result = array_slice($result, $offset); 65 + } 66 + if ($limit) { 67 + $result = array_slice($result, 0, $limit); 68 + } 69 + 70 + return $result; 71 + } 72 + 73 + private function loadGitTagList($offset, $limit, $serialize=true) { 74 + $drequest = $this->getDiffusionRequest(); 75 + $repository = $drequest->getRepository(); 76 + 77 + $count = $offset + $limit; 78 + 79 + list($stdout) = $repository->execxLocalCommand( 80 + 'for-each-ref %C --sort=-creatordate --format=%s refs/tags', 81 + $count ? '--count='.(int)$count : null, 82 + '%(objectname) %(objecttype) %(refname) %(*objectname) %(*objecttype) '. 83 + '%(subject)%01%(creator)'); 84 + 85 + $stdout = trim($stdout); 86 + if (!strlen($stdout)) { 87 + return array(); 88 + } 89 + 90 + $tags = array(); 91 + foreach (explode("\n", $stdout) as $line) { 92 + list($info, $creator) = explode("\1", $line); 93 + list( 94 + $objectname, 95 + $objecttype, 96 + $refname, 97 + $refobjectname, 98 + $refobjecttype, 99 + $description) = explode(' ', $info, 6); 100 + 101 + $matches = null; 102 + if (!preg_match('/^(.*) ([0-9]+) ([0-9+-]+)$/', $creator, $matches)) { 103 + // It's possible a tag doesn't have a creator (tagger) 104 + $author = null; 105 + $epoch = null; 106 + } else { 107 + $author = $matches[1]; 108 + $epoch = $matches[2]; 109 + } 110 + 111 + $tag = new DiffusionRepositoryTag(); 112 + $tag->setAuthor($author); 113 + $tag->setEpoch($epoch); 114 + $tag->setCommitIdentifier(nonempty($refobjectname, $objectname)); 115 + $tag->setName(preg_replace('@^refs/tags/@', '', $refname)); 116 + $tag->setDescription($description); 117 + $tag->setType('git/'.$objecttype); 118 + 119 + $tags[] = $tag; 120 + } 121 + 122 + if ($offset) { 123 + $tags = array_slice($tags, $offset); 124 + } 125 + 126 + if ($serialize) { 127 + $tags = mpull($tags, 'toDictionary'); 128 + } 129 + return $tags; 130 + } 131 + 132 + }
+13 -3
src/applications/diffusion/controller/DiffusionCommitTagsController.php
··· 10 10 $request = $this->getDiffusionRequest(); 11 11 $tag_limit = 10; 12 12 13 - $tag_query = DiffusionCommitTagsQuery::newFromDiffusionRequest($request); 14 - $tag_query->setLimit($tag_limit + 1); 15 - $tags = $tag_query->loadTags(); 13 + $tags = array(); 14 + try { 15 + $tags = DiffusionRepositoryTag::newFromConduit( 16 + $this->callConduitWithDiffusionRequest( 17 + 'diffusion.tagsquery', 18 + array( 19 + 'commit' => $request->getCommit(), 20 + 'limit' => $tag_limit + 1))); 21 + } catch (ConduitException $ex) { 22 + if ($ex->getMessage() != 'ERR-UNSUPPORTED-VCS') { 23 + throw $ex; 24 + } 25 + } 16 26 17 27 $has_more_tags = (count($tags) > $tag_limit); 18 28 $tags = array_slice($tags, 0, $tag_limit);
+11 -4
src/applications/diffusion/controller/DiffusionRepositoryController.php
··· 216 216 217 217 private function buildTagListTable(DiffusionRequest $drequest) { 218 218 $tag_limit = 15; 219 - 220 - $query = DiffusionTagListQuery::newFromDiffusionRequest($drequest); 221 - $query->setLimit($tag_limit + 1); 222 - $tags = $query->loadTags(); 219 + $tags = array(); 220 + try { 221 + $tags = DiffusionRepositoryTag::newFromConduit( 222 + $this->callConduitWithDiffusionRequest( 223 + 'diffusion.tagsquery', 224 + array('limit' => $tag_limit + 1))); 225 + } catch (ConduitException $e) { 226 + if ($e->getMessage() != 'ERR-UNSUPPORTED-VCS') { 227 + throw $e; 228 + } 229 + } 223 230 224 231 if (!$tags) { 225 232 return null;
+15 -10
src/applications/diffusion/controller/DiffusionTagListController.php
··· 13 13 $pager->setURI($request->getRequestURI(), 'offset'); 14 14 $pager->setOffset($request->getInt('offset')); 15 15 16 + $params = array( 17 + 'limit' => $pager->getPageSize() + 1, 18 + 'offset' => $pager->getOffset()); 16 19 if ($drequest->getRawCommit()) { 17 20 $is_commit = true; 18 - 19 - $query = DiffusionCommitTagsQuery::newFromDiffusionRequest($drequest); 20 - $query->setOffset($pager->getOffset()); 21 - $query->setLimit($pager->getPageSize() + 1); 22 - $tags = $query->loadTags(); 21 + $params['commit'] = $request->getCommit(); 23 22 } else { 24 23 $is_commit = false; 24 + } 25 25 26 - $query = DiffusionTagListQuery::newFromDiffusionRequest($drequest); 27 - $query->setOffset($pager->getOffset()); 28 - $query->setLimit($pager->getPageSize() + 1); 29 - $tags = $query->loadTags(); 26 + $tags = array(); 27 + try { 28 + $conduit_result = $this->callConduitWithDiffusionRequest( 29 + 'diffusion.tagsquery', 30 + $params); 31 + $tags = DiffusionRepositoryTag::newFromConduit($conduit_result); 32 + } catch (ConduitException $ex) { 33 + if ($ex->getMessage() != 'ERR-UNSUPPORTED-VCS') { 34 + throw $ex; 35 + } 30 36 } 31 - 32 37 $tags = $pager->sliceResults($tags); 33 38 34 39 $content = null;
+24
src/applications/diffusion/data/DiffusionRepositoryTag.php
··· 63 63 return $this->author; 64 64 } 65 65 66 + public function toDictionary() { 67 + return array( 68 + 'author' => $this->getAuthor(), 69 + 'epoch' => $this->getEpoch(), 70 + 'commitIdentifier' => $this->getCommitIdentifier(), 71 + 'name' => $this->getName(), 72 + 'description' => $this->getDescription(), 73 + 'type' => $this->getType()); 74 + } 75 + 76 + public function newFromConduit(array $dicts) { 77 + $tags = array(); 78 + foreach ($dicts as $dict) { 79 + $tags[] = id(new DiffusionRepositoryTag()) 80 + ->setAuthor($dict['author']) 81 + ->setEpoch($dict['epoch']) 82 + ->setCommitIdentifier($dict['commitIdentifier']) 83 + ->setName($dict['name']) 84 + ->setDescription($dict['description']) 85 + ->setType($dict['type']); 86 + } 87 + return $tags; 88 + } 89 + 66 90 }
-35
src/applications/diffusion/query/committags/DiffusionCommitTagsQuery.php
··· 1 - <?php 2 - 3 - abstract class DiffusionCommitTagsQuery extends DiffusionQuery { 4 - 5 - private $limit; 6 - private $offset; 7 - 8 - public function setOffset($offset) { 9 - $this->offset = $offset; 10 - return $this; 11 - } 12 - 13 - public function getOffset() { 14 - return $this->offset; 15 - } 16 - 17 - public function setLimit($limit) { 18 - $this->limit = $limit; 19 - return $this; 20 - } 21 - 22 - protected function getLimit() { 23 - return $this->limit; 24 - } 25 - 26 - final public static function newFromDiffusionRequest( 27 - DiffusionRequest $request) { 28 - return self::newQueryObject(__CLASS__, $request); 29 - } 30 - 31 - final public function loadTags() { 32 - return $this->executeQuery(); 33 - } 34 - 35 - }
-48
src/applications/diffusion/query/committags/DiffusionGitCommitTagsQuery.php
··· 1 - <?php 2 - 3 - final class DiffusionGitCommitTagsQuery 4 - extends DiffusionCommitTagsQuery { 5 - 6 - protected function executeQuery() { 7 - $drequest = $this->getRequest(); 8 - $repository = $drequest->getRepository(); 9 - 10 - list($err, $stdout) = $repository->execLocalCommand( 11 - 'tag -l --contains %s', 12 - $drequest->getCommit()); 13 - 14 - if ($err) { 15 - // Git exits with an error code if the commit is bogus. 16 - return array(); 17 - } 18 - 19 - $stdout = trim($stdout); 20 - if (!strlen($stdout)) { 21 - return array(); 22 - } 23 - 24 - $tag_names = explode("\n", $stdout); 25 - $tag_names = array_fill_keys($tag_names, true); 26 - 27 - $tag_query = DiffusionTagListQuery::newFromDiffusionRequest($drequest); 28 - $tags = $tag_query->loadTags(); 29 - 30 - $result = array(); 31 - foreach ($tags as $tag) { 32 - if (isset($tag_names[$tag->getName()])) { 33 - $result[] = $tag; 34 - } 35 - } 36 - 37 - if ($this->getOffset()) { 38 - $result = array_slice($result, $this->getOffset()); 39 - } 40 - 41 - if ($this->getLimit()) { 42 - $result = array_slice($result, 0, $this->getLimit()); 43 - } 44 - 45 - return $result; 46 - } 47 - 48 - }
-11
src/applications/diffusion/query/committags/DiffusionMercurialCommitTagsQuery.php
··· 1 - <?php 2 - 3 - final class DiffusionMercurialCommitTagsQuery 4 - extends DiffusionCommitTagsQuery { 5 - 6 - protected function executeQuery() { 7 - // TODO: Implement this. 8 - return array(); 9 - } 10 - 11 - }
-11
src/applications/diffusion/query/committags/DiffusionSvnCommitTagsQuery.php
··· 1 - <?php 2 - 3 - final class DiffusionSvnCommitTagsQuery 4 - extends DiffusionCommitTagsQuery { 5 - 6 - protected function executeQuery() { 7 - // No meaningful concept of tags in Subversion. 8 - return array(); 9 - } 10 - 11 - }
-62
src/applications/diffusion/query/taglist/DiffusionGitTagListQuery.php
··· 1 - <?php 2 - 3 - final class DiffusionGitTagListQuery extends DiffusionTagListQuery { 4 - 5 - protected function executeQuery() { 6 - $drequest = $this->getRequest(); 7 - $repository = $drequest->getRepository(); 8 - 9 - $count = $this->getOffset() + $this->getLimit(); 10 - 11 - list($stdout) = $repository->execxLocalCommand( 12 - 'for-each-ref %C --sort=-creatordate --format=%s refs/tags', 13 - $count ? '--count='.(int)$count : null, 14 - '%(objectname) %(objecttype) %(refname) %(*objectname) %(*objecttype) '. 15 - '%(subject)%01%(creator)'); 16 - 17 - $stdout = trim($stdout); 18 - if (!strlen($stdout)) { 19 - return array(); 20 - } 21 - 22 - $tags = array(); 23 - foreach (explode("\n", $stdout) as $line) { 24 - list($info, $creator) = explode("\1", $line); 25 - list( 26 - $objectname, 27 - $objecttype, 28 - $refname, 29 - $refobjectname, 30 - $refobjecttype, 31 - $description) = explode(' ', $info, 6); 32 - 33 - $matches = null; 34 - if (!preg_match('/^(.*) ([0-9]+) ([0-9+-]+)$/', $creator, $matches)) { 35 - // It's possible a tag doesn't have a creator (tagger) 36 - $author = null; 37 - $epoch = null; 38 - } else { 39 - $author = $matches[1]; 40 - $epoch = $matches[2]; 41 - } 42 - 43 - $tag = new DiffusionRepositoryTag(); 44 - $tag->setAuthor($author); 45 - $tag->setEpoch($epoch); 46 - $tag->setCommitIdentifier(nonempty($refobjectname, $objectname)); 47 - $tag->setName(preg_replace('@^refs/tags/@', '', $refname)); 48 - $tag->setDescription($description); 49 - $tag->setType('git/'.$objecttype); 50 - 51 - $tags[] = $tag; 52 - } 53 - 54 - $offset = $this->getOffset(); 55 - if ($offset) { 56 - $tags = array_slice($tags, $offset); 57 - } 58 - 59 - return $tags; 60 - } 61 - 62 - }
-10
src/applications/diffusion/query/taglist/DiffusionMercurialTagListQuery.php
··· 1 - <?php 2 - 3 - final class DiffusionMercurialTagListQuery extends DiffusionTagListQuery { 4 - 5 - protected function executeQuery() { 6 - // TODO: Implement this for Mercurial. 7 - return array(); 8 - } 9 - 10 - }
-10
src/applications/diffusion/query/taglist/DiffusionSvnTagListQuery.php
··· 1 - <?php 2 - 3 - final class DiffusionSvnTagListQuery extends DiffusionTagListQuery { 4 - 5 - protected function executeQuery() { 6 - // Nothing meaningful to be done in Subversion. 7 - return array(); 8 - } 9 - 10 - }
-35
src/applications/diffusion/query/taglist/DiffusionTagListQuery.php
··· 1 - <?php 2 - 3 - abstract class DiffusionTagListQuery extends DiffusionQuery { 4 - 5 - private $limit; 6 - private $offset; 7 - 8 - public function setOffset($offset) { 9 - $this->offset = $offset; 10 - return $this; 11 - } 12 - 13 - public function getOffset() { 14 - return $this->offset; 15 - } 16 - 17 - public function setLimit($limit) { 18 - $this->limit = $limit; 19 - return $this; 20 - } 21 - 22 - protected function getLimit() { 23 - return $this->limit; 24 - } 25 - 26 - final public static function newFromDiffusionRequest( 27 - DiffusionRequest $request) { 28 - return self::newQueryObject(__CLASS__, $request); 29 - } 30 - 31 - final public function loadTags() { 32 - return $this->executeQuery(); 33 - } 34 - 35 - }