mirror of
https://we.phorge.it/source/phorge.git
synced 2024-11-30 02:32:42 +01:00
commit
2264c2b4b5
25 changed files with 224 additions and 175 deletions
|
@ -811,6 +811,10 @@ return array(
|
||||||
// only the submitter can close a revision.
|
// only the submitter can close a revision.
|
||||||
'differential.always-allow-close' => false,
|
'differential.always-allow-close' => false,
|
||||||
|
|
||||||
|
// If you set this to true, any user can abandon any revision. If false, only
|
||||||
|
// the submitter can abandon a revision.
|
||||||
|
'differential.always-allow-abandon' => false,
|
||||||
|
|
||||||
// If you set this to true, any user can reopen a revision so long as it has
|
// If you set this to true, any user can reopen a revision so long as it has
|
||||||
// been closed. This can be useful if a revision is accidentally closed or
|
// been closed. This can be useful if a revision is accidentally closed or
|
||||||
// if a developer changes his or her mind after closing a revision. If it is
|
// if a developer changes his or her mind after closing a revision. If it is
|
||||||
|
|
|
@ -7,8 +7,8 @@
|
||||||
return array(
|
return array(
|
||||||
'names' =>
|
'names' =>
|
||||||
array(
|
array(
|
||||||
'core.pkg.css' => '30eeae90',
|
'core.pkg.css' => '2920014c',
|
||||||
'core.pkg.js' => '7db41c19',
|
'core.pkg.js' => '639b2433',
|
||||||
'darkconsole.pkg.js' => 'ca8671ce',
|
'darkconsole.pkg.js' => 'ca8671ce',
|
||||||
'differential.pkg.css' => 'fbf57382',
|
'differential.pkg.css' => 'fbf57382',
|
||||||
'differential.pkg.js' => '74cb0d29',
|
'differential.pkg.js' => '74cb0d29',
|
||||||
|
@ -135,7 +135,7 @@ return array(
|
||||||
'rsrc/css/phui/phui-info-panel.css' => '27ea50a1',
|
'rsrc/css/phui/phui-info-panel.css' => '27ea50a1',
|
||||||
'rsrc/css/phui/phui-list.css' => '43ed2d93',
|
'rsrc/css/phui/phui-list.css' => '43ed2d93',
|
||||||
'rsrc/css/phui/phui-object-box.css' => 'ce92d8ec',
|
'rsrc/css/phui/phui-object-box.css' => 'ce92d8ec',
|
||||||
'rsrc/css/phui/phui-object-item-list-view.css' => '15c582b1',
|
'rsrc/css/phui/phui-object-item-list-view.css' => 'bd66015e',
|
||||||
'rsrc/css/phui/phui-pinboard-view.css' => '874c22f9',
|
'rsrc/css/phui/phui-pinboard-view.css' => '874c22f9',
|
||||||
'rsrc/css/phui/phui-property-list-view.css' => '2f7199e8',
|
'rsrc/css/phui/phui-property-list-view.css' => '2f7199e8',
|
||||||
'rsrc/css/phui/phui-remarkup-preview.css' => '19ad512b',
|
'rsrc/css/phui/phui-remarkup-preview.css' => '19ad512b',
|
||||||
|
@ -343,7 +343,7 @@ return array(
|
||||||
'rsrc/image/texture/table_header_tall.png' => 'd56b434f',
|
'rsrc/image/texture/table_header_tall.png' => 'd56b434f',
|
||||||
'rsrc/js/application/aphlict/Aphlict.js' => '493665ee',
|
'rsrc/js/application/aphlict/Aphlict.js' => '493665ee',
|
||||||
'rsrc/js/application/aphlict/behavior-aphlict-dropdown.js' => '2a2dba85',
|
'rsrc/js/application/aphlict/behavior-aphlict-dropdown.js' => '2a2dba85',
|
||||||
'rsrc/js/application/aphlict/behavior-aphlict-listen.js' => '0a6c2de6',
|
'rsrc/js/application/aphlict/behavior-aphlict-listen.js' => '9aa97ab6',
|
||||||
'rsrc/js/application/auth/behavior-persona-login.js' => '9414ff18',
|
'rsrc/js/application/auth/behavior-persona-login.js' => '9414ff18',
|
||||||
'rsrc/js/application/config/behavior-reorder-fields.js' => '938aed89',
|
'rsrc/js/application/config/behavior-reorder-fields.js' => '938aed89',
|
||||||
'rsrc/js/application/conpherence/behavior-menu.js' => '7ee23816',
|
'rsrc/js/application/conpherence/behavior-menu.js' => '7ee23816',
|
||||||
|
@ -459,7 +459,7 @@ return array(
|
||||||
'rsrc/js/core/behavior-keyboard-shortcuts.js' => 'd75709e6',
|
'rsrc/js/core/behavior-keyboard-shortcuts.js' => 'd75709e6',
|
||||||
'rsrc/js/core/behavior-konami.js' => '5bc2cb21',
|
'rsrc/js/core/behavior-konami.js' => '5bc2cb21',
|
||||||
'rsrc/js/core/behavior-lightbox-attachments.js' => '3aa45ad9',
|
'rsrc/js/core/behavior-lightbox-attachments.js' => '3aa45ad9',
|
||||||
'rsrc/js/core/behavior-line-linker.js' => '0969ff43',
|
'rsrc/js/core/behavior-line-linker.js' => 'f726d506',
|
||||||
'rsrc/js/core/behavior-more.js' => '9b9197be',
|
'rsrc/js/core/behavior-more.js' => '9b9197be',
|
||||||
'rsrc/js/core/behavior-object-selector.js' => 'e6f67523',
|
'rsrc/js/core/behavior-object-selector.js' => 'e6f67523',
|
||||||
'rsrc/js/core/behavior-oncopy.js' => 'c3e218fe',
|
'rsrc/js/core/behavior-oncopy.js' => 'c3e218fe',
|
||||||
|
@ -532,7 +532,7 @@ return array(
|
||||||
'javelin-aphlict' => '493665ee',
|
'javelin-aphlict' => '493665ee',
|
||||||
'javelin-behavior' => '8a3ed18b',
|
'javelin-behavior' => '8a3ed18b',
|
||||||
'javelin-behavior-aphlict-dropdown' => '2a2dba85',
|
'javelin-behavior-aphlict-dropdown' => '2a2dba85',
|
||||||
'javelin-behavior-aphlict-listen' => '0a6c2de6',
|
'javelin-behavior-aphlict-listen' => '9aa97ab6',
|
||||||
'javelin-behavior-aphront-basic-tokenizer' => 'b3a4b884',
|
'javelin-behavior-aphront-basic-tokenizer' => 'b3a4b884',
|
||||||
'javelin-behavior-aphront-crop' => 'b98fc918',
|
'javelin-behavior-aphront-crop' => 'b98fc918',
|
||||||
'javelin-behavior-aphront-drag-and-drop-textarea' => '4a11ea9c',
|
'javelin-behavior-aphront-drag-and-drop-textarea' => '4a11ea9c',
|
||||||
|
@ -601,7 +601,7 @@ return array(
|
||||||
'javelin-behavior-phabricator-hovercards' => '9c808199',
|
'javelin-behavior-phabricator-hovercards' => '9c808199',
|
||||||
'javelin-behavior-phabricator-keyboard-pager' => 'b657bdf8',
|
'javelin-behavior-phabricator-keyboard-pager' => 'b657bdf8',
|
||||||
'javelin-behavior-phabricator-keyboard-shortcuts' => 'd75709e6',
|
'javelin-behavior-phabricator-keyboard-shortcuts' => 'd75709e6',
|
||||||
'javelin-behavior-phabricator-line-linker' => '0969ff43',
|
'javelin-behavior-phabricator-line-linker' => 'f726d506',
|
||||||
'javelin-behavior-phabricator-nav' => 'b5842a5e',
|
'javelin-behavior-phabricator-nav' => 'b5842a5e',
|
||||||
'javelin-behavior-phabricator-notification-example' => 'c51a6616',
|
'javelin-behavior-phabricator-notification-example' => 'c51a6616',
|
||||||
'javelin-behavior-phabricator-object-selector' => 'e6f67523',
|
'javelin-behavior-phabricator-object-selector' => 'e6f67523',
|
||||||
|
@ -766,7 +766,7 @@ return array(
|
||||||
'phui-info-panel-css' => '27ea50a1',
|
'phui-info-panel-css' => '27ea50a1',
|
||||||
'phui-list-view-css' => '43ed2d93',
|
'phui-list-view-css' => '43ed2d93',
|
||||||
'phui-object-box-css' => 'ce92d8ec',
|
'phui-object-box-css' => 'ce92d8ec',
|
||||||
'phui-object-item-list-view-css' => '15c582b1',
|
'phui-object-item-list-view-css' => 'bd66015e',
|
||||||
'phui-pinboard-view-css' => '874c22f9',
|
'phui-pinboard-view-css' => '874c22f9',
|
||||||
'phui-property-list-view-css' => '2f7199e8',
|
'phui-property-list-view-css' => '2f7199e8',
|
||||||
'phui-remarkup-preview-css' => '19ad512b',
|
'phui-remarkup-preview-css' => '19ad512b',
|
||||||
|
@ -863,13 +863,6 @@ return array(
|
||||||
array(
|
array(
|
||||||
0 => 'javelin-install',
|
0 => 'javelin-install',
|
||||||
),
|
),
|
||||||
'0969ff43' =>
|
|
||||||
array(
|
|
||||||
0 => 'javelin-behavior',
|
|
||||||
1 => 'javelin-stratcom',
|
|
||||||
2 => 'javelin-dom',
|
|
||||||
3 => 'javelin-history',
|
|
||||||
),
|
|
||||||
'09b15cf1' =>
|
'09b15cf1' =>
|
||||||
array(
|
array(
|
||||||
0 => 'javelin-stratcom',
|
0 => 'javelin-stratcom',
|
||||||
|
@ -890,18 +883,6 @@ return array(
|
||||||
3 => 'javelin-dom',
|
3 => 'javelin-dom',
|
||||||
4 => 'javelin-router',
|
4 => 'javelin-router',
|
||||||
),
|
),
|
||||||
'0a6c2de6' =>
|
|
||||||
array(
|
|
||||||
0 => 'javelin-behavior',
|
|
||||||
1 => 'javelin-aphlict',
|
|
||||||
2 => 'javelin-stratcom',
|
|
||||||
3 => 'javelin-request',
|
|
||||||
4 => 'javelin-uri',
|
|
||||||
5 => 'javelin-dom',
|
|
||||||
6 => 'javelin-json',
|
|
||||||
7 => 'javelin-router',
|
|
||||||
8 => 'phabricator-notification',
|
|
||||||
),
|
|
||||||
'0c33c1a0' =>
|
'0c33c1a0' =>
|
||||||
array(
|
array(
|
||||||
0 => 'javelin-view',
|
0 => 'javelin-view',
|
||||||
|
@ -1270,13 +1251,6 @@ return array(
|
||||||
2 => 'javelin-util',
|
2 => 'javelin-util',
|
||||||
3 => 'phabricator-shaped-request',
|
3 => 'phabricator-shaped-request',
|
||||||
),
|
),
|
||||||
'62e18640' =>
|
|
||||||
array(
|
|
||||||
0 => 'javelin-install',
|
|
||||||
1 => 'javelin-util',
|
|
||||||
2 => 'javelin-dom',
|
|
||||||
3 => 'javelin-typeahead-normalizer',
|
|
||||||
),
|
|
||||||
'6453c869' =>
|
'6453c869' =>
|
||||||
array(
|
array(
|
||||||
0 => 'javelin-install',
|
0 => 'javelin-install',
|
||||||
|
@ -1335,6 +1309,13 @@ return array(
|
||||||
0 => 'javelin-behavior',
|
0 => 'javelin-behavior',
|
||||||
1 => 'javelin-dom',
|
1 => 'javelin-dom',
|
||||||
),
|
),
|
||||||
|
'62e18640' =>
|
||||||
|
array(
|
||||||
|
0 => 'javelin-install',
|
||||||
|
1 => 'javelin-util',
|
||||||
|
2 => 'javelin-dom',
|
||||||
|
3 => 'javelin-typeahead-normalizer',
|
||||||
|
),
|
||||||
'76f4ebed' =>
|
'76f4ebed' =>
|
||||||
array(
|
array(
|
||||||
0 => 'javelin-install',
|
0 => 'javelin-install',
|
||||||
|
@ -1532,6 +1513,18 @@ return array(
|
||||||
3 => 'javelin-dom',
|
3 => 'javelin-dom',
|
||||||
4 => 'phabricator-draggable-list',
|
4 => 'phabricator-draggable-list',
|
||||||
),
|
),
|
||||||
|
'9aa97ab6' =>
|
||||||
|
array(
|
||||||
|
0 => 'javelin-behavior',
|
||||||
|
1 => 'javelin-aphlict',
|
||||||
|
2 => 'javelin-stratcom',
|
||||||
|
3 => 'javelin-request',
|
||||||
|
4 => 'javelin-uri',
|
||||||
|
5 => 'javelin-dom',
|
||||||
|
6 => 'javelin-json',
|
||||||
|
7 => 'javelin-router',
|
||||||
|
8 => 'phabricator-notification',
|
||||||
|
),
|
||||||
'9b9197be' =>
|
'9b9197be' =>
|
||||||
array(
|
array(
|
||||||
0 => 'javelin-behavior',
|
0 => 'javelin-behavior',
|
||||||
|
@ -2005,6 +1998,13 @@ return array(
|
||||||
2 => 'javelin-util',
|
2 => 'javelin-util',
|
||||||
3 => 'javelin-reactor',
|
3 => 'javelin-reactor',
|
||||||
),
|
),
|
||||||
|
'f726d506' =>
|
||||||
|
array(
|
||||||
|
0 => 'javelin-behavior',
|
||||||
|
1 => 'javelin-stratcom',
|
||||||
|
2 => 'javelin-dom',
|
||||||
|
3 => 'javelin-history',
|
||||||
|
),
|
||||||
'f7379f45' =>
|
'f7379f45' =>
|
||||||
array(
|
array(
|
||||||
0 => 'javelin-behavior',
|
0 => 'javelin-behavior',
|
||||||
|
|
|
@ -119,21 +119,21 @@ confirm
|
||||||
|
|
||||||
if [[ ! -e libphutil ]]
|
if [[ ! -e libphutil ]]
|
||||||
then
|
then
|
||||||
git clone git://github.com/phacility/libphutil.git
|
git clone https://github.com/phacility/libphutil.git
|
||||||
else
|
else
|
||||||
(cd libphutil && git pull --rebase)
|
(cd libphutil && git pull --rebase)
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if [[ ! -e arcanist ]]
|
if [[ ! -e arcanist ]]
|
||||||
then
|
then
|
||||||
git clone git://github.com/phacility/arcanist.git
|
git clone https://github.com/phacility/arcanist.git
|
||||||
else
|
else
|
||||||
(cd arcanist && git pull --rebase)
|
(cd arcanist && git pull --rebase)
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if [[ ! -e phabricator ]]
|
if [[ ! -e phabricator ]]
|
||||||
then
|
then
|
||||||
git clone git://github.com/phacility/phabricator.git
|
git clone https://github.com/phacility/phabricator.git
|
||||||
else
|
else
|
||||||
(cd phabricator && git pull --rebase)
|
(cd phabricator && git pull --rebase)
|
||||||
fi
|
fi
|
||||||
|
|
|
@ -64,21 +64,21 @@ fi
|
||||||
|
|
||||||
if [ ! -e libphutil ]
|
if [ ! -e libphutil ]
|
||||||
then
|
then
|
||||||
git clone git://github.com/phacility/libphutil.git
|
git clone https://github.com/phacility/libphutil.git
|
||||||
else
|
else
|
||||||
(cd libphutil && git pull --rebase)
|
(cd libphutil && git pull --rebase)
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if [ ! -e arcanist ]
|
if [ ! -e arcanist ]
|
||||||
then
|
then
|
||||||
git clone git://github.com/phacility/arcanist.git
|
git clone https://github.com/phacility/arcanist.git
|
||||||
else
|
else
|
||||||
(cd arcanist && git pull --rebase)
|
(cd arcanist && git pull --rebase)
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if [ ! -e phabricator ]
|
if [ ! -e phabricator ]
|
||||||
then
|
then
|
||||||
git clone git://github.com/phacility/phabricator.git
|
git clone https://github.com/phacility/phabricator.git
|
||||||
else
|
else
|
||||||
(cd phabricator && git pull --rebase)
|
(cd phabricator && git pull --rebase)
|
||||||
fi
|
fi
|
||||||
|
|
|
@ -2022,7 +2022,6 @@ phutil_register_library_map(array(
|
||||||
'PhabricatorRepositoryGraphStream' => 'applications/repository/daemon/PhabricatorRepositoryGraphStream.php',
|
'PhabricatorRepositoryGraphStream' => 'applications/repository/daemon/PhabricatorRepositoryGraphStream.php',
|
||||||
'PhabricatorRepositoryListController' => 'applications/repository/controller/PhabricatorRepositoryListController.php',
|
'PhabricatorRepositoryListController' => 'applications/repository/controller/PhabricatorRepositoryListController.php',
|
||||||
'PhabricatorRepositoryManagementCacheWorkflow' => 'applications/repository/management/PhabricatorRepositoryManagementCacheWorkflow.php',
|
'PhabricatorRepositoryManagementCacheWorkflow' => 'applications/repository/management/PhabricatorRepositoryManagementCacheWorkflow.php',
|
||||||
'PhabricatorRepositoryManagementDeleteWorkflow' => 'applications/repository/management/PhabricatorRepositoryManagementDeleteWorkflow.php',
|
|
||||||
'PhabricatorRepositoryManagementDiscoverWorkflow' => 'applications/repository/management/PhabricatorRepositoryManagementDiscoverWorkflow.php',
|
'PhabricatorRepositoryManagementDiscoverWorkflow' => 'applications/repository/management/PhabricatorRepositoryManagementDiscoverWorkflow.php',
|
||||||
'PhabricatorRepositoryManagementEditWorkflow' => 'applications/repository/management/PhabricatorRepositoryManagementEditWorkflow.php',
|
'PhabricatorRepositoryManagementEditWorkflow' => 'applications/repository/management/PhabricatorRepositoryManagementEditWorkflow.php',
|
||||||
'PhabricatorRepositoryManagementImportingWorkflow' => 'applications/repository/management/PhabricatorRepositoryManagementImportingWorkflow.php',
|
'PhabricatorRepositoryManagementImportingWorkflow' => 'applications/repository/management/PhabricatorRepositoryManagementImportingWorkflow.php',
|
||||||
|
@ -4749,6 +4748,7 @@ phutil_register_library_map(array(
|
||||||
2 => 'PhabricatorPolicyInterface',
|
2 => 'PhabricatorPolicyInterface',
|
||||||
3 => 'PhabricatorSubscribableInterface',
|
3 => 'PhabricatorSubscribableInterface',
|
||||||
4 => 'PhabricatorCustomFieldInterface',
|
4 => 'PhabricatorCustomFieldInterface',
|
||||||
|
5 => 'PhabricatorDestructableInterface',
|
||||||
),
|
),
|
||||||
'PhabricatorProjectArchiveController' => 'PhabricatorProjectController',
|
'PhabricatorProjectArchiveController' => 'PhabricatorProjectController',
|
||||||
'PhabricatorProjectBoardController' => 'PhabricatorProjectController',
|
'PhabricatorProjectBoardController' => 'PhabricatorProjectController',
|
||||||
|
@ -4759,6 +4759,7 @@ phutil_register_library_map(array(
|
||||||
array(
|
array(
|
||||||
0 => 'PhabricatorProjectDAO',
|
0 => 'PhabricatorProjectDAO',
|
||||||
1 => 'PhabricatorPolicyInterface',
|
1 => 'PhabricatorPolicyInterface',
|
||||||
|
2 => 'PhabricatorDestructableInterface',
|
||||||
),
|
),
|
||||||
'PhabricatorProjectColumnDetailController' => 'PhabricatorProjectBoardController',
|
'PhabricatorProjectColumnDetailController' => 'PhabricatorProjectBoardController',
|
||||||
'PhabricatorProjectColumnQuery' => 'PhabricatorCursorPagedPolicyAwareQuery',
|
'PhabricatorProjectColumnQuery' => 'PhabricatorCursorPagedPolicyAwareQuery',
|
||||||
|
@ -4831,6 +4832,7 @@ phutil_register_library_map(array(
|
||||||
1 => 'PhabricatorPolicyInterface',
|
1 => 'PhabricatorPolicyInterface',
|
||||||
2 => 'PhabricatorFlaggableInterface',
|
2 => 'PhabricatorFlaggableInterface',
|
||||||
3 => 'PhabricatorMarkupInterface',
|
3 => 'PhabricatorMarkupInterface',
|
||||||
|
4 => 'PhabricatorDestructableInterface',
|
||||||
),
|
),
|
||||||
'PhabricatorRepositoryArcanistProject' =>
|
'PhabricatorRepositoryArcanistProject' =>
|
||||||
array(
|
array(
|
||||||
|
@ -4872,7 +4874,6 @@ phutil_register_library_map(array(
|
||||||
'PhabricatorRepositoryGraphStream' => 'Phobject',
|
'PhabricatorRepositoryGraphStream' => 'Phobject',
|
||||||
'PhabricatorRepositoryListController' => 'PhabricatorRepositoryController',
|
'PhabricatorRepositoryListController' => 'PhabricatorRepositoryController',
|
||||||
'PhabricatorRepositoryManagementCacheWorkflow' => 'PhabricatorRepositoryManagementWorkflow',
|
'PhabricatorRepositoryManagementCacheWorkflow' => 'PhabricatorRepositoryManagementWorkflow',
|
||||||
'PhabricatorRepositoryManagementDeleteWorkflow' => 'PhabricatorRepositoryManagementWorkflow',
|
|
||||||
'PhabricatorRepositoryManagementDiscoverWorkflow' => 'PhabricatorRepositoryManagementWorkflow',
|
'PhabricatorRepositoryManagementDiscoverWorkflow' => 'PhabricatorRepositoryManagementWorkflow',
|
||||||
'PhabricatorRepositoryManagementEditWorkflow' => 'PhabricatorRepositoryManagementWorkflow',
|
'PhabricatorRepositoryManagementEditWorkflow' => 'PhabricatorRepositoryManagementWorkflow',
|
||||||
'PhabricatorRepositoryManagementImportingWorkflow' => 'PhabricatorRepositoryManagementWorkflow',
|
'PhabricatorRepositoryManagementImportingWorkflow' => 'PhabricatorRepositoryManagementWorkflow',
|
||||||
|
|
|
@ -165,6 +165,17 @@ final class PhabricatorDifferentialConfigOptions
|
||||||
"where the reviewer is often the actual committer can benefit ".
|
"where the reviewer is often the actual committer can benefit ".
|
||||||
"from turning this option to true. If false, only the submitter ".
|
"from turning this option to true. If false, only the submitter ".
|
||||||
"can close a revision.")),
|
"can close a revision.")),
|
||||||
|
$this->newOption('differential.always-allow-abandon', 'bool', false)
|
||||||
|
->setBoolOptions(
|
||||||
|
array(
|
||||||
|
pht('Allow any user'),
|
||||||
|
pht('Restrict to submitter'),
|
||||||
|
))
|
||||||
|
->setSummary(pht('Allows any user to abandon revisions.'))
|
||||||
|
->setDescription(
|
||||||
|
pht(
|
||||||
|
'If you set this to true, any user can abandon any revision. If '.
|
||||||
|
'false, only the submitter can abandon a revision.')),
|
||||||
$this->newOption('differential.allow-reopen', 'bool', false)
|
$this->newOption('differential.allow-reopen', 'bool', false)
|
||||||
->setBoolOptions(
|
->setBoolOptions(
|
||||||
array(
|
array(
|
||||||
|
|
|
@ -553,6 +553,8 @@ final class DifferentialRevisionViewController extends DifferentialController {
|
||||||
|
|
||||||
$allow_self_accept = PhabricatorEnv::getEnvConfig(
|
$allow_self_accept = PhabricatorEnv::getEnvConfig(
|
||||||
'differential.allow-self-accept');
|
'differential.allow-self-accept');
|
||||||
|
$always_allow_abandon = PhabricatorEnv::getEnvConfig(
|
||||||
|
'differential.always-allow-abandon');
|
||||||
$always_allow_close = PhabricatorEnv::getEnvConfig(
|
$always_allow_close = PhabricatorEnv::getEnvConfig(
|
||||||
'differential.always-allow-close');
|
'differential.always-allow-close');
|
||||||
$allow_reopen = PhabricatorEnv::getEnvConfig(
|
$allow_reopen = PhabricatorEnv::getEnvConfig(
|
||||||
|
@ -586,17 +588,20 @@ final class DifferentialRevisionViewController extends DifferentialController {
|
||||||
} else {
|
} else {
|
||||||
switch ($status) {
|
switch ($status) {
|
||||||
case ArcanistDifferentialRevisionStatus::NEEDS_REVIEW:
|
case ArcanistDifferentialRevisionStatus::NEEDS_REVIEW:
|
||||||
|
$actions[DifferentialAction::ACTION_ABANDON] = $always_allow_abandon;
|
||||||
$actions[DifferentialAction::ACTION_ACCEPT] = true;
|
$actions[DifferentialAction::ACTION_ACCEPT] = true;
|
||||||
$actions[DifferentialAction::ACTION_REJECT] = true;
|
$actions[DifferentialAction::ACTION_REJECT] = true;
|
||||||
$actions[DifferentialAction::ACTION_RESIGN] = $viewer_is_reviewer;
|
$actions[DifferentialAction::ACTION_RESIGN] = $viewer_is_reviewer;
|
||||||
break;
|
break;
|
||||||
case ArcanistDifferentialRevisionStatus::NEEDS_REVISION:
|
case ArcanistDifferentialRevisionStatus::NEEDS_REVISION:
|
||||||
case ArcanistDifferentialRevisionStatus::CHANGES_PLANNED:
|
case ArcanistDifferentialRevisionStatus::CHANGES_PLANNED:
|
||||||
|
$actions[DifferentialAction::ACTION_ABANDON] = $always_allow_abandon;
|
||||||
$actions[DifferentialAction::ACTION_ACCEPT] = true;
|
$actions[DifferentialAction::ACTION_ACCEPT] = true;
|
||||||
$actions[DifferentialAction::ACTION_REJECT] = !$viewer_has_rejected;
|
$actions[DifferentialAction::ACTION_REJECT] = !$viewer_has_rejected;
|
||||||
$actions[DifferentialAction::ACTION_RESIGN] = $viewer_is_reviewer;
|
$actions[DifferentialAction::ACTION_RESIGN] = $viewer_is_reviewer;
|
||||||
break;
|
break;
|
||||||
case ArcanistDifferentialRevisionStatus::ACCEPTED:
|
case ArcanistDifferentialRevisionStatus::ACCEPTED:
|
||||||
|
$actions[DifferentialAction::ACTION_ABANDON] = $always_allow_abandon;
|
||||||
$actions[DifferentialAction::ACTION_ACCEPT] = !$viewer_has_accepted;
|
$actions[DifferentialAction::ACTION_ACCEPT] = !$viewer_has_accepted;
|
||||||
$actions[DifferentialAction::ACTION_REJECT] = true;
|
$actions[DifferentialAction::ACTION_REJECT] = true;
|
||||||
$actions[DifferentialAction::ACTION_RESIGN] = $viewer_is_reviewer;
|
$actions[DifferentialAction::ACTION_RESIGN] = $viewer_is_reviewer;
|
||||||
|
|
|
@ -789,6 +789,9 @@ final class DifferentialTransactionEditor
|
||||||
$actor_phid = $this->getActor()->getPHID();
|
$actor_phid = $this->getActor()->getPHID();
|
||||||
$actor_is_author = ($author_phid == $actor_phid);
|
$actor_is_author = ($author_phid == $actor_phid);
|
||||||
|
|
||||||
|
$config_abandon_key = 'differential.always-allow-abandon';
|
||||||
|
$always_allow_abandon = PhabricatorEnv::getEnvConfig($config_abandon_key);
|
||||||
|
|
||||||
$config_close_key = 'differential.always-allow-close';
|
$config_close_key = 'differential.always-allow-close';
|
||||||
$always_allow_close = PhabricatorEnv::getEnvConfig($config_close_key);
|
$always_allow_close = PhabricatorEnv::getEnvConfig($config_close_key);
|
||||||
|
|
||||||
|
@ -860,7 +863,7 @@ final class DifferentialTransactionEditor
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case DifferentialAction::ACTION_ABANDON:
|
case DifferentialAction::ACTION_ABANDON:
|
||||||
if (!$actor_is_author) {
|
if (!$actor_is_author && !$always_allow_abandon) {
|
||||||
return pht(
|
return pht(
|
||||||
"You can not abandon this revision because you do not own it. ".
|
"You can not abandon this revision because you do not own it. ".
|
||||||
"You can only abandon revisions you own.");
|
"You can only abandon revisions you own.");
|
||||||
|
|
|
@ -29,7 +29,7 @@ final class DiffusionRepositoryEditDeleteController
|
||||||
'If you really want to delete the repository, run this command from '.
|
'If you really want to delete the repository, run this command from '.
|
||||||
'the command line:');
|
'the command line:');
|
||||||
$command = csprintf(
|
$command = csprintf(
|
||||||
'phabricator/ $ ./bin/repository delete %s',
|
'phabricator/ $ ./bin/remove destroy %s',
|
||||||
$repository->getCallsign());
|
$repository->getCallsign());
|
||||||
$text_2 = pht('Repositories touch many objects and as such deletes are '.
|
$text_2 = pht('Repositories touch many objects and as such deletes are '.
|
||||||
'prohibitively expensive to run from the web UI.');
|
'prohibitively expensive to run from the web UI.');
|
||||||
|
|
|
@ -32,7 +32,7 @@ final class PhabricatorApplicationMetaMTA extends PhabricatorApplication {
|
||||||
|
|
||||||
public function getRoutes() {
|
public function getRoutes() {
|
||||||
return array(
|
return array(
|
||||||
$this->getBaseURI() => array(
|
'/mail/' => array(
|
||||||
'sendgrid/' => 'PhabricatorMetaMTASendGridReceiveController',
|
'sendgrid/' => 'PhabricatorMetaMTASendGridReceiveController',
|
||||||
'mailgun/' => 'PhabricatorMetaMTAMailgunReceiveController',
|
'mailgun/' => 'PhabricatorMetaMTAMailgunReceiveController',
|
||||||
),
|
),
|
||||||
|
|
|
@ -75,7 +75,6 @@ final class PhrictionDocumentController
|
||||||
$vdate = phabricator_datetime($content->getDateCreated(), $user);
|
$vdate = phabricator_datetime($content->getDateCreated(), $user);
|
||||||
$version_note = new AphrontErrorView();
|
$version_note = new AphrontErrorView();
|
||||||
$version_note->setSeverity(AphrontErrorView::SEVERITY_NOTICE);
|
$version_note->setSeverity(AphrontErrorView::SEVERITY_NOTICE);
|
||||||
$version_note->setTitle('Older Version');
|
|
||||||
$version_note->appendChild(
|
$version_note->appendChild(
|
||||||
pht('You are viewing an older version of this document, as it '.
|
pht('You are viewing an older version of this document, as it '.
|
||||||
'appeared on %s.', $vdate));
|
'appeared on %s.', $vdate));
|
||||||
|
@ -126,9 +125,8 @@ final class PhrictionDocumentController
|
||||||
$slug_uri = PhrictionDocument::getSlugURI($new_doc->getSlug());
|
$slug_uri = PhrictionDocument::getSlugURI($new_doc->getSlug());
|
||||||
}
|
}
|
||||||
|
|
||||||
$notice = new AphrontErrorView();
|
$notice = id(new AphrontErrorView())
|
||||||
$notice->setSeverity(AphrontErrorView::SEVERITY_NOTICE);
|
->setSeverity(AphrontErrorView::SEVERITY_NOTICE);
|
||||||
$notice->setTitle(pht('Document Moved'));
|
|
||||||
|
|
||||||
if ($slug_uri) {
|
if ($slug_uri) {
|
||||||
$notice->appendChild(
|
$notice->appendChild(
|
||||||
|
@ -159,22 +157,33 @@ final class PhrictionDocumentController
|
||||||
$move_notice = null;
|
$move_notice = null;
|
||||||
if ($current_status == PhrictionChangeType::CHANGE_MOVE_HERE) {
|
if ($current_status == PhrictionChangeType::CHANGE_MOVE_HERE) {
|
||||||
$from_doc_id = $content->getChangeRef();
|
$from_doc_id = $content->getChangeRef();
|
||||||
$from_doc = id(new PhrictionDocumentQuery())
|
|
||||||
|
$slug_uri = null;
|
||||||
|
|
||||||
|
// If the old document exists and is visible, provide a link to it.
|
||||||
|
$from_docs = id(new PhrictionDocumentQuery())
|
||||||
->setViewer($user)
|
->setViewer($user)
|
||||||
->withIDs(array($from_doc_id))
|
->withIDs(array($from_doc_id))
|
||||||
->executeOne();
|
->execute();
|
||||||
$slug_uri = PhrictionDocument::getSlugURI($from_doc->getSlug());
|
if ($from_docs) {
|
||||||
|
$from_doc = head($from_docs);
|
||||||
|
$slug_uri = PhrictionDocument::getSlugURI($from_doc->getSlug());
|
||||||
|
}
|
||||||
|
|
||||||
$move_notice = id(new AphrontErrorView())
|
$move_notice = id(new AphrontErrorView())
|
||||||
->setSeverity(AphrontErrorView::SEVERITY_NOTICE)
|
->setSeverity(AphrontErrorView::SEVERITY_NOTICE);
|
||||||
->appendChild(pht('This document was moved from %s',
|
|
||||||
phutil_tag('a', array('href' => $slug_uri), $slug_uri)))
|
|
||||||
->render();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if ($version_note) {
|
if ($slug_uri) {
|
||||||
$version_note = $version_note->render();
|
$move_notice->appendChild(
|
||||||
|
pht(
|
||||||
|
'This document was moved from %s.',
|
||||||
|
phutil_tag('a', array('href' => $slug_uri), $slug_uri)));
|
||||||
|
} else {
|
||||||
|
// Render this for consistency, even though it's a bit silly.
|
||||||
|
$move_notice->appendChild(
|
||||||
|
pht('This document was moved from elsewhere.'));
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
$children = $this->renderDocumentChildren($slug);
|
$children = $this->renderDocumentChildren($slug);
|
||||||
|
@ -204,6 +213,7 @@ final class PhrictionDocumentController
|
||||||
array(
|
array(
|
||||||
$actions,
|
$actions,
|
||||||
$prop_list,
|
$prop_list,
|
||||||
|
$version_note,
|
||||||
$move_notice,
|
$move_notice,
|
||||||
$core_content,
|
$core_content,
|
||||||
));
|
));
|
||||||
|
|
|
@ -5,7 +5,8 @@ final class PhabricatorProject extends PhabricatorProjectDAO
|
||||||
PhabricatorFlaggableInterface,
|
PhabricatorFlaggableInterface,
|
||||||
PhabricatorPolicyInterface,
|
PhabricatorPolicyInterface,
|
||||||
PhabricatorSubscribableInterface,
|
PhabricatorSubscribableInterface,
|
||||||
PhabricatorCustomFieldInterface {
|
PhabricatorCustomFieldInterface,
|
||||||
|
PhabricatorDestructableInterface {
|
||||||
|
|
||||||
protected $name;
|
protected $name;
|
||||||
protected $status = PhabricatorProjectStatus::STATUS_ACTIVE;
|
protected $status = PhabricatorProjectStatus::STATUS_ACTIVE;
|
||||||
|
@ -247,4 +248,27 @@ final class PhabricatorProject extends PhabricatorProjectDAO
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/* -( PhabricatorDestructableInterface )----------------------------------- */
|
||||||
|
|
||||||
|
public function destroyObjectPermanently(
|
||||||
|
PhabricatorDestructionEngine $engine) {
|
||||||
|
|
||||||
|
$this->openTransaction();
|
||||||
|
$this->delete();
|
||||||
|
|
||||||
|
$columns = id(new PhabricatorProjectColumn())
|
||||||
|
->loadAllWhere('projectPHID = %s', $this->getPHID());
|
||||||
|
foreach ($columns as $column) {
|
||||||
|
$engine->destroyObject($column);
|
||||||
|
}
|
||||||
|
|
||||||
|
$slugs = id(new PhabricatorProjectSlug())
|
||||||
|
->loadAllWhere('projectPHID = %s', $this->getPHID());
|
||||||
|
foreach ($slugs as $slug) {
|
||||||
|
$slug->delete();
|
||||||
|
}
|
||||||
|
|
||||||
|
$this->saveTransaction();
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -2,7 +2,8 @@
|
||||||
|
|
||||||
final class PhabricatorProjectColumn
|
final class PhabricatorProjectColumn
|
||||||
extends PhabricatorProjectDAO
|
extends PhabricatorProjectDAO
|
||||||
implements PhabricatorPolicyInterface {
|
implements PhabricatorPolicyInterface,
|
||||||
|
PhabricatorDestructableInterface {
|
||||||
|
|
||||||
const STATUS_ACTIVE = 0;
|
const STATUS_ACTIVE = 0;
|
||||||
const STATUS_DELETED = 1;
|
const STATUS_DELETED = 1;
|
||||||
|
@ -87,4 +88,15 @@ final class PhabricatorProjectColumn
|
||||||
return pht('Users must be able to see a project to see its board.');
|
return pht('Users must be able to see a project to see its board.');
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/* -( PhabricatorDestructableInterface )----------------------------------- */
|
||||||
|
|
||||||
|
public function destroyObjectPermanently(
|
||||||
|
PhabricatorDestructionEngine $engine) {
|
||||||
|
|
||||||
|
$this->openTransaction();
|
||||||
|
$this->delete();
|
||||||
|
$this->saveTransaction();
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -29,7 +29,12 @@ final class PhabricatorGitGraphStream
|
||||||
if (!isset($this->parents[$commit])) {
|
if (!isset($this->parents[$commit])) {
|
||||||
$this->parseUntil($commit);
|
$this->parseUntil($commit);
|
||||||
}
|
}
|
||||||
return $this->parents[$commit];
|
$parents = $this->parents[$commit];
|
||||||
|
|
||||||
|
// NOTE: In Git, it is possible for a commit to list the same parent more
|
||||||
|
// than once. See T5226. Discard duplicate parents.
|
||||||
|
|
||||||
|
return array_unique($parents);
|
||||||
}
|
}
|
||||||
|
|
||||||
public function getCommitDate($commit) {
|
public function getCommitDate($commit) {
|
||||||
|
|
|
@ -1,64 +0,0 @@
|
||||||
<?php
|
|
||||||
|
|
||||||
final class PhabricatorRepositoryManagementDeleteWorkflow
|
|
||||||
extends PhabricatorRepositoryManagementWorkflow {
|
|
||||||
|
|
||||||
public function didConstruct() {
|
|
||||||
$this
|
|
||||||
->setName('delete')
|
|
||||||
->setExamples('**delete** __repository__ ...')
|
|
||||||
->setSynopsis('Delete __repository__, named by callsign.')
|
|
||||||
->setArguments(
|
|
||||||
array(
|
|
||||||
array(
|
|
||||||
'name' => 'verbose',
|
|
||||||
'help' => 'Show additional debugging information.',
|
|
||||||
),
|
|
||||||
array(
|
|
||||||
'name' => 'force',
|
|
||||||
'help' => 'Do not prompt for confirmation.',
|
|
||||||
),
|
|
||||||
array(
|
|
||||||
'name' => 'repos',
|
|
||||||
'wildcard' => true,
|
|
||||||
),
|
|
||||||
));
|
|
||||||
}
|
|
||||||
|
|
||||||
public function execute(PhutilArgumentParser $args) {
|
|
||||||
$repos = $this->loadRepositories($args, 'repos');
|
|
||||||
|
|
||||||
if (!$repos) {
|
|
||||||
throw new PhutilArgumentUsageException(
|
|
||||||
"Specify one or more repositories to delete, by callsign.");
|
|
||||||
}
|
|
||||||
|
|
||||||
$console = PhutilConsole::getConsole();
|
|
||||||
|
|
||||||
if (!$args->getArg('force')) {
|
|
||||||
$console->writeOut("%s\n\n", pht('These repositories will be deleted:'));
|
|
||||||
|
|
||||||
foreach ($repos as $repo) {
|
|
||||||
$console->writeOut(
|
|
||||||
" %s %s\n",
|
|
||||||
'r'.$repo->getCallsign(),
|
|
||||||
$repo->getName());
|
|
||||||
}
|
|
||||||
|
|
||||||
$prompt = pht('Permanently delete these repositories?');
|
|
||||||
if (!$console->confirm($prompt)) {
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
foreach ($repos as $repo) {
|
|
||||||
$console->writeOut("Deleting '%s'...\n", $repo->getCallsign());
|
|
||||||
$repo->delete();
|
|
||||||
}
|
|
||||||
|
|
||||||
$console->writeOut("Done.\n");
|
|
||||||
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
|
@ -100,35 +100,50 @@ final class PhabricatorRepositoryManagementParentsWorkflow
|
||||||
$bar = id(new PhutilConsoleProgressBar())
|
$bar = id(new PhutilConsoleProgressBar())
|
||||||
->setTotal(count($graph));
|
->setTotal(count($graph));
|
||||||
|
|
||||||
|
$need = array();
|
||||||
foreach ($graph as $child => $parents) {
|
foreach ($graph as $child => $parents) {
|
||||||
$names = $parents;
|
foreach ($parents as $parent) {
|
||||||
$names[] = $child;
|
$need[$parent] = $parent;
|
||||||
|
}
|
||||||
|
$need[$child] = $child;
|
||||||
|
}
|
||||||
|
|
||||||
|
$map = array();
|
||||||
|
foreach (array_chunk($need, 2048) as $chunk) {
|
||||||
$rows = queryfx_all(
|
$rows = queryfx_all(
|
||||||
$conn_w,
|
$conn_w,
|
||||||
'SELECT id, commitIdentifier FROM %T
|
'SELECT id, commitIdentifier FROM %T
|
||||||
WHERE commitIdentifier IN (%Ls) AND repositoryID = %d',
|
WHERE commitIdentifier IN (%Ls) AND repositoryID = %d',
|
||||||
$commit_table_name,
|
$commit_table_name,
|
||||||
$names,
|
$chunk,
|
||||||
$repo->getID());
|
$repo->getID());
|
||||||
|
foreach ($rows as $row) {
|
||||||
|
$map[$row['commitIdentifier']] = $row['id'];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
$insert_sql = array();
|
||||||
|
$delete_sql = array();
|
||||||
|
|
||||||
|
foreach ($graph as $child => $parents) {
|
||||||
|
$names = $parents;
|
||||||
|
$names[] = $child;
|
||||||
|
|
||||||
$map = ipull($rows, 'id', 'commitIdentifier');
|
|
||||||
foreach ($names as $name) {
|
foreach ($names as $name) {
|
||||||
if (empty($map[$name])) {
|
if (empty($map[$name])) {
|
||||||
throw new Exception(pht('Unknown commit "%s"!', $name));
|
throw new Exception(pht('Unknown commit "%s"!', $name));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
$sql = array();
|
|
||||||
if (!$parents) {
|
if (!$parents) {
|
||||||
// Write an explicit 0 to indicate "no parents" instead of "no data".
|
// Write an explicit 0 to indicate "no parents" instead of "no data".
|
||||||
$sql[] = qsprintf(
|
$insert_sql[] = qsprintf(
|
||||||
$conn_w,
|
$conn_w,
|
||||||
'(%d, 0)',
|
'(%d, 0)',
|
||||||
$map[$child]);
|
$map[$child]);
|
||||||
} else {
|
} else {
|
||||||
foreach ($parents as $parent) {
|
foreach ($parents as $parent) {
|
||||||
$sql[] = qsprintf(
|
$insert_sql[] = qsprintf(
|
||||||
$conn_w,
|
$conn_w,
|
||||||
'(%d, %d)',
|
'(%d, %d)',
|
||||||
$map[$child],
|
$map[$child],
|
||||||
|
@ -136,25 +151,29 @@ final class PhabricatorRepositoryManagementParentsWorkflow
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
$commit_table->openTransaction();
|
$delete_sql[] = $map[$child];
|
||||||
queryfx(
|
|
||||||
$conn_w,
|
|
||||||
'DELETE FROM %T WHERE childCommitID = %d',
|
|
||||||
PhabricatorRepository::TABLE_PARENTS,
|
|
||||||
$map[$child]);
|
|
||||||
|
|
||||||
if ($sql) {
|
|
||||||
queryfx(
|
|
||||||
$conn_w,
|
|
||||||
'INSERT INTO %T (childCommitID, parentCommitID) VALUES %Q',
|
|
||||||
PhabricatorRepository::TABLE_PARENTS,
|
|
||||||
implode(', ', $sql));
|
|
||||||
}
|
|
||||||
$commit_table->saveTransaction();
|
|
||||||
|
|
||||||
$bar->update(1);
|
$bar->update(1);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
$commit_table->openTransaction();
|
||||||
|
foreach (PhabricatorLiskDAO::chunkSQL($delete_sql) as $chunk) {
|
||||||
|
queryfx(
|
||||||
|
$conn_w,
|
||||||
|
'DELETE FROM %T WHERE childCommitID IN (%Q)',
|
||||||
|
PhabricatorRepository::TABLE_PARENTS,
|
||||||
|
$chunk);
|
||||||
|
}
|
||||||
|
|
||||||
|
foreach (PhabricatorLiskDAO::chunkSQL($insert_sql) as $chunk) {
|
||||||
|
queryfx(
|
||||||
|
$conn_w,
|
||||||
|
'INSERT INTO %T (childCommitID, parentCommitID) VALUES %Q',
|
||||||
|
PhabricatorRepository::TABLE_PARENTS,
|
||||||
|
$chunk);
|
||||||
|
}
|
||||||
|
$commit_table->saveTransaction();
|
||||||
|
|
||||||
$bar->done();
|
$bar->done();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -7,7 +7,8 @@ final class PhabricatorRepository extends PhabricatorRepositoryDAO
|
||||||
implements
|
implements
|
||||||
PhabricatorPolicyInterface,
|
PhabricatorPolicyInterface,
|
||||||
PhabricatorFlaggableInterface,
|
PhabricatorFlaggableInterface,
|
||||||
PhabricatorMarkupInterface {
|
PhabricatorMarkupInterface,
|
||||||
|
PhabricatorDestructableInterface {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Shortest hash we'll recognize in raw "a829f32" form.
|
* Shortest hash we'll recognize in raw "a829f32" form.
|
||||||
|
@ -1322,4 +1323,15 @@ final class PhabricatorRepository extends PhabricatorRepositoryDAO
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/* -( PhabricatorDestructableInterface )----------------------------------- */
|
||||||
|
|
||||||
|
public function destroyObjectPermanently(
|
||||||
|
PhabricatorDestructionEngine $engine) {
|
||||||
|
|
||||||
|
$this->openTransaction();
|
||||||
|
$this->delete();
|
||||||
|
$this->saveTransaction();
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -62,8 +62,7 @@ final class PhabricatorSearchManagementIndexWorkflow
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!$phids) {
|
if (!$phids) {
|
||||||
throw new PhutilArgumentUsageException(
|
throw new PhutilArgumentUsageException('Nothing to index!');
|
||||||
"Nothing to index!");
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if ($args->getArg('background')) {
|
if ($args->getArg('background')) {
|
||||||
|
@ -73,27 +72,31 @@ final class PhabricatorSearchManagementIndexWorkflow
|
||||||
$is_background = false;
|
$is_background = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (!$is_background) {
|
||||||
|
$console->writeOut(
|
||||||
|
"%s\n",
|
||||||
|
pht(
|
||||||
|
'Run this workflow with "--background" to queue tasks for the '.
|
||||||
|
'daemon workers.'));
|
||||||
|
}
|
||||||
|
|
||||||
$groups = phid_group_by_type($phids);
|
$groups = phid_group_by_type($phids);
|
||||||
foreach ($groups as $group_type => $group) {
|
foreach ($groups as $group_type => $group) {
|
||||||
$console->writeOut(
|
$console->writeOut(
|
||||||
"%s\n",
|
"%s\n",
|
||||||
pht(
|
pht('Indexing %d object(s) of type %s.', count($group), $group_type));
|
||||||
"Indexing %d object(s) of type %s.",
|
|
||||||
count($group),
|
|
||||||
$group_type));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
$bar = id(new PhutilConsoleProgressBar())
|
||||||
|
->setTotal(count($phids));
|
||||||
|
|
||||||
$indexer = new PhabricatorSearchIndexer();
|
$indexer = new PhabricatorSearchIndexer();
|
||||||
foreach ($phids as $phid) {
|
foreach ($phids as $phid) {
|
||||||
if ($is_background) {
|
|
||||||
$console->writeOut("%s\n", pht("Queueing '%s'...", $phid));
|
|
||||||
} else {
|
|
||||||
$console->writeOut("%s\n", pht("Indexing '%s'...", $phid));
|
|
||||||
}
|
|
||||||
$indexer->queueDocumentForIndexing($phid);
|
$indexer->queueDocumentForIndexing($phid);
|
||||||
|
$bar->update(1);
|
||||||
}
|
}
|
||||||
|
|
||||||
$console->writeOut("Done.\n");
|
$bar->done();
|
||||||
}
|
}
|
||||||
|
|
||||||
private function loadPHIDsByNames(array $names) {
|
private function loadPHIDsByNames(array $names) {
|
||||||
|
|
|
@ -95,9 +95,9 @@ Now that you have all that stuff installed, grab Phabricator and its
|
||||||
dependencies:
|
dependencies:
|
||||||
|
|
||||||
$ cd somewhere/ # pick some install directory
|
$ cd somewhere/ # pick some install directory
|
||||||
somewhere/ $ git clone git://github.com/phacility/libphutil.git
|
somewhere/ $ git clone https://github.com/phacility/libphutil.git
|
||||||
somewhere/ $ git clone git://github.com/phacility/arcanist.git
|
somewhere/ $ git clone https://github.com/phacility/arcanist.git
|
||||||
somewhere/ $ git clone git://github.com/phacility/phabricator.git
|
somewhere/ $ git clone https://github.com/phacility/phabricator.git
|
||||||
|
|
||||||
= Installing APC (Optional) =
|
= Installing APC (Optional) =
|
||||||
|
|
||||||
|
|
|
@ -92,8 +92,8 @@ have PHP installed, you can download it from <http://www.php.net/>.
|
||||||
|
|
||||||
To install Arcanist, pick an install directory and clone the code from GitHub:
|
To install Arcanist, pick an install directory and clone the code from GitHub:
|
||||||
|
|
||||||
some_install_path/ $ git clone git://github.com/phacility/libphutil.git
|
some_install_path/ $ git clone https://github.com/phacility/libphutil.git
|
||||||
some_install_path/ $ git clone git://github.com/phacility/arcanist.git
|
some_install_path/ $ git clone https://github.com/phacility/arcanist.git
|
||||||
|
|
||||||
This should leave you with a directory structure like this
|
This should leave you with a directory structure like this
|
||||||
|
|
||||||
|
|
|
@ -23,8 +23,8 @@ Then install Arcanist itself:
|
||||||
|
|
||||||
$ mkdir somewhere/
|
$ mkdir somewhere/
|
||||||
$ cd somewhere/
|
$ cd somewhere/
|
||||||
somewhere/ $ git clone git://github.com/phacility/libphutil.git
|
somewhere/ $ git clone https://github.com/phacility/libphutil.git
|
||||||
somewhere/ $ git clone git://github.com/phacility/arcanist.git
|
somewhere/ $ git clone https://github.com/phacility/arcanist.git
|
||||||
|
|
||||||
Add `arc` to your path:
|
Add `arc` to your path:
|
||||||
|
|
||||||
|
|
|
@ -12,8 +12,7 @@ set -e
|
||||||
|
|
||||||
$MXMLC \
|
$MXMLC \
|
||||||
-output=$ROOT/webroot/rsrc/swf/aphlict.swf \
|
-output=$ROOT/webroot/rsrc/swf/aphlict.swf \
|
||||||
-default-background-color=0x444444 \
|
-strict=true \
|
||||||
-default-size=500,500 \
|
|
||||||
-warnings=true \
|
-warnings=true \
|
||||||
-source-path=$ROOT/externals/vegas/src \
|
-source-path=$ROOT/externals/vegas/src \
|
||||||
-static-link-runtime-shared-libraries=true \
|
-static-link-runtime-shared-libraries=true \
|
||||||
|
|
|
@ -659,9 +659,9 @@
|
||||||
margin-bottom: -1px;
|
margin-bottom: -1px;
|
||||||
}
|
}
|
||||||
|
|
||||||
.dashboard-panel .phui-object-list-cards .phui-object-item {
|
.dashboard-panel .phui-object-item-list-view .phui-object-item {
|
||||||
border-radius: 0;
|
border-radius: 0;
|
||||||
margin-bottom: 0;
|
margin: 0;
|
||||||
background-image: none;
|
background-image: none;
|
||||||
background-color: #fff;
|
background-color: #fff;
|
||||||
border-left-width: 4px;
|
border-left-width: 4px;
|
||||||
|
|
|
@ -41,7 +41,6 @@ JX.behavior('aphlict-listen', function(config) {
|
||||||
new JX.Notification()
|
new JX.Notification()
|
||||||
.setContent('(Aphlict) [' + type + '] ' + details)
|
.setContent('(Aphlict) [' + type + '] ' + details)
|
||||||
.alterClassName('jx-notification-debug', true)
|
.alterClassName('jx-notification-debug', true)
|
||||||
.setDuration(0)
|
|
||||||
.show();
|
.show();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -10,7 +10,13 @@ JX.behavior('phabricator-line-linker', function() {
|
||||||
var origin = null;
|
var origin = null;
|
||||||
var target = null;
|
var target = null;
|
||||||
var root = null;
|
var root = null;
|
||||||
var editor_link = JX.$('editor_link');
|
|
||||||
|
var editor_link = null;
|
||||||
|
try {
|
||||||
|
editor_link = JX.$('editor_link');
|
||||||
|
} catch (ex) {
|
||||||
|
// Ignore.
|
||||||
|
}
|
||||||
|
|
||||||
function getRowNumber(tr) {
|
function getRowNumber(tr) {
|
||||||
var th = JX.DOM.find(tr, 'th', 'phabricator-source-line');
|
var th = JX.DOM.find(tr, 'th', 'phabricator-source-line');
|
||||||
|
|
Loading…
Reference in a new issue