2011-03-13 01:17:34 +01:00
|
|
|
<?php
|
|
|
|
|
2012-03-10 00:46:25 +01:00
|
|
|
final class DiffusionRepositoryController extends DiffusionController {
|
2011-03-13 01:17:34 +01:00
|
|
|
|
2013-09-23 21:53:41 +02:00
|
|
|
public function shouldAllowPublic() {
|
|
|
|
return true;
|
|
|
|
}
|
|
|
|
|
2011-03-13 01:17:34 +01:00
|
|
|
public function processRequest() {
|
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
|
|
|
$drequest = $this->getDiffusionRequest();
|
|
|
|
$repository = $drequest->getRepository();
|
2011-03-13 01:17:34 +01:00
|
|
|
|
|
|
|
$content = array();
|
|
|
|
|
|
|
|
$crumbs = $this->buildCrumbs();
|
|
|
|
$content[] = $crumbs;
|
|
|
|
|
2012-03-08 21:46:19 +01:00
|
|
|
$content[] = $this->buildPropertiesTable($drequest->getRepository());
|
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
|
|
|
$phids = array();
|
2012-03-08 21:46:19 +01:00
|
|
|
|
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
|
|
|
try {
|
|
|
|
$history_results = $this->callConduitWithDiffusionRequest(
|
|
|
|
'diffusion.historyquery',
|
Diffusion - move DiffusionBrowseQuery => Conduit
Summary: see title. Ref T2784.
Test Plan:
In diffusion, for each of SVN, Mercurial, and Git, I loaded up /diffusion/CALLSIGN/. I verified the README was displayed and things looked good. Next I clicked on "browse" on the top-most commit and verified things looked correct. Also clicked through to a file for a good measure and things looked good.
In owners, for each of SVN, Mercurial, and Git, I played around with the path typeahead / validator. It worked correctly!
Reviewers: epriestley
Reviewed By: epriestley
CC: chad, aran, Korvin
Maniphest Tasks: T2784
Differential Revision: https://secure.phabricator.com/D5883
2013-05-10 20:02:58 +02:00
|
|
|
array(
|
|
|
|
'commit' => $drequest->getCommit(),
|
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
|
|
|
'path' => $drequest->getPath(),
|
|
|
|
'offset' => 0,
|
|
|
|
'limit' => 15));
|
|
|
|
$history = DiffusionPathChange::newFromConduit(
|
|
|
|
$history_results['pathChanges']);
|
|
|
|
|
|
|
|
foreach ($history as $item) {
|
|
|
|
$data = $item->getCommitData();
|
|
|
|
if ($data) {
|
|
|
|
if ($data->getCommitDetail('authorPHID')) {
|
|
|
|
$phids[$data->getCommitDetail('authorPHID')] = true;
|
|
|
|
}
|
|
|
|
if ($data->getCommitDetail('committerPHID')) {
|
|
|
|
$phids[$data->getCommitDetail('committerPHID')] = true;
|
|
|
|
}
|
2012-05-23 17:34:36 +02:00
|
|
|
}
|
2011-04-03 01:39:23 +02:00
|
|
|
}
|
2013-10-27 05:08:24 +01:00
|
|
|
$history_exception = null;
|
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
|
|
|
} catch (Exception $ex) {
|
|
|
|
$history_results = null;
|
|
|
|
$history = null;
|
|
|
|
$history_exception = $ex;
|
2011-04-03 01:39:23 +02:00
|
|
|
}
|
|
|
|
|
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
|
|
|
try {
|
|
|
|
$browse_results = DiffusionBrowseResultSet::newFromConduit(
|
|
|
|
$this->callConduitWithDiffusionRequest(
|
|
|
|
'diffusion.browsequery',
|
|
|
|
array(
|
|
|
|
'path' => $drequest->getPath(),
|
|
|
|
'commit' => $drequest->getCommit(),
|
|
|
|
)));
|
|
|
|
$browse_paths = $browse_results->getPaths();
|
|
|
|
|
|
|
|
foreach ($browse_paths as $item) {
|
|
|
|
$data = $item->getLastCommitData();
|
|
|
|
if ($data) {
|
|
|
|
if ($data->getCommitDetail('authorPHID')) {
|
|
|
|
$phids[$data->getCommitDetail('authorPHID')] = true;
|
|
|
|
}
|
|
|
|
if ($data->getCommitDetail('committerPHID')) {
|
|
|
|
$phids[$data->getCommitDetail('committerPHID')] = true;
|
|
|
|
}
|
2012-05-23 17:34:36 +02:00
|
|
|
}
|
2011-04-03 01:39:23 +02:00
|
|
|
}
|
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
|
|
|
|
2013-10-27 05:08:24 +01:00
|
|
|
$browse_exception = null;
|
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
|
|
|
} catch (Exception $ex) {
|
|
|
|
$browse_results = null;
|
|
|
|
$browse_paths = null;
|
|
|
|
$browse_exception = $ex;
|
2011-04-03 01:39:23 +02:00
|
|
|
}
|
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
|
|
|
|
2011-04-03 01:39:23 +02:00
|
|
|
$phids = array_keys($phids);
|
2012-09-05 04:02:56 +02:00
|
|
|
$handles = $this->loadViewerHandles($phids);
|
2011-04-03 01:39:23 +02:00
|
|
|
|
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
|
|
|
if ($browse_results) {
|
|
|
|
$readme = $this->callConduitWithDiffusionRequest(
|
|
|
|
'diffusion.readmequery',
|
|
|
|
array(
|
|
|
|
'paths' => $browse_results->getPathDicts()
|
2013-05-21 22:47:06 +02:00
|
|
|
));
|
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
|
|
|
} else {
|
|
|
|
$readme = null;
|
|
|
|
}
|
2013-05-21 22:47:06 +02:00
|
|
|
|
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
|
|
|
$content[] = $this->buildHistoryTable(
|
|
|
|
$history_results,
|
|
|
|
$history,
|
|
|
|
$history_exception,
|
|
|
|
$handles);
|
2011-03-13 01:17:34 +01:00
|
|
|
|
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
|
|
|
$content[] = $this->buildBrowseTable(
|
|
|
|
$browse_results,
|
|
|
|
$browse_paths,
|
|
|
|
$browse_exception,
|
|
|
|
$handles);
|
2011-03-13 01:17:34 +01:00
|
|
|
|
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
|
|
|
try {
|
|
|
|
$content[] = $this->buildTagListTable($drequest);
|
|
|
|
} catch (Exception $ex) {
|
|
|
|
if (!$repository->isImporting()) {
|
|
|
|
$content[] = $this->renderStatusMessage(
|
|
|
|
pht('Unable to Load Tags'),
|
|
|
|
$ex->getMessage());
|
|
|
|
}
|
|
|
|
}
|
2012-04-18 17:02:08 +02:00
|
|
|
|
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
|
|
|
try {
|
|
|
|
$content[] = $this->buildBranchListTable($drequest);
|
|
|
|
} catch (Exception $ex) {
|
|
|
|
if (!$repository->isImporting()) {
|
|
|
|
$content[] = $this->renderStatusMessage(
|
|
|
|
pht('Unable to Load Branches'),
|
|
|
|
$ex->getMessage());
|
|
|
|
}
|
|
|
|
}
|
2011-03-13 01:17:34 +01:00
|
|
|
|
2012-04-30 16:47:41 +02:00
|
|
|
if ($readme) {
|
2013-05-11 17:23:19 +02:00
|
|
|
$box = new PHUIBoxView();
|
|
|
|
$box->appendChild($readme);
|
|
|
|
$box->addPadding(PHUI::PADDING_LARGE);
|
|
|
|
|
2014-01-07 20:57:37 +01:00
|
|
|
$panel = new PHUIObjectBoxView();
|
|
|
|
$panel->setHeaderText(pht('README'));
|
2013-05-11 17:23:19 +02:00
|
|
|
$panel->appendChild($box);
|
2012-04-30 16:47:41 +02:00
|
|
|
$content[] = $panel;
|
|
|
|
}
|
|
|
|
|
2013-05-11 17:23:19 +02:00
|
|
|
return $this->buildApplicationPage(
|
2011-03-13 01:17:34 +01:00
|
|
|
$content,
|
|
|
|
array(
|
2012-01-20 22:27:32 +01:00
|
|
|
'title' => $drequest->getRepository()->getName(),
|
2013-05-11 17:23:19 +02:00
|
|
|
'device' => true,
|
2011-03-13 01:17:34 +01:00
|
|
|
));
|
|
|
|
}
|
|
|
|
|
2012-03-08 21:46:19 +01:00
|
|
|
private function buildPropertiesTable(PhabricatorRepository $repository) {
|
2013-05-24 21:38:44 +02:00
|
|
|
$user = $this->getRequest()->getUser();
|
2012-03-08 21:46:19 +01:00
|
|
|
|
2013-09-17 18:12:37 +02:00
|
|
|
$header = id(new PHUIHeaderView())
|
2013-09-19 20:57:09 +02:00
|
|
|
->setHeader($repository->getName())
|
|
|
|
->setUser($user)
|
|
|
|
->setPolicyObject($repository);
|
|
|
|
|
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
|
|
|
if (!$repository->isTracked()) {
|
|
|
|
$header->setStatus('policy-noone', '', pht('Inactive'));
|
|
|
|
} else if ($repository->isImporting()) {
|
|
|
|
$header->setStatus('time', 'red', pht('Importing...'));
|
|
|
|
} else {
|
|
|
|
$header->setStatus('oh-ok', '', pht('Active'));
|
|
|
|
}
|
|
|
|
|
|
|
|
|
2013-09-19 20:57:09 +02:00
|
|
|
$actions = $this->buildActionList($repository);
|
2013-05-24 19:48:10 +02:00
|
|
|
|
2013-10-11 16:53:56 +02:00
|
|
|
$view = id(new PHUIPropertyListView())
|
2013-05-24 21:38:44 +02:00
|
|
|
->setUser($user);
|
2013-05-24 19:48:10 +02:00
|
|
|
$view->addProperty(pht('Callsign'), $repository->getCallsign());
|
|
|
|
|
2014-01-03 21:24:09 +01:00
|
|
|
$project_phids = PhabricatorEdgeQuery::loadDestinationPHIDs(
|
|
|
|
$repository->getPHID(),
|
|
|
|
PhabricatorEdgeConfig::TYPE_OBJECT_HAS_PROJECT);
|
|
|
|
if ($project_phids) {
|
|
|
|
$this->loadHandles($project_phids);
|
|
|
|
$view->addProperty(
|
|
|
|
pht('Projects'),
|
|
|
|
$this->renderHandlesForPHIDs($project_phids));
|
|
|
|
}
|
|
|
|
|
2013-11-02 01:35:43 +01:00
|
|
|
if ($repository->isHosted()) {
|
|
|
|
$serve_off = PhabricatorRepository::SERVE_OFF;
|
|
|
|
$callsign = $repository->getCallsign();
|
|
|
|
$repo_path = '/diffusion/'.$callsign.'/';
|
|
|
|
|
|
|
|
$serve_ssh = $repository->getServeOverSSH();
|
|
|
|
if ($serve_ssh !== $serve_off) {
|
|
|
|
$uri = new PhutilURI(PhabricatorEnv::getProductionURI($repo_path));
|
2013-12-03 00:45:55 +01:00
|
|
|
|
|
|
|
if ($repository->isSVN()) {
|
|
|
|
$uri->setProtocol('svn+ssh');
|
|
|
|
} else {
|
|
|
|
$uri->setProtocol('ssh');
|
|
|
|
}
|
2013-11-02 01:35:43 +01:00
|
|
|
|
|
|
|
$ssh_user = PhabricatorEnv::getEnvConfig('diffusion.ssh-user');
|
|
|
|
if ($ssh_user) {
|
|
|
|
$uri->setUser($ssh_user);
|
|
|
|
}
|
|
|
|
|
2013-12-11 21:11:13 +01:00
|
|
|
$uri->setPort(PhabricatorEnv::getEnvConfig('diffusion.ssh-port'));
|
2013-11-02 01:35:43 +01:00
|
|
|
|
|
|
|
$clone_uri = $this->renderCloneURI(
|
|
|
|
$uri,
|
|
|
|
$serve_ssh,
|
|
|
|
'/settings/panel/ssh/');
|
|
|
|
|
|
|
|
$view->addProperty(pht('Clone URI (SSH)'), $clone_uri);
|
|
|
|
}
|
|
|
|
|
|
|
|
$serve_http = $repository->getServeOverHTTP();
|
|
|
|
if ($serve_http !== $serve_off) {
|
|
|
|
$http_uri = PhabricatorEnv::getProductionURI($repo_path);
|
|
|
|
|
|
|
|
$clone_uri = $this->renderCloneURI(
|
|
|
|
$http_uri,
|
|
|
|
$serve_http,
|
|
|
|
PhabricatorEnv::getEnvConfig('diffusion.allow-http-auth')
|
|
|
|
? '/settings/panel/vcspassword/'
|
|
|
|
: null);
|
|
|
|
|
|
|
|
$view->addProperty(pht('Clone URI (HTTP)'), $clone_uri);
|
|
|
|
}
|
|
|
|
} else {
|
|
|
|
switch ($repository->getVersionControlSystem()) {
|
|
|
|
case PhabricatorRepositoryType::REPOSITORY_TYPE_GIT:
|
|
|
|
case PhabricatorRepositoryType::REPOSITORY_TYPE_MERCURIAL:
|
|
|
|
$view->addProperty(
|
|
|
|
pht('Clone URI'),
|
|
|
|
$this->renderCloneURI(
|
|
|
|
$repository->getPublicRemoteURI()));
|
|
|
|
break;
|
|
|
|
case PhabricatorRepositoryType::REPOSITORY_TYPE_SVN:
|
|
|
|
$view->addProperty(
|
|
|
|
pht('Repository Root'),
|
|
|
|
$this->renderCloneURI(
|
|
|
|
$repository->getPublicRemoteURI()));
|
|
|
|
break;
|
|
|
|
}
|
2012-03-08 21:46:19 +01:00
|
|
|
}
|
|
|
|
|
2013-05-24 19:48:10 +02:00
|
|
|
$description = $repository->getDetail('description');
|
|
|
|
if (strlen($description)) {
|
2013-05-24 21:38:44 +02:00
|
|
|
$description = PhabricatorMarkupEngine::renderOneObject(
|
|
|
|
$repository,
|
|
|
|
'description',
|
|
|
|
$user);
|
2013-10-30 16:21:16 +01:00
|
|
|
$view->addSectionHeader(pht('Description'));
|
2013-05-24 19:48:10 +02:00
|
|
|
$view->addTextContent($description);
|
2012-03-08 21:46:19 +01:00
|
|
|
}
|
|
|
|
|
2013-10-11 16:53:56 +02:00
|
|
|
$view->setActionList($actions);
|
|
|
|
|
2013-09-29 00:55:38 +02:00
|
|
|
return id(new PHUIObjectBoxView())
|
|
|
|
->setHeader($header)
|
2013-10-11 16:53:56 +02:00
|
|
|
->addPropertyList($view);
|
2013-09-29 00:55:38 +02:00
|
|
|
|
2012-03-08 21:46:19 +01:00
|
|
|
}
|
|
|
|
|
2012-05-10 09:28:19 +02:00
|
|
|
private function buildBranchListTable(DiffusionRequest $drequest) {
|
2013-10-30 21:06:28 +01:00
|
|
|
$viewer = $this->getRequest()->getUser();
|
2012-05-10 09:28:19 +02:00
|
|
|
|
2013-10-30 21:06:28 +01:00
|
|
|
if ($drequest->getBranch() === null) {
|
|
|
|
return null;
|
|
|
|
}
|
2012-05-10 09:28:19 +02:00
|
|
|
|
2013-10-30 21:06:28 +01:00
|
|
|
$limit = 15;
|
2012-05-10 09:28:19 +02:00
|
|
|
|
2014-01-18 01:10:56 +01:00
|
|
|
$branches = $this->callConduitWithDiffusionRequest(
|
|
|
|
'diffusion.branchquery',
|
|
|
|
array(
|
|
|
|
'limit' => $limit + 1,
|
|
|
|
));
|
2013-10-30 21:06:28 +01:00
|
|
|
if (!$branches) {
|
|
|
|
return null;
|
|
|
|
}
|
2012-05-10 09:28:19 +02:00
|
|
|
|
2013-10-30 21:06:28 +01:00
|
|
|
$more_branches = (count($branches) > $limit);
|
|
|
|
$branches = array_slice($branches, 0, $limit);
|
2012-05-10 09:28:19 +02:00
|
|
|
|
2014-01-18 01:10:56 +01:00
|
|
|
$branches = DiffusionRepositoryRef::loadAllFromDictionaries($branches);
|
|
|
|
|
2013-10-30 21:06:28 +01:00
|
|
|
$commits = id(new DiffusionCommitQuery())
|
|
|
|
->setViewer($viewer)
|
2014-01-18 01:10:56 +01:00
|
|
|
->withIdentifiers(mpull($branches, 'getCommitIdentifier'))
|
2013-11-07 21:10:43 +01:00
|
|
|
->withRepository($drequest->getRepository())
|
2013-10-30 21:06:28 +01:00
|
|
|
->execute();
|
2012-05-10 09:28:19 +02:00
|
|
|
|
2013-10-30 21:06:43 +01:00
|
|
|
$table = id(new DiffusionBranchTableView())
|
|
|
|
->setUser($viewer)
|
|
|
|
->setDiffusionRequest($drequest)
|
|
|
|
->setBranches($branches)
|
|
|
|
->setCommits($commits);
|
2012-05-10 09:28:19 +02:00
|
|
|
|
2014-01-07 20:57:37 +01:00
|
|
|
$panel = new PHUIObjectBoxView();
|
|
|
|
$header = new PHUIHeaderView();
|
|
|
|
$header->setHeader(pht('Branches'));
|
2012-05-10 09:28:19 +02:00
|
|
|
|
2013-10-30 21:06:28 +01:00
|
|
|
if ($more_branches) {
|
2014-01-07 20:57:37 +01:00
|
|
|
$header->setSubHeader(pht('Showing %d branches.', $limit));
|
2012-05-10 09:28:19 +02:00
|
|
|
}
|
|
|
|
|
2014-01-09 17:51:57 +01:00
|
|
|
$icon = id(new PHUIIconView())
|
|
|
|
->setSpriteSheet(PHUIIconView::SPRITE_ICONS)
|
|
|
|
->setSpriteIcon('fork');
|
|
|
|
|
2014-01-07 20:57:37 +01:00
|
|
|
$button = new PHUIButtonView();
|
|
|
|
$button->setText(pht("Show All Branches"));
|
|
|
|
$button->setTag('a');
|
2014-01-09 17:51:57 +01:00
|
|
|
$button->setIcon($icon);
|
2014-01-07 20:57:37 +01:00
|
|
|
$button->setHref($drequest->generateURI(
|
2013-10-30 21:06:28 +01:00
|
|
|
array(
|
|
|
|
'action' => 'branches',
|
2014-01-07 20:57:37 +01:00
|
|
|
)));
|
2013-10-30 21:06:28 +01:00
|
|
|
|
2014-01-07 20:57:37 +01:00
|
|
|
$header->addActionLink($button);
|
|
|
|
$panel->setHeader($header);
|
2013-10-30 21:06:28 +01:00
|
|
|
$panel->appendChild($table);
|
|
|
|
|
|
|
|
return $panel;
|
2012-05-10 09:28:19 +02:00
|
|
|
}
|
|
|
|
|
2012-04-18 17:02:08 +02:00
|
|
|
private function buildTagListTable(DiffusionRequest $drequest) {
|
2013-10-30 21:06:43 +01:00
|
|
|
$viewer = $this->getRequest()->getUser();
|
|
|
|
|
2012-05-10 09:28:19 +02:00
|
|
|
$tag_limit = 15;
|
2013-05-11 00:22:35 +02:00
|
|
|
$tags = array();
|
|
|
|
try {
|
|
|
|
$tags = DiffusionRepositoryTag::newFromConduit(
|
|
|
|
$this->callConduitWithDiffusionRequest(
|
|
|
|
'diffusion.tagsquery',
|
2013-09-19 20:57:33 +02:00
|
|
|
array(
|
|
|
|
// On the home page, we want to find tags on any branch.
|
|
|
|
'commit' => null,
|
|
|
|
'limit' => $tag_limit + 1,
|
|
|
|
)));
|
2013-05-11 00:22:35 +02:00
|
|
|
} catch (ConduitException $e) {
|
|
|
|
if ($e->getMessage() != 'ERR-UNSUPPORTED-VCS') {
|
|
|
|
throw $e;
|
|
|
|
}
|
|
|
|
}
|
2012-04-18 17:02:08 +02:00
|
|
|
|
|
|
|
if (!$tags) {
|
|
|
|
return null;
|
|
|
|
}
|
|
|
|
|
2012-04-19 18:39:19 +02:00
|
|
|
$more_tags = (count($tags) > $tag_limit);
|
|
|
|
$tags = array_slice($tags, 0, $tag_limit);
|
|
|
|
|
2013-10-30 21:06:43 +01:00
|
|
|
$commits = id(new DiffusionCommitQuery())
|
|
|
|
->setViewer($viewer)
|
|
|
|
->withIdentifiers(mpull($tags, 'getCommitIdentifier'))
|
2013-11-07 21:10:43 +01:00
|
|
|
->withRepository($drequest->getRepository())
|
2012-04-18 17:02:08 +02:00
|
|
|
->needCommitData(true)
|
|
|
|
->execute();
|
|
|
|
|
2013-10-30 21:06:43 +01:00
|
|
|
$view = id(new DiffusionTagListView())
|
|
|
|
->setUser($viewer)
|
|
|
|
->setDiffusionRequest($drequest)
|
|
|
|
->setTags($tags)
|
|
|
|
->setCommits($commits);
|
2012-04-18 17:02:08 +02:00
|
|
|
|
|
|
|
$phids = $view->getRequiredHandlePHIDs();
|
2012-09-05 04:02:56 +02:00
|
|
|
$handles = $this->loadViewerHandles($phids);
|
2012-04-18 17:02:08 +02:00
|
|
|
$view->setHandles($handles);
|
|
|
|
|
2014-01-20 22:12:30 +01:00
|
|
|
$panel = new PHUIObjectBoxView();
|
|
|
|
$header = new PHUIHeaderView();
|
|
|
|
$header->setHeader(pht('Tags'));
|
2012-04-19 18:39:19 +02:00
|
|
|
|
|
|
|
if ($more_tags) {
|
2014-01-20 22:12:30 +01:00
|
|
|
$header->setSubHeader(
|
|
|
|
pht('Showing the %d most recent tags.', $tag_limit));
|
2012-04-19 18:39:19 +02:00
|
|
|
}
|
|
|
|
|
2014-01-20 22:12:30 +01:00
|
|
|
$icon = id(new PHUIIconView())
|
|
|
|
->setSpriteSheet(PHUIIconView::SPRITE_ICONS)
|
|
|
|
->setSpriteIcon('tag');
|
|
|
|
|
|
|
|
$button = new PHUIButtonView();
|
|
|
|
$button->setText(pht("Show All Tags"));
|
|
|
|
$button->setTag('a');
|
|
|
|
$button->setIcon($icon);
|
|
|
|
$button->setHref($drequest->generateURI(
|
2012-04-19 18:39:19 +02:00
|
|
|
array(
|
|
|
|
'action' => 'tags',
|
2014-01-20 22:12:30 +01:00
|
|
|
)));
|
|
|
|
|
|
|
|
$header->addActionLink($button);
|
|
|
|
|
|
|
|
$panel->setHeader($header);
|
2012-04-18 17:02:08 +02:00
|
|
|
$panel->appendChild($view);
|
|
|
|
|
|
|
|
return $panel;
|
|
|
|
}
|
|
|
|
|
2013-09-19 20:57:09 +02:00
|
|
|
private function buildActionList(PhabricatorRepository $repository) {
|
|
|
|
$viewer = $this->getRequest()->getUser();
|
|
|
|
|
|
|
|
$view_uri = $this->getApplicationURI($repository->getCallsign().'/');
|
|
|
|
$edit_uri = $this->getApplicationURI($repository->getCallsign().'/edit/');
|
|
|
|
|
|
|
|
$view = id(new PhabricatorActionListView())
|
|
|
|
->setUser($viewer)
|
|
|
|
->setObject($repository)
|
|
|
|
->setObjectURI($view_uri);
|
|
|
|
|
|
|
|
$can_edit = PhabricatorPolicyFilter::hasCapability(
|
|
|
|
$viewer,
|
|
|
|
$repository,
|
|
|
|
PhabricatorPolicyCapability::CAN_EDIT);
|
|
|
|
|
|
|
|
$view->addAction(
|
|
|
|
id(new PhabricatorActionView())
|
|
|
|
->setName(pht('Edit Repository'))
|
|
|
|
->setIcon('edit')
|
|
|
|
->setHref($edit_uri)
|
|
|
|
->setWorkflow(!$can_edit)
|
|
|
|
->setDisabled(!$can_edit));
|
|
|
|
|
2013-12-05 20:59:33 +01:00
|
|
|
if ($repository->isHosted()) {
|
|
|
|
$callsign = $repository->getCallsign();
|
|
|
|
$push_uri = $this->getApplicationURI(
|
|
|
|
'pushlog/?repositories=r'.$callsign);
|
|
|
|
|
|
|
|
$view->addAction(
|
|
|
|
id(new PhabricatorActionView())
|
|
|
|
->setName(pht('View Push Logs'))
|
|
|
|
->setIcon('transcript')
|
|
|
|
->setHref($push_uri));
|
|
|
|
}
|
|
|
|
|
2013-09-19 20:57:09 +02:00
|
|
|
return $view;
|
|
|
|
}
|
|
|
|
|
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
|
|
|
private function buildHistoryTable(
|
|
|
|
$history_results,
|
|
|
|
$history,
|
|
|
|
$history_exception,
|
|
|
|
array $handles) {
|
|
|
|
|
|
|
|
$request = $this->getRequest();
|
|
|
|
$viewer = $request->getUser();
|
|
|
|
$drequest = $this->getDiffusionRequest();
|
|
|
|
$repository = $drequest->getRepository();
|
|
|
|
|
|
|
|
if ($history_exception) {
|
|
|
|
if ($repository->isImporting()) {
|
|
|
|
return $this->renderStatusMessage(
|
|
|
|
pht('Still Importing...'),
|
|
|
|
pht(
|
|
|
|
'This repository is still importing. History is not yet '.
|
|
|
|
'available.'));
|
|
|
|
} else {
|
|
|
|
return $this->renderStatusMessage(
|
|
|
|
pht('Unable to Retrieve History'),
|
|
|
|
$history_exception->getMessage());
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
$history_table = id(new DiffusionHistoryTableView())
|
|
|
|
->setUser($viewer)
|
|
|
|
->setDiffusionRequest($drequest)
|
|
|
|
->setHandles($handles)
|
|
|
|
->setHistory($history);
|
|
|
|
|
|
|
|
// TODO: Super sketchy.
|
|
|
|
$history_table->loadRevisions();
|
|
|
|
|
|
|
|
if ($history_results) {
|
|
|
|
$history_table->setParents($history_results['parents']);
|
|
|
|
}
|
|
|
|
|
|
|
|
$history_table->setIsHead(true);
|
|
|
|
$callsign = $drequest->getRepository()->getCallsign();
|
2014-01-09 17:51:57 +01:00
|
|
|
|
|
|
|
$icon = id(new PHUIIconView())
|
|
|
|
->setSpriteSheet(PHUIIconView::SPRITE_ICONS)
|
|
|
|
->setSpriteIcon('transcript');
|
|
|
|
|
|
|
|
$button = id(new PHUIButtonView())
|
|
|
|
->setText(pht('View Full History'))
|
|
|
|
->setHref($drequest->generateURI(
|
|
|
|
array(
|
|
|
|
'action' => 'history',
|
|
|
|
)))
|
|
|
|
->setTag('a')
|
|
|
|
->setIcon($icon);
|
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
|
|
|
|
2014-01-07 20:57:37 +01:00
|
|
|
$panel = new PHUIObjectBoxView();
|
2014-01-09 17:51:57 +01:00
|
|
|
$header = id(new PHUIHeaderView())
|
|
|
|
->setHeader(pht('Recent Commits'))
|
|
|
|
->addActionLink($button);
|
|
|
|
$panel->setHeader($header);
|
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
|
|
|
$panel->appendChild($history_table);
|
|
|
|
|
|
|
|
return $panel;
|
|
|
|
}
|
|
|
|
|
|
|
|
private function buildBrowseTable(
|
|
|
|
$browse_results,
|
|
|
|
$browse_paths,
|
|
|
|
$browse_exception,
|
|
|
|
array $handles) {
|
|
|
|
|
|
|
|
$request = $this->getRequest();
|
|
|
|
$viewer = $request->getUser();
|
|
|
|
$drequest = $this->getDiffusionRequest();
|
|
|
|
$repository = $drequest->getRepository();
|
|
|
|
|
|
|
|
if ($browse_exception) {
|
|
|
|
if ($repository->isImporting()) {
|
|
|
|
// The history table renders a useful message.
|
|
|
|
return null;
|
|
|
|
} else {
|
|
|
|
return $this->renderStatusMessage(
|
|
|
|
pht('Unable to Retrieve Paths'),
|
|
|
|
$browse_exception->getMessage());
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
$browse_table = id(new DiffusionBrowseTableView())
|
|
|
|
->setUser($viewer)
|
|
|
|
->setDiffusionRequest($drequest)
|
|
|
|
->setHandles($handles);
|
|
|
|
if ($browse_paths) {
|
|
|
|
$browse_table->setPaths($browse_paths);
|
|
|
|
} else {
|
|
|
|
$browse_table->setPaths(array());
|
|
|
|
}
|
|
|
|
|
|
|
|
$browse_uri = $drequest->generateURI(array('action' => 'browse'));
|
|
|
|
|
2014-01-07 20:57:37 +01:00
|
|
|
$browse_panel = new PHUIObjectBoxView();
|
2014-01-09 17:51:57 +01:00
|
|
|
$header = id(new PHUIHeaderView())
|
|
|
|
->setHeader(pht('Repository'));
|
|
|
|
|
|
|
|
$icon = id(new PHUIIconView())
|
|
|
|
->setSpriteSheet(PHUIIconView::SPRITE_ICONS)
|
|
|
|
->setSpriteIcon('data');
|
|
|
|
|
|
|
|
$button = new PHUIButtonView();
|
|
|
|
$button->setText(pht('Browse Repository'));
|
|
|
|
$button->setTag('a');
|
|
|
|
$button->setIcon($icon);
|
|
|
|
$button->setHref($browse_uri);
|
|
|
|
|
|
|
|
$header->addActionLink($button);
|
|
|
|
$browse_panel->setHeader($header);
|
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
|
|
|
$browse_panel->appendChild($browse_table);
|
|
|
|
|
|
|
|
return $browse_panel;
|
|
|
|
}
|
|
|
|
|
2013-11-02 01:35:43 +01:00
|
|
|
private function renderCloneURI(
|
|
|
|
$uri,
|
|
|
|
$serve_mode = null,
|
|
|
|
$manage_uri = null) {
|
|
|
|
|
|
|
|
require_celerity_resource('diffusion-icons-css');
|
|
|
|
|
|
|
|
Javelin::initBehavior('select-on-click');
|
|
|
|
|
|
|
|
$input = javelin_tag(
|
|
|
|
'input',
|
|
|
|
array(
|
|
|
|
'type' => 'text',
|
|
|
|
'value' => (string)$uri,
|
|
|
|
'class' => 'diffusion-clone-uri',
|
|
|
|
'sigil' => 'select-on-click',
|
2013-12-20 20:47:25 +01:00
|
|
|
'readonly' => 'true',
|
2013-11-02 01:35:43 +01:00
|
|
|
));
|
|
|
|
|
|
|
|
$extras = array();
|
|
|
|
if ($serve_mode) {
|
|
|
|
if ($serve_mode === PhabricatorRepository::SERVE_READONLY) {
|
|
|
|
$extras[] = pht('(Read Only)');
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
if ($manage_uri) {
|
|
|
|
if ($this->getRequest()->getUser()->isLoggedIn()) {
|
|
|
|
$extras[] = phutil_tag(
|
|
|
|
'a',
|
|
|
|
array(
|
|
|
|
'href' => $manage_uri,
|
|
|
|
),
|
|
|
|
pht('Manage Credentials'));
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
if ($extras) {
|
|
|
|
$extras = phutil_implode_html(' ', $extras);
|
|
|
|
$extras = phutil_tag(
|
|
|
|
'div',
|
|
|
|
array(
|
|
|
|
'class' => 'diffusion-clone-extras',
|
|
|
|
),
|
|
|
|
$extras);
|
|
|
|
}
|
|
|
|
|
|
|
|
return array($input, $extras);
|
|
|
|
}
|
|
|
|
|
2011-03-13 01:17:34 +01:00
|
|
|
}
|