Skip to content

Commit 321b776

Browse files
author
epriestley
committed
Show README on repository screen in Diffusion
Summary: - Show README on the repository screen. - Move README to the bottom of the page for both repository and browse screens. - Support "README.rainbow". Test Plan: Looked at repository, browse screens. Made a "README.rainbow". Reviewers: btrahan, vrana, jungejason Reviewed By: btrahan CC: aran Maniphest Tasks: T1104 Differential Revision: https://secure.phabricator.com/D2336
1 parent 6fd99e2 commit 321b776

File tree

5 files changed

+86
-31
lines changed

5 files changed

+86
-31
lines changed

src/applications/diffusion/controller/browse/DiffusionBrowseController.php

Lines changed: 10 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -81,34 +81,6 @@ public function processRequest() {
8181
$phids = array_keys($phids);
8282
$handles = id(new PhabricatorObjectHandleData($phids))->loadHandles();
8383

84-
if ($readme) {
85-
$readme_request = DiffusionRequest::newFromDictionary(
86-
array(
87-
'repository' => $drequest->getRepository(),
88-
'commit' => $drequest->getStableCommitName(),
89-
'path' => $readme->getFullPath(),
90-
));
91-
92-
$content_query = DiffusionFileContentQuery::newFromDiffusionRequest(
93-
$readme_request);
94-
$content_query->loadFileContent();
95-
$readme_content = $content_query->getRawData();
96-
97-
if (preg_match('/.txt$/', $readme->getPath())) {
98-
$readme_content = phutil_escape_html($readme_content);
99-
$readme_content = nl2br($readme_content);
100-
} else {
101-
// Markup extensionless files as remarkup so we get links and such.
102-
$readme_content = $this->markupText($readme_content);
103-
}
104-
105-
$readme_panel = new AphrontPanelView();
106-
$readme_panel->setHeader('README');
107-
$readme_panel->appendChild($readme_content);
108-
109-
$content[] = $readme_panel;
110-
}
111-
11284
$browse_table = new DiffusionBrowseTableView();
11385
$browse_table->setDiffusionRequest($drequest);
11486
$browse_table->setHandles($handles);
@@ -122,6 +94,16 @@ public function processRequest() {
12294

12395
$content[] = $this->buildOpenRevisions();
12496

97+
$readme_content = $browse_query->renderReadme($results);
98+
if ($readme_content) {
99+
$readme_panel = new AphrontPanelView();
100+
$readme_panel->setHeader('README');
101+
$readme_panel->appendChild($readme_content);
102+
103+
$content[] = $readme_panel;
104+
}
105+
106+
125107
$nav = $this->buildSideNav('browse', false);
126108
$nav->appendChild($content);
127109

src/applications/diffusion/controller/browse/__init__.php

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,8 +9,6 @@
99
phutil_require_module('phabricator', 'applications/diffusion/controller/base');
1010
phutil_require_module('phabricator', 'applications/diffusion/controller/file');
1111
phutil_require_module('phabricator', 'applications/diffusion/query/browse/base');
12-
phutil_require_module('phabricator', 'applications/diffusion/query/filecontent/base');
13-
phutil_require_module('phabricator', 'applications/diffusion/request/base');
1412
phutil_require_module('phabricator', 'applications/diffusion/view/browsetable');
1513
phutil_require_module('phabricator', 'applications/diffusion/view/emptyresult');
1614
phutil_require_module('phabricator', 'applications/markup/engine');

src/applications/diffusion/controller/repository/DiffusionRepositoryController.php

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -110,6 +110,14 @@ public function processRequest() {
110110
$content[] = $branch_panel;
111111
}
112112

113+
$readme = $browse_query->renderReadme($browse_results);
114+
if ($readme) {
115+
$panel = new AphrontPanelView();
116+
$panel->setHeader('README');
117+
$panel->appendChild($readme);
118+
$content[] = $panel;
119+
}
120+
113121
return $this->buildStandardPageResponse(
114122
$content,
115123
array(

src/applications/diffusion/query/browse/base/DiffusionBrowseQuery.php

Lines changed: 62 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
<?php
22

33
/*
4-
* Copyright 2011 Facebook, Inc.
4+
* Copyright 2012 Facebook, Inc.
55
*
66
* Licensed under the Apache License, Version 2.0 (the "License");
77
* you may not use this file except in compliance with the License.
@@ -93,5 +93,66 @@ final public function needValidityOnly($need_validity_only) {
9393
return $this;
9494
}
9595

96+
final public function renderReadme(array $results) {
97+
$drequest = $this->getRequest();
98+
99+
$readme = null;
100+
foreach ($results as $result) {
101+
$path = $result->getPath();
102+
if (preg_match('/^readme(|\.txt|\.remarkup|\.rainbow)$/i', $path)) {
103+
$readme = $result;
104+
break;
105+
}
106+
}
107+
108+
if (!$readme) {
109+
return null;
110+
}
111+
112+
$readme_request = DiffusionRequest::newFromDictionary(
113+
array(
114+
'repository' => $drequest->getRepository(),
115+
'commit' => $drequest->getStableCommitName(),
116+
'path' => $readme->getFullPath(),
117+
));
118+
119+
$content_query = DiffusionFileContentQuery::newFromDiffusionRequest(
120+
$readme_request);
121+
$content_query->loadFileContent();
122+
$readme_content = $content_query->getRawData();
123+
124+
125+
if (preg_match('/\\.txt$/', $readme->getPath())) {
126+
$readme_content = phutil_escape_html($readme_content);
127+
$readme_content = nl2br($readme_content);
128+
129+
$class = null;
130+
} else if (preg_match('/\\.rainbow$/', $readme->getPath())) {
131+
$highlighter = new PhutilRainbowSyntaxHighlighter();
132+
$readme_content = $highlighter
133+
->getHighlightFuture($readme_content)
134+
->resolve();
135+
$readme_content = nl2br($readme_content);
136+
137+
require_celerity_resource('syntax-highlighting-css');
138+
$class = 'remarkup-code';
139+
} else {
140+
// Markup extensionless files as remarkup so we get links and such.
141+
$engine = PhabricatorMarkupEngine::newDiffusionMarkupEngine();
142+
$readme_content = $engine->markupText($readme_content);
143+
144+
$class = 'phabricator-remarkup';
145+
}
146+
147+
$readme_content = phutil_render_tag(
148+
'div',
149+
array(
150+
'class' => $class,
151+
),
152+
$readme_content);
153+
154+
return $readme_content;
155+
}
156+
96157
abstract protected function executeQuery();
97158
}

src/applications/diffusion/query/browse/base/__init__.php

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,8 +6,14 @@
66

77

88

9+
phutil_require_module('phabricator', 'applications/diffusion/query/filecontent/base');
10+
phutil_require_module('phabricator', 'applications/diffusion/request/base');
11+
phutil_require_module('phabricator', 'applications/markup/engine');
912
phutil_require_module('phabricator', 'applications/repository/constants/repositorytype');
13+
phutil_require_module('phabricator', 'infrastructure/celerity/api');
1014

15+
phutil_require_module('phutil', 'markup');
16+
phutil_require_module('phutil', 'markup/syntax/highlighter/rainbow');
1117
phutil_require_module('phutil', 'symbols');
1218

1319

0 commit comments

Comments
 (0)