2011-03-08 00:13:36 +01:00
|
|
|
<?php
|
|
|
|
|
|
|
|
abstract class DiffusionController extends PhabricatorController {
|
|
|
|
|
2011-03-09 02:31:44 +01:00
|
|
|
protected $diffusionRequest;
|
|
|
|
|
2014-04-30 00:07:00 +02:00
|
|
|
public function setDiffusionRequest(DiffusionRequest $request) {
|
|
|
|
$this->diffusionRequest = $request;
|
|
|
|
return $this;
|
|
|
|
}
|
|
|
|
|
|
|
|
protected function getDiffusionRequest() {
|
|
|
|
if (!$this->diffusionRequest) {
|
2015-05-22 09:27:56 +02:00
|
|
|
throw new Exception(pht('No Diffusion request object!'));
|
2014-04-30 00:07:00 +02:00
|
|
|
}
|
|
|
|
return $this->diffusionRequest;
|
|
|
|
}
|
|
|
|
|
Accept and route VCS HTTP requests
Summary:
Mostly ripped from D7391, with some changes:
- Serve repositories at `/diffusion/X/`, with no special `/git/` or `/serve/` URI component.
- This requires a little bit of magic, but I got the magic working for Git, Mercurial and SVN, and it seems reasonable.
- I think having one URI for everything will make it easier for users to understand.
- One downside is that git will clone into `X` by default, but I think that's not a big deal, and we can work around that in the future easily enough.
- Accept HTTP requests for Git, SVN and Mercurial repositories.
- Auth logic is a little different in order to be more consistent with how other things work.
- Instead of AphrontBasicAuthResponse, added "VCSResponse". Mercurial can print strings we send it on the CLI if we're careful, so support that. I did a fair amount of digging and didn't have any luck with git or svn.
- Commands we don't know about are assumed to require "Push" capability by default.
No actual VCS data going over the wire yet.
Test Plan:
Ran a bunch of stuff like this:
$ hg clone http://local.aphront.com:8080/diffusion/P/
abort: HTTP Error 403: This repository is not available over HTTP.
...and got pretty reasonable-seeming errors in all cases. All this can do is produce errors for now.
Reviewers: hach-que, btrahan
Reviewed By: hach-que
CC: aran
Maniphest Tasks: T2230
Differential Revision: https://secure.phabricator.com/D7417
2013-10-26 16:56:17 +02:00
|
|
|
public function willBeginExecution() {
|
|
|
|
$request = $this->getRequest();
|
2013-11-06 00:24:58 +01:00
|
|
|
|
Accept and route VCS HTTP requests
Summary:
Mostly ripped from D7391, with some changes:
- Serve repositories at `/diffusion/X/`, with no special `/git/` or `/serve/` URI component.
- This requires a little bit of magic, but I got the magic working for Git, Mercurial and SVN, and it seems reasonable.
- I think having one URI for everything will make it easier for users to understand.
- One downside is that git will clone into `X` by default, but I think that's not a big deal, and we can work around that in the future easily enough.
- Accept HTTP requests for Git, SVN and Mercurial repositories.
- Auth logic is a little different in order to be more consistent with how other things work.
- Instead of AphrontBasicAuthResponse, added "VCSResponse". Mercurial can print strings we send it on the CLI if we're careful, so support that. I did a fair amount of digging and didn't have any luck with git or svn.
- Commands we don't know about are assumed to require "Push" capability by default.
No actual VCS data going over the wire yet.
Test Plan:
Ran a bunch of stuff like this:
$ hg clone http://local.aphront.com:8080/diffusion/P/
abort: HTTP Error 403: This repository is not available over HTTP.
...and got pretty reasonable-seeming errors in all cases. All this can do is produce errors for now.
Reviewers: hach-que, btrahan
Reviewed By: hach-que
CC: aran
Maniphest Tasks: T2230
Differential Revision: https://secure.phabricator.com/D7417
2013-10-26 16:56:17 +02:00
|
|
|
// Check if this is a VCS request, e.g. from "git clone", "hg clone", or
|
|
|
|
// "svn checkout". If it is, we jump off into repository serving code to
|
|
|
|
// process the request.
|
2013-11-07 02:55:46 +01:00
|
|
|
if (DiffusionServeController::isVCSRequest($request)) {
|
Decouple some aspects of request routing and construction
Summary:
Ref T5702. This is a forward-looking change which provides some very broad API improvements but does not implement them. In particular:
- Controllers no longer require `$request` to construct. This is mostly for T5702, directly, but simplifies things in general. Instead, we call `setRequest()` before using a controller. Only a small number of sites activate controllers, so this is less code overall, and more consistent with most constructors not having any parameters or effects.
- `$request` now offers `getURIData($key, ...)`. This is an alternate way of accessing `$data` which is currently only available on `willProcessRequest(array $data)`. Almost all controllers which implement this method do so in order to read one or two things out of the URI data. Instead, let them just read this data directly when processing the request.
- Introduce `handleRequest(AphrontRequest $request)` and deprecate (very softly) `processRequest()`. The majority of `processRequest()` calls begin `$request = $this->getRequest()`, which is avoided with the more practical signature.
- Provide `getViewer()` on `$request`, and a convenience `getViewer()` on `$controller`. This fixes `$viewer = $request->getUser();` into `$viewer = $request->getViewer();`, and converts the `$request + $viewer` two-liner into a single `$this->getViewer()`.
Test Plan:
- Browsed around in general.
- Hit special controllers (redirect, 404).
- Hit AuditList controller (uses new style).
Reviewers: btrahan
Reviewed By: btrahan
Subscribers: epriestley
Maniphest Tasks: T5702
Differential Revision: https://secure.phabricator.com/D10698
2014-10-17 14:01:40 +02:00
|
|
|
$serve_controller = id(new DiffusionServeController())
|
2013-11-07 02:55:46 +01:00
|
|
|
->setCurrentApplication($this->getCurrentApplication());
|
|
|
|
return $this->delegateToController($serve_controller);
|
Accept and route VCS HTTP requests
Summary:
Mostly ripped from D7391, with some changes:
- Serve repositories at `/diffusion/X/`, with no special `/git/` or `/serve/` URI component.
- This requires a little bit of magic, but I got the magic working for Git, Mercurial and SVN, and it seems reasonable.
- I think having one URI for everything will make it easier for users to understand.
- One downside is that git will clone into `X` by default, but I think that's not a big deal, and we can work around that in the future easily enough.
- Accept HTTP requests for Git, SVN and Mercurial repositories.
- Auth logic is a little different in order to be more consistent with how other things work.
- Instead of AphrontBasicAuthResponse, added "VCSResponse". Mercurial can print strings we send it on the CLI if we're careful, so support that. I did a fair amount of digging and didn't have any luck with git or svn.
- Commands we don't know about are assumed to require "Push" capability by default.
No actual VCS data going over the wire yet.
Test Plan:
Ran a bunch of stuff like this:
$ hg clone http://local.aphront.com:8080/diffusion/P/
abort: HTTP Error 403: This repository is not available over HTTP.
...and got pretty reasonable-seeming errors in all cases. All this can do is produce errors for now.
Reviewers: hach-que, btrahan
Reviewed By: hach-que
CC: aran
Maniphest Tasks: T2230
Differential Revision: https://secure.phabricator.com/D7417
2013-10-26 16:56:17 +02:00
|
|
|
}
|
|
|
|
|
2013-11-07 02:55:46 +01:00
|
|
|
return parent::willBeginExecution();
|
Accept and route VCS HTTP requests
Summary:
Mostly ripped from D7391, with some changes:
- Serve repositories at `/diffusion/X/`, with no special `/git/` or `/serve/` URI component.
- This requires a little bit of magic, but I got the magic working for Git, Mercurial and SVN, and it seems reasonable.
- I think having one URI for everything will make it easier for users to understand.
- One downside is that git will clone into `X` by default, but I think that's not a big deal, and we can work around that in the future easily enough.
- Accept HTTP requests for Git, SVN and Mercurial repositories.
- Auth logic is a little different in order to be more consistent with how other things work.
- Instead of AphrontBasicAuthResponse, added "VCSResponse". Mercurial can print strings we send it on the CLI if we're careful, so support that. I did a fair amount of digging and didn't have any luck with git or svn.
- Commands we don't know about are assumed to require "Push" capability by default.
No actual VCS data going over the wire yet.
Test Plan:
Ran a bunch of stuff like this:
$ hg clone http://local.aphront.com:8080/diffusion/P/
abort: HTTP Error 403: This repository is not available over HTTP.
...and got pretty reasonable-seeming errors in all cases. All this can do is produce errors for now.
Reviewers: hach-que, btrahan
Reviewed By: hach-que
CC: aran
Maniphest Tasks: T2230
Differential Revision: https://secure.phabricator.com/D7417
2013-10-26 16:56:17 +02:00
|
|
|
}
|
|
|
|
|
2015-01-09 22:29:08 +01:00
|
|
|
protected function shouldLoadDiffusionRequest() {
|
|
|
|
return true;
|
|
|
|
}
|
|
|
|
|
|
|
|
final public function handleRequest(AphrontRequest $request) {
|
|
|
|
if ($request->getURIData('callsign') &&
|
|
|
|
$this->shouldLoadDiffusionRequest()) {
|
|
|
|
try {
|
2012-11-09 00:14:44 +01:00
|
|
|
$drequest = DiffusionRequest::newFromAphrontRequestDictionary(
|
2015-01-09 22:29:08 +01:00
|
|
|
$request->getURIMap(),
|
|
|
|
$request);
|
|
|
|
} catch (Exception $ex) {
|
|
|
|
return id(new Aphront404Response())
|
|
|
|
->setRequest($request);
|
|
|
|
}
|
2014-04-30 00:07:00 +02:00
|
|
|
$this->setDiffusionRequest($drequest);
|
Fix many encoding and architecture problems in Diffusion request and URI handling
Summary:
Diffusion request/uri handling is currently a big, hastily ported mess. In particular, it has:
- Tons and tons of duplicated code.
- Bugs with handling unusual branch and file names.
- An excessively large (and yet insufficiently expressive) API on DiffusionRequest, including a nonsensical concrete base class.
- Other tools were doing hacky things like passing ":" branch names.
This diff attempts to fix these issues.
- Make the base class abstract (it was concrete ONLY for "/diffusion/").
- Move all URI generation to DiffusionRequest. Make the core static. Add unit tests.
- Delete the 300 copies of URI generation code throughout Diffusion.
- Move all URI parsing to DiffusionRequest. Make the core static. Add unit tests.
- Add an appropriate static initializer for other callers.
- Convert all code calling `newFromAphrontRequestDictionary` outside of Diffusion to the new `newFromDictionary` API.
- Refactor static initializers to be sensibly-sized.
- Refactor derived DiffusionRequest classes to remove duplicated code.
- Properly encode branch names (fixes branches with "/", see <https://github.com/facebook/phabricator/issues/100>).
- Properly encode path names (fixes issues in D1742).
- Properly escape delimiter characters ";" and "$" in path names so files like "$100" are not interpreted as "line 100".
- Fix a couple warnings.
- Fix a couple lint issues.
- Fix a bug where we would not parse filenames with spaces in them correctly in the Git browse query.
- Fix a bug where Git change queries would fail unnecessarily.
- Provide or improve some documentation.
This thing is pretty gigantic but also kind of hard to split up. If it's unreasonably difficult to review, let me know and I can take a stab at it though.
This supplants D1742.
Test Plan:
- Used home, repository, branch, browse, change, history, diff (ajax), lastmodified (ajax) views of Diffusion.
- Used Owners typeaheads and search.
- Used diffusion.getrecentcommitsbypath method.
- Pushed a change to an absurdly-named file on an absurdly-named branch, everything worked properly.
{F9185}
Reviewers: nh, vrana, btrahan
Reviewed By: btrahan
CC: aran, epriestley
Differential Revision: https://secure.phabricator.com/D1921
2012-03-20 03:52:14 +01:00
|
|
|
}
|
2015-01-09 22:29:08 +01:00
|
|
|
return $this->processDiffusionRequest($request);
|
2011-03-09 02:31:44 +01:00
|
|
|
}
|
|
|
|
|
2015-01-09 22:29:08 +01:00
|
|
|
abstract protected function processDiffusionRequest(AphrontRequest $request);
|
|
|
|
|
2011-03-13 01:17:34 +01:00
|
|
|
public function buildCrumbs(array $spec = array()) {
|
upgrade diffusion to use modern header UI and fix a few quirks
Summary:
upgrades are CrumbsView, HeaderView, PropertyListView, and ActionListView. I had to modify CrumbsView stuff a bit to handle the "advanced" diffusion crumbs.
Quirks fixed include making file tree view show up in diffusion, the page not have extra space when the file tree is hidden, links no longer breaking once you visit files (since without the change the files always got "/" appended and thus 404'd), and a differential quirk where it read "next step:" and that colon is a no no,
Test Plan: played around in diffusion and differential
Reviewers: epriestley
Reviewed By: epriestley
CC: aran, Korvin, chad
Maniphest Tasks: T2048, T2178
Differential Revision: https://secure.phabricator.com/D4169
2012-12-13 02:50:42 +01:00
|
|
|
$crumbs = $this->buildApplicationCrumbs();
|
2011-03-31 07:08:41 +02:00
|
|
|
$crumb_list = $this->buildCrumbList($spec);
|
upgrade diffusion to use modern header UI and fix a few quirks
Summary:
upgrades are CrumbsView, HeaderView, PropertyListView, and ActionListView. I had to modify CrumbsView stuff a bit to handle the "advanced" diffusion crumbs.
Quirks fixed include making file tree view show up in diffusion, the page not have extra space when the file tree is hidden, links no longer breaking once you visit files (since without the change the files always got "/" appended and thus 404'd), and a differential quirk where it read "next step:" and that colon is a no no,
Test Plan: played around in diffusion and differential
Reviewers: epriestley
Reviewed By: epriestley
CC: aran, Korvin, chad
Maniphest Tasks: T2048, T2178
Differential Revision: https://secure.phabricator.com/D4169
2012-12-13 02:50:42 +01:00
|
|
|
foreach ($crumb_list as $crumb) {
|
|
|
|
$crumbs->addCrumb($crumb);
|
|
|
|
}
|
2011-03-31 07:08:41 +02:00
|
|
|
return $crumbs;
|
|
|
|
}
|
|
|
|
|
|
|
|
private function buildCrumbList(array $spec = array()) {
|
2011-03-13 01:17:34 +01:00
|
|
|
|
2012-04-19 18:39:19 +02:00
|
|
|
$spec = $spec + array(
|
|
|
|
'commit' => null,
|
|
|
|
'tags' => null,
|
2012-05-10 09:28:19 +02:00
|
|
|
'branches' => null,
|
2012-04-19 18:39:19 +02:00
|
|
|
'view' => null,
|
|
|
|
);
|
|
|
|
|
2011-03-13 01:17:34 +01:00
|
|
|
$crumb_list = array();
|
|
|
|
|
Fix many encoding and architecture problems in Diffusion request and URI handling
Summary:
Diffusion request/uri handling is currently a big, hastily ported mess. In particular, it has:
- Tons and tons of duplicated code.
- Bugs with handling unusual branch and file names.
- An excessively large (and yet insufficiently expressive) API on DiffusionRequest, including a nonsensical concrete base class.
- Other tools were doing hacky things like passing ":" branch names.
This diff attempts to fix these issues.
- Make the base class abstract (it was concrete ONLY for "/diffusion/").
- Move all URI generation to DiffusionRequest. Make the core static. Add unit tests.
- Delete the 300 copies of URI generation code throughout Diffusion.
- Move all URI parsing to DiffusionRequest. Make the core static. Add unit tests.
- Add an appropriate static initializer for other callers.
- Convert all code calling `newFromAphrontRequestDictionary` outside of Diffusion to the new `newFromDictionary` API.
- Refactor static initializers to be sensibly-sized.
- Refactor derived DiffusionRequest classes to remove duplicated code.
- Properly encode branch names (fixes branches with "/", see <https://github.com/facebook/phabricator/issues/100>).
- Properly encode path names (fixes issues in D1742).
- Properly escape delimiter characters ";" and "$" in path names so files like "$100" are not interpreted as "line 100".
- Fix a couple warnings.
- Fix a couple lint issues.
- Fix a bug where we would not parse filenames with spaces in them correctly in the Git browse query.
- Fix a bug where Git change queries would fail unnecessarily.
- Provide or improve some documentation.
This thing is pretty gigantic but also kind of hard to split up. If it's unreasonably difficult to review, let me know and I can take a stab at it though.
This supplants D1742.
Test Plan:
- Used home, repository, branch, browse, change, history, diff (ajax), lastmodified (ajax) views of Diffusion.
- Used Owners typeaheads and search.
- Used diffusion.getrecentcommitsbypath method.
- Pushed a change to an absurdly-named file on an absurdly-named branch, everything worked properly.
{F9185}
Reviewers: nh, vrana, btrahan
Reviewed By: btrahan
CC: aran, epriestley
Differential Revision: https://secure.phabricator.com/D1921
2012-03-20 03:52:14 +01:00
|
|
|
// On the home page, we don't have a DiffusionRequest.
|
|
|
|
if ($this->diffusionRequest) {
|
|
|
|
$drequest = $this->getDiffusionRequest();
|
|
|
|
$repository = $drequest->getRepository();
|
|
|
|
} else {
|
|
|
|
$drequest = null;
|
|
|
|
$repository = null;
|
|
|
|
}
|
|
|
|
|
upgrade diffusion to use modern header UI and fix a few quirks
Summary:
upgrades are CrumbsView, HeaderView, PropertyListView, and ActionListView. I had to modify CrumbsView stuff a bit to handle the "advanced" diffusion crumbs.
Quirks fixed include making file tree view show up in diffusion, the page not have extra space when the file tree is hidden, links no longer breaking once you visit files (since without the change the files always got "/" appended and thus 404'd), and a differential quirk where it read "next step:" and that colon is a no no,
Test Plan: played around in diffusion and differential
Reviewers: epriestley
Reviewed By: epriestley
CC: aran, Korvin, chad
Maniphest Tasks: T2048, T2178
Differential Revision: https://secure.phabricator.com/D4169
2012-12-13 02:50:42 +01:00
|
|
|
if (!$repository) {
|
2011-03-31 07:08:41 +02:00
|
|
|
return $crumb_list;
|
2011-03-13 01:17:34 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
$callsign = $repository->getCallsign();
|
2014-02-04 01:00:27 +01:00
|
|
|
$repository_name = $repository->getName();
|
2011-03-13 01:17:34 +01:00
|
|
|
|
2012-05-10 09:28:19 +02:00
|
|
|
if (!$spec['commit'] && !$spec['tags'] && !$spec['branches']) {
|
2012-01-19 20:49:51 +01:00
|
|
|
$branch_name = $drequest->getBranch();
|
|
|
|
if ($branch_name) {
|
2012-12-13 03:40:18 +01:00
|
|
|
$repository_name .= ' ('.$branch_name.')';
|
2012-01-19 20:49:51 +01:00
|
|
|
}
|
2011-03-13 01:17:34 +01:00
|
|
|
}
|
|
|
|
|
2015-01-23 20:35:09 +01:00
|
|
|
$crumb = id(new PHUICrumbView())
|
upgrade diffusion to use modern header UI and fix a few quirks
Summary:
upgrades are CrumbsView, HeaderView, PropertyListView, and ActionListView. I had to modify CrumbsView stuff a bit to handle the "advanced" diffusion crumbs.
Quirks fixed include making file tree view show up in diffusion, the page not have extra space when the file tree is hidden, links no longer breaking once you visit files (since without the change the files always got "/" appended and thus 404'd), and a differential quirk where it read "next step:" and that colon is a no no,
Test Plan: played around in diffusion and differential
Reviewers: epriestley
Reviewed By: epriestley
CC: aran, Korvin, chad
Maniphest Tasks: T2048, T2178
Differential Revision: https://secure.phabricator.com/D4169
2012-12-13 02:50:42 +01:00
|
|
|
->setName($repository_name);
|
|
|
|
if (!$spec['view'] && !$spec['commit'] &&
|
|
|
|
!$spec['tags'] && !$spec['branches']) {
|
|
|
|
$crumb_list[] = $crumb;
|
|
|
|
return $crumb_list;
|
2011-03-13 01:17:34 +01:00
|
|
|
}
|
2013-09-23 21:54:12 +02:00
|
|
|
$crumb->setHref(
|
|
|
|
$drequest->generateURI(
|
|
|
|
array(
|
|
|
|
'action' => 'branch',
|
|
|
|
'path' => '/',
|
|
|
|
)));
|
upgrade diffusion to use modern header UI and fix a few quirks
Summary:
upgrades are CrumbsView, HeaderView, PropertyListView, and ActionListView. I had to modify CrumbsView stuff a bit to handle the "advanced" diffusion crumbs.
Quirks fixed include making file tree view show up in diffusion, the page not have extra space when the file tree is hidden, links no longer breaking once you visit files (since without the change the files always got "/" appended and thus 404'd), and a differential quirk where it read "next step:" and that colon is a no no,
Test Plan: played around in diffusion and differential
Reviewers: epriestley
Reviewed By: epriestley
CC: aran, Korvin, chad
Maniphest Tasks: T2048, T2178
Differential Revision: https://secure.phabricator.com/D4169
2012-12-13 02:50:42 +01:00
|
|
|
$crumb_list[] = $crumb;
|
2011-03-13 01:17:34 +01:00
|
|
|
|
2014-05-13 22:52:48 +02:00
|
|
|
$stable_commit = $drequest->getStableCommit();
|
2012-04-24 03:36:25 +02:00
|
|
|
|
|
|
|
if ($spec['tags']) {
|
2015-01-23 20:35:09 +01:00
|
|
|
$crumb = new PHUICrumbView();
|
2012-04-24 03:36:25 +02:00
|
|
|
if ($spec['commit']) {
|
upgrade diffusion to use modern header UI and fix a few quirks
Summary:
upgrades are CrumbsView, HeaderView, PropertyListView, and ActionListView. I had to modify CrumbsView stuff a bit to handle the "advanced" diffusion crumbs.
Quirks fixed include making file tree view show up in diffusion, the page not have extra space when the file tree is hidden, links no longer breaking once you visit files (since without the change the files always got "/" appended and thus 404'd), and a differential quirk where it read "next step:" and that colon is a no no,
Test Plan: played around in diffusion and differential
Reviewers: epriestley
Reviewed By: epriestley
CC: aran, Korvin, chad
Maniphest Tasks: T2048, T2178
Differential Revision: https://secure.phabricator.com/D4169
2012-12-13 02:50:42 +01:00
|
|
|
$crumb->setName(
|
2014-06-09 20:36:49 +02:00
|
|
|
pht('Tags for %s', 'r'.$callsign.$stable_commit));
|
upgrade diffusion to use modern header UI and fix a few quirks
Summary:
upgrades are CrumbsView, HeaderView, PropertyListView, and ActionListView. I had to modify CrumbsView stuff a bit to handle the "advanced" diffusion crumbs.
Quirks fixed include making file tree view show up in diffusion, the page not have extra space when the file tree is hidden, links no longer breaking once you visit files (since without the change the files always got "/" appended and thus 404'd), and a differential quirk where it read "next step:" and that colon is a no no,
Test Plan: played around in diffusion and differential
Reviewers: epriestley
Reviewed By: epriestley
CC: aran, Korvin, chad
Maniphest Tasks: T2048, T2178
Differential Revision: https://secure.phabricator.com/D4169
2012-12-13 02:50:42 +01:00
|
|
|
$crumb->setHref($drequest->generateURI(
|
2012-04-24 03:36:25 +02:00
|
|
|
array(
|
upgrade diffusion to use modern header UI and fix a few quirks
Summary:
upgrades are CrumbsView, HeaderView, PropertyListView, and ActionListView. I had to modify CrumbsView stuff a bit to handle the "advanced" diffusion crumbs.
Quirks fixed include making file tree view show up in diffusion, the page not have extra space when the file tree is hidden, links no longer breaking once you visit files (since without the change the files always got "/" appended and thus 404'd), and a differential quirk where it read "next step:" and that colon is a no no,
Test Plan: played around in diffusion and differential
Reviewers: epriestley
Reviewed By: epriestley
CC: aran, Korvin, chad
Maniphest Tasks: T2048, T2178
Differential Revision: https://secure.phabricator.com/D4169
2012-12-13 02:50:42 +01:00
|
|
|
'action' => 'commit',
|
2014-05-13 22:52:48 +02:00
|
|
|
'commit' => $drequest->getStableCommit(),
|
2013-02-19 22:33:10 +01:00
|
|
|
)));
|
2012-04-24 03:36:25 +02:00
|
|
|
} else {
|
2013-05-11 17:23:19 +02:00
|
|
|
$crumb->setName(pht('Tags'));
|
2012-04-24 03:36:25 +02:00
|
|
|
}
|
upgrade diffusion to use modern header UI and fix a few quirks
Summary:
upgrades are CrumbsView, HeaderView, PropertyListView, and ActionListView. I had to modify CrumbsView stuff a bit to handle the "advanced" diffusion crumbs.
Quirks fixed include making file tree view show up in diffusion, the page not have extra space when the file tree is hidden, links no longer breaking once you visit files (since without the change the files always got "/" appended and thus 404'd), and a differential quirk where it read "next step:" and that colon is a no no,
Test Plan: played around in diffusion and differential
Reviewers: epriestley
Reviewed By: epriestley
CC: aran, Korvin, chad
Maniphest Tasks: T2048, T2178
Differential Revision: https://secure.phabricator.com/D4169
2012-12-13 02:50:42 +01:00
|
|
|
$crumb_list[] = $crumb;
|
2011-03-31 07:08:41 +02:00
|
|
|
return $crumb_list;
|
2011-03-13 01:17:34 +01:00
|
|
|
}
|
|
|
|
|
2012-05-10 09:28:19 +02:00
|
|
|
if ($spec['branches']) {
|
2015-01-23 20:35:09 +01:00
|
|
|
$crumb = id(new PHUICrumbView())
|
2013-05-11 17:23:19 +02:00
|
|
|
->setName(pht('Branches'));
|
upgrade diffusion to use modern header UI and fix a few quirks
Summary:
upgrades are CrumbsView, HeaderView, PropertyListView, and ActionListView. I had to modify CrumbsView stuff a bit to handle the "advanced" diffusion crumbs.
Quirks fixed include making file tree view show up in diffusion, the page not have extra space when the file tree is hidden, links no longer breaking once you visit files (since without the change the files always got "/" appended and thus 404'd), and a differential quirk where it read "next step:" and that colon is a no no,
Test Plan: played around in diffusion and differential
Reviewers: epriestley
Reviewed By: epriestley
CC: aran, Korvin, chad
Maniphest Tasks: T2048, T2178
Differential Revision: https://secure.phabricator.com/D4169
2012-12-13 02:50:42 +01:00
|
|
|
$crumb_list[] = $crumb;
|
2012-05-10 09:28:19 +02:00
|
|
|
return $crumb_list;
|
|
|
|
}
|
|
|
|
|
2012-04-24 03:36:25 +02:00
|
|
|
if ($spec['commit']) {
|
2015-01-23 20:35:09 +01:00
|
|
|
$crumb = id(new PHUICrumbView())
|
2014-05-13 22:52:48 +02:00
|
|
|
->setName("r{$callsign}{$stable_commit}")
|
|
|
|
->setHref("r{$callsign}{$stable_commit}");
|
upgrade diffusion to use modern header UI and fix a few quirks
Summary:
upgrades are CrumbsView, HeaderView, PropertyListView, and ActionListView. I had to modify CrumbsView stuff a bit to handle the "advanced" diffusion crumbs.
Quirks fixed include making file tree view show up in diffusion, the page not have extra space when the file tree is hidden, links no longer breaking once you visit files (since without the change the files always got "/" appended and thus 404'd), and a differential quirk where it read "next step:" and that colon is a no no,
Test Plan: played around in diffusion and differential
Reviewers: epriestley
Reviewed By: epriestley
CC: aran, Korvin, chad
Maniphest Tasks: T2048, T2178
Differential Revision: https://secure.phabricator.com/D4169
2012-12-13 02:50:42 +01:00
|
|
|
$crumb_list[] = $crumb;
|
2012-04-19 18:39:19 +02:00
|
|
|
return $crumb_list;
|
|
|
|
}
|
|
|
|
|
2015-01-23 20:35:09 +01:00
|
|
|
$crumb = new PHUICrumbView();
|
2011-03-13 01:17:34 +01:00
|
|
|
$view = $spec['view'];
|
|
|
|
|
|
|
|
switch ($view) {
|
|
|
|
case 'history':
|
2013-05-11 17:23:19 +02:00
|
|
|
$view_name = pht('History');
|
2011-03-13 01:17:34 +01:00
|
|
|
break;
|
|
|
|
case 'browse':
|
2013-05-11 17:23:19 +02:00
|
|
|
$view_name = pht('Browse');
|
2011-03-13 01:17:34 +01:00
|
|
|
break;
|
2012-11-08 20:11:44 +01:00
|
|
|
case 'lint':
|
2013-05-11 17:23:19 +02:00
|
|
|
$view_name = pht('Lint');
|
2012-11-08 20:11:44 +01:00
|
|
|
break;
|
2011-03-14 06:03:30 +01:00
|
|
|
case 'change':
|
2013-05-11 17:23:19 +02:00
|
|
|
$view_name = pht('Change');
|
2013-09-23 21:54:12 +02:00
|
|
|
break;
|
2011-03-13 01:17:34 +01:00
|
|
|
}
|
|
|
|
|
2015-01-23 20:35:09 +01:00
|
|
|
$crumb = id(new PHUICrumbView())
|
upgrade diffusion to use modern header UI and fix a few quirks
Summary:
upgrades are CrumbsView, HeaderView, PropertyListView, and ActionListView. I had to modify CrumbsView stuff a bit to handle the "advanced" diffusion crumbs.
Quirks fixed include making file tree view show up in diffusion, the page not have extra space when the file tree is hidden, links no longer breaking once you visit files (since without the change the files always got "/" appended and thus 404'd), and a differential quirk where it read "next step:" and that colon is a no no,
Test Plan: played around in diffusion and differential
Reviewers: epriestley
Reviewed By: epriestley
CC: aran, Korvin, chad
Maniphest Tasks: T2048, T2178
Differential Revision: https://secure.phabricator.com/D4169
2012-12-13 02:50:42 +01:00
|
|
|
->setName($view_name);
|
2011-03-13 01:17:34 +01:00
|
|
|
|
2013-09-19 20:57:33 +02:00
|
|
|
$crumb_list[] = $crumb;
|
2011-03-31 07:08:41 +02:00
|
|
|
return $crumb_list;
|
2011-03-13 01:17:34 +01:00
|
|
|
}
|
|
|
|
|
2013-05-01 23:44:28 +02:00
|
|
|
protected function callConduitWithDiffusionRequest(
|
|
|
|
$method,
|
|
|
|
array $params = array()) {
|
|
|
|
|
|
|
|
$user = $this->getRequest()->getUser();
|
|
|
|
$drequest = $this->getDiffusionRequest();
|
|
|
|
|
|
|
|
return DiffusionQuery::callConduitWithDiffusionRequest(
|
|
|
|
$user,
|
|
|
|
$drequest,
|
|
|
|
$method,
|
|
|
|
$params);
|
|
|
|
}
|
2013-05-24 21:37:42 +02:00
|
|
|
|
|
|
|
protected function getRepositoryControllerURI(
|
|
|
|
PhabricatorRepository $repository,
|
|
|
|
$path) {
|
|
|
|
return $this->getApplicationURI($repository->getCallsign().'/'.$path);
|
|
|
|
}
|
|
|
|
|
2013-09-23 21:55:23 +02:00
|
|
|
protected function renderPathLinks(DiffusionRequest $drequest, $action) {
|
2013-09-20 01:01:04 +02:00
|
|
|
$path = $drequest->getPath();
|
|
|
|
$path_parts = array_filter(explode('/', trim($path, '/')));
|
|
|
|
|
2013-10-14 18:40:05 +02:00
|
|
|
$divider = phutil_tag(
|
|
|
|
'span',
|
|
|
|
array(
|
2014-10-07 15:01:04 +02:00
|
|
|
'class' => 'phui-header-divider',
|
|
|
|
),
|
2013-10-14 18:40:05 +02:00
|
|
|
'/');
|
|
|
|
|
2013-09-20 01:01:04 +02:00
|
|
|
$links = array();
|
|
|
|
if ($path_parts) {
|
|
|
|
$links[] = phutil_tag(
|
|
|
|
'a',
|
|
|
|
array(
|
|
|
|
'href' => $drequest->generateURI(
|
|
|
|
array(
|
2013-09-23 21:55:23 +02:00
|
|
|
'action' => $action,
|
2013-09-20 01:01:04 +02:00
|
|
|
'path' => '',
|
|
|
|
)),
|
|
|
|
),
|
2013-10-14 18:40:05 +02:00
|
|
|
'r'.$drequest->getRepository()->getCallsign());
|
|
|
|
$links[] = $divider;
|
2013-09-20 01:01:04 +02:00
|
|
|
$accum = '';
|
|
|
|
$last_key = last_key($path_parts);
|
|
|
|
foreach ($path_parts as $key => $part) {
|
|
|
|
$accum .= '/'.$part;
|
|
|
|
if ($key === $last_key) {
|
|
|
|
$links[] = $part;
|
|
|
|
} else {
|
|
|
|
$links[] = phutil_tag(
|
|
|
|
'a',
|
|
|
|
array(
|
|
|
|
'href' => $drequest->generateURI(
|
|
|
|
array(
|
2013-09-23 21:55:23 +02:00
|
|
|
'action' => $action,
|
2013-10-04 00:51:47 +02:00
|
|
|
'path' => $accum.'/',
|
2013-09-20 01:01:04 +02:00
|
|
|
)),
|
|
|
|
),
|
2013-10-14 18:40:05 +02:00
|
|
|
$part);
|
|
|
|
$links[] = $divider;
|
2013-09-20 01:01:04 +02:00
|
|
|
}
|
|
|
|
}
|
|
|
|
} else {
|
2016-01-02 20:28:31 +01:00
|
|
|
$links[] = $drequest->getRepository()->getDisplayName();
|
2013-10-14 18:40:05 +02:00
|
|
|
$links[] = $divider;
|
2013-09-20 01:01:04 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
return $links;
|
|
|
|
}
|
|
|
|
|
Add an "importing" state to repositories and clean up the UI
Summary:
Fixes T3217. Ref T776. Ref T1493. Broadly, this introduces a mechanism which works like this:
- When a repository is created, we set an "importing" flag.
- After discovery completes, we check if a repository has no importing commits. Basically, this is the first time we catch up to HEAD.
- If we're caught up, clear the "importing" flag.
This flag lets us fix some issues:
- T3217. Currently, when you import a new repository and users have rules like "Email me on every commit ever" or "trigger an audit on every commit", we take a bunch of publish actions. Instead, implicitly disable publishing during import.
- An imported but un-pulled repository currently has an incomprehensible error on `/diffusion/X/`. Fix that.
- Show more cues in the UI about importing.
- Made some exceptions more specific.
Test Plan:
This is the new screen for a completely new repo, replacing a giant exception:
{F75443}
- Created a repository, saw it "importing".
- Pulled and discovered it.
- Processed its commits.
- Ran discovery again, saw import flag clear.
- Also this repository was empty, which hit some of the other code.
This is the new "parsed empty repository" UI, which isn't good, but is less broken:
{F75446}
Reviewers: btrahan
Reviewed By: btrahan
CC: aran, hach-que
Maniphest Tasks: T3607, T1493, T776, T3217
Differential Revision: https://secure.phabricator.com/D7429
2013-10-27 03:59:57 +01:00
|
|
|
protected function renderStatusMessage($title, $body) {
|
2015-03-01 23:45:56 +01:00
|
|
|
return id(new PHUIInfoView())
|
|
|
|
->setSeverity(PHUIInfoView::SEVERITY_WARNING)
|
Add an "importing" state to repositories and clean up the UI
Summary:
Fixes T3217. Ref T776. Ref T1493. Broadly, this introduces a mechanism which works like this:
- When a repository is created, we set an "importing" flag.
- After discovery completes, we check if a repository has no importing commits. Basically, this is the first time we catch up to HEAD.
- If we're caught up, clear the "importing" flag.
This flag lets us fix some issues:
- T3217. Currently, when you import a new repository and users have rules like "Email me on every commit ever" or "trigger an audit on every commit", we take a bunch of publish actions. Instead, implicitly disable publishing during import.
- An imported but un-pulled repository currently has an incomprehensible error on `/diffusion/X/`. Fix that.
- Show more cues in the UI about importing.
- Made some exceptions more specific.
Test Plan:
This is the new screen for a completely new repo, replacing a giant exception:
{F75443}
- Created a repository, saw it "importing".
- Pulled and discovered it.
- Processed its commits.
- Ran discovery again, saw import flag clear.
- Also this repository was empty, which hit some of the other code.
This is the new "parsed empty repository" UI, which isn't good, but is less broken:
{F75446}
Reviewers: btrahan
Reviewed By: btrahan
CC: aran, hach-que
Maniphest Tasks: T3607, T1493, T776, T3217
Differential Revision: https://secure.phabricator.com/D7429
2013-10-27 03:59:57 +01:00
|
|
|
->setTitle($title)
|
|
|
|
->appendChild($body);
|
|
|
|
}
|
2013-11-01 16:44:37 +01:00
|
|
|
|
2011-03-08 00:13:36 +01:00
|
|
|
}
|