1
0
Fork 0
mirror of https://we.phorge.it/source/phorge.git synced 2025-02-02 09:58:24 +01:00

In Diffusion browse views, show a README file if one exists

Summary: COMPLETELY ORIGINAL IDEA

Test Plan: Browsed around Phabricator, got helpful readmes in some cases.

Reviewers: davidreuss, btrahan

Reviewed By: btrahan

CC: aran, epriestley

Differential Revision: https://secure.phabricator.com/D2022
This commit is contained in:
epriestley 2012-03-26 12:21:39 -07:00
parent 5ba6e241c4
commit 59b49e6429
5 changed files with 54 additions and 40 deletions

View file

@ -253,7 +253,7 @@ abstract class DiffusionController extends PhabricatorController {
array( array(
'href' => $drequest->generateURI( 'href' => $drequest->generateURI(
array( array(
'path' => null, 'path' => '',
) + $uri_params), ) + $uri_params),
), ),
$view_name); $view_name);

View file

@ -49,6 +49,8 @@ final class DiffusionBrowseController extends DiffusionController {
} else { } else {
$readme = null;
$phids = array(); $phids = array();
foreach ($results as $result) { foreach ($results as $result) {
$data = $result->getLastCommitData(); $data = $result->getLastCommitData();
@ -57,11 +59,53 @@ final class DiffusionBrowseController extends DiffusionController {
$phids[$data->getCommitDetail('authorPHID')] = true; $phids[$data->getCommitDetail('authorPHID')] = true;
} }
} }
}
$phids = array_keys($phids);
$path = $result->getPath();
if (preg_match('/^readme(|\.txt|\.remarkup)$/i', $path)) {
$readme = $result;
}
}
$phids = array_keys($phids);
$handles = id(new PhabricatorObjectHandleData($phids))->loadHandles(); $handles = id(new PhabricatorObjectHandleData($phids))->loadHandles();
if ($readme) {
$readme_request = DiffusionRequest::newFromDictionary(
array(
'repository' => $drequest->getRepository(),
'commit' => $drequest->getStableCommitName(),
'path' => $readme->getFullPath(),
));
$content_query = DiffusionFileContentQuery::newFromDiffusionRequest(
$readme_request);
$content_query->loadFileContent();
$readme_content = $content_query->getRawData();
if (preg_match('/.txt$/', $readme->getPath())) {
$readme_content = phutil_escape_html($readme_content);
$readme_content = nl2br($readme_content);
} else {
// Markup extensionless files as remarkup so we get links and such.
$engine = PhabricatorMarkupEngine::newDiffusionMarkupEngine();
$readme_content = $engine->markupText($readme_content);
$readme_content = phutil_render_tag(
'div',
array(
'class' => 'phabricator-remarkup',
),
$readme_content);
}
$readme_panel = new AphrontPanelView();
$readme_panel->setHeader('README');
$readme_panel->appendChild($readme_content);
$content[] = $readme_panel;
}
$browse_table = new DiffusionBrowseTableView(); $browse_table = new DiffusionBrowseTableView();
$browse_table->setDiffusionRequest($drequest); $browse_table->setDiffusionRequest($drequest);
$browse_table->setHandles($handles); $browse_table->setHandles($handles);

View file

@ -9,11 +9,15 @@
phutil_require_module('phabricator', 'applications/diffusion/controller/base'); phutil_require_module('phabricator', 'applications/diffusion/controller/base');
phutil_require_module('phabricator', 'applications/diffusion/controller/file'); phutil_require_module('phabricator', 'applications/diffusion/controller/file');
phutil_require_module('phabricator', 'applications/diffusion/query/browse/base'); phutil_require_module('phabricator', 'applications/diffusion/query/browse/base');
phutil_require_module('phabricator', 'applications/diffusion/query/filecontent/base');
phutil_require_module('phabricator', 'applications/diffusion/request/base');
phutil_require_module('phabricator', 'applications/diffusion/view/browsetable'); phutil_require_module('phabricator', 'applications/diffusion/view/browsetable');
phutil_require_module('phabricator', 'applications/diffusion/view/emptyresult'); phutil_require_module('phabricator', 'applications/diffusion/view/emptyresult');
phutil_require_module('phabricator', 'applications/markup/engine');
phutil_require_module('phabricator', 'applications/phid/handle/data'); phutil_require_module('phabricator', 'applications/phid/handle/data');
phutil_require_module('phabricator', 'view/layout/panel'); phutil_require_module('phabricator', 'view/layout/panel');
phutil_require_module('phutil', 'markup');
phutil_require_module('phutil', 'utils'); phutil_require_module('phutil', 'utils');

View file

@ -16,41 +16,14 @@
* limitations under the License. * limitations under the License.
*/ */
abstract class DiffusionFileContentQuery { abstract class DiffusionFileContentQuery extends DiffusionQuery {
private $request;
private $needsBlame; private $needsBlame;
private $fileContent; private $fileContent;
final private function __construct() {
// <private>
}
final public static function newFromDiffusionRequest( final public static function newFromDiffusionRequest(
DiffusionRequest $request) { DiffusionRequest $request) {
return parent::newQueryObject(__CLASS__, $request);
$repository = $request->getRepository();
switch ($repository->getVersionControlSystem()) {
case PhabricatorRepositoryType::REPOSITORY_TYPE_GIT:
$class = 'DiffusionGitFileContentQuery';
break;
case PhabricatorRepositoryType::REPOSITORY_TYPE_MERCURIAL:
$class = 'DiffusionMercurialFileContentQuery';
break;
case PhabricatorRepositoryType::REPOSITORY_TYPE_SVN:
$class = 'DiffusionSvnFileContentQuery';
break;
default:
throw new Exception("Unsupported VCS!");
}
PhutilSymbolLoader::loadClass($class);
$query = new $class();
$query->request = $request;
return $query;
} }
public function getSupportsBlameOnBlame() { public function getSupportsBlameOnBlame() {
@ -63,16 +36,10 @@ abstract class DiffusionFileContentQuery {
throw new Exception("Unsupported VCS!"); throw new Exception("Unsupported VCS!");
} }
final protected function getRequest() {
return $this->request;
}
final public function loadFileContent() { final public function loadFileContent() {
$this->fileContent = $this->executeQuery(); $this->fileContent = $this->executeQuery();
} }
abstract protected function executeQuery();
final public function getRawData() { final public function getRawData() {
return $this->fileContent->getCorpus(); return $this->fileContent->getCorpus();
} }

View file

@ -6,12 +6,11 @@
phutil_require_module('phabricator', 'applications/diffusion/query/base');
phutil_require_module('phabricator', 'applications/phid/handle/data'); phutil_require_module('phabricator', 'applications/phid/handle/data');
phutil_require_module('phabricator', 'applications/repository/constants/repositorytype');
phutil_require_module('phabricator', 'applications/repository/storage/commit'); phutil_require_module('phabricator', 'applications/repository/storage/commit');
phutil_require_module('phabricator', 'applications/repository/storage/commitdata'); phutil_require_module('phabricator', 'applications/repository/storage/commitdata');
phutil_require_module('phutil', 'symbols');
phutil_require_module('phutil', 'utils'); phutil_require_module('phutil', 'utils');