mirror of
https://we.phorge.it/source/phorge.git
synced 2024-12-15 10:00:55 +01:00
(stable) Promote 2017 Week 41
This commit is contained in:
commit
9365c6c999
175 changed files with 934 additions and 622 deletions
|
@ -8,9 +8,9 @@
|
||||||
return array(
|
return array(
|
||||||
'names' => array(
|
'names' => array(
|
||||||
'conpherence.pkg.css' => 'e68cf1fa',
|
'conpherence.pkg.css' => 'e68cf1fa',
|
||||||
'conpherence.pkg.js' => 'b5b51108',
|
'conpherence.pkg.js' => '15191c65',
|
||||||
'core.pkg.css' => '87a9a59b',
|
'core.pkg.css' => '1a4e0c25',
|
||||||
'core.pkg.js' => '28552e58',
|
'core.pkg.js' => '4c79d74f',
|
||||||
'darkconsole.pkg.js' => '1f9a31bc',
|
'darkconsole.pkg.js' => '1f9a31bc',
|
||||||
'differential.pkg.css' => '45951e9e',
|
'differential.pkg.css' => '45951e9e',
|
||||||
'differential.pkg.js' => 'b71b8c5d',
|
'differential.pkg.js' => 'b71b8c5d',
|
||||||
|
@ -151,13 +151,13 @@ return array(
|
||||||
'rsrc/css/phui/phui-curtain-view.css' => '2bdaf026',
|
'rsrc/css/phui/phui-curtain-view.css' => '2bdaf026',
|
||||||
'rsrc/css/phui/phui-document-pro.css' => '8af7ea27',
|
'rsrc/css/phui/phui-document-pro.css' => '8af7ea27',
|
||||||
'rsrc/css/phui/phui-document-summary.css' => '9ca48bdf',
|
'rsrc/css/phui/phui-document-summary.css' => '9ca48bdf',
|
||||||
'rsrc/css/phui/phui-document.css' => 'c32e8dec',
|
'rsrc/css/phui/phui-document.css' => '878c2f52',
|
||||||
'rsrc/css/phui/phui-feed-story.css' => '44a9c8e9',
|
'rsrc/css/phui/phui-feed-story.css' => '44a9c8e9',
|
||||||
'rsrc/css/phui/phui-fontkit.css' => '1320ed01',
|
'rsrc/css/phui/phui-fontkit.css' => '1320ed01',
|
||||||
'rsrc/css/phui/phui-form-view.css' => 'ae9f8d16',
|
'rsrc/css/phui/phui-form-view.css' => 'ae9f8d16',
|
||||||
'rsrc/css/phui/phui-form.css' => '7aaa04e3',
|
'rsrc/css/phui/phui-form.css' => '7aaa04e3',
|
||||||
'rsrc/css/phui/phui-head-thing.css' => 'fd311e5f',
|
'rsrc/css/phui/phui-head-thing.css' => 'fd311e5f',
|
||||||
'rsrc/css/phui/phui-header-view.css' => '67fab16d',
|
'rsrc/css/phui/phui-header-view.css' => '31dc6c72',
|
||||||
'rsrc/css/phui/phui-hovercard.css' => 'f0592bcf',
|
'rsrc/css/phui/phui-hovercard.css' => 'f0592bcf',
|
||||||
'rsrc/css/phui/phui-icon-set-selector.css' => '87db8fee',
|
'rsrc/css/phui/phui-icon-set-selector.css' => '87db8fee',
|
||||||
'rsrc/css/phui/phui-icon.css' => '5c4a5de6',
|
'rsrc/css/phui/phui-icon.css' => '5c4a5de6',
|
||||||
|
@ -384,8 +384,8 @@ return array(
|
||||||
'rsrc/js/application/conpherence/ConpherenceThreadManager.js' => '4d863052',
|
'rsrc/js/application/conpherence/ConpherenceThreadManager.js' => '4d863052',
|
||||||
'rsrc/js/application/conpherence/behavior-conpherence-search.js' => '9bbf3762',
|
'rsrc/js/application/conpherence/behavior-conpherence-search.js' => '9bbf3762',
|
||||||
'rsrc/js/application/conpherence/behavior-durable-column.js' => '2ae077e1',
|
'rsrc/js/application/conpherence/behavior-durable-column.js' => '2ae077e1',
|
||||||
'rsrc/js/application/conpherence/behavior-menu.js' => 'c9b99b77',
|
'rsrc/js/application/conpherence/behavior-menu.js' => '4047cd35',
|
||||||
'rsrc/js/application/conpherence/behavior-participant-pane.js' => '8604caa8',
|
'rsrc/js/application/conpherence/behavior-participant-pane.js' => 'd057e45a',
|
||||||
'rsrc/js/application/conpherence/behavior-pontificate.js' => '55616e04',
|
'rsrc/js/application/conpherence/behavior-pontificate.js' => '55616e04',
|
||||||
'rsrc/js/application/conpherence/behavior-quicksand-blacklist.js' => '7927a7d3',
|
'rsrc/js/application/conpherence/behavior-quicksand-blacklist.js' => '7927a7d3',
|
||||||
'rsrc/js/application/conpherence/behavior-toggle-widget.js' => '3dbf94d5',
|
'rsrc/js/application/conpherence/behavior-toggle-widget.js' => '3dbf94d5',
|
||||||
|
@ -403,7 +403,7 @@ return array(
|
||||||
'rsrc/js/application/differential/behavior-diff-radios.js' => 'e1ff79b1',
|
'rsrc/js/application/differential/behavior-diff-radios.js' => 'e1ff79b1',
|
||||||
'rsrc/js/application/differential/behavior-populate.js' => '419998ab',
|
'rsrc/js/application/differential/behavior-populate.js' => '419998ab',
|
||||||
'rsrc/js/application/differential/behavior-user-select.js' => 'a8d8459d',
|
'rsrc/js/application/differential/behavior-user-select.js' => 'a8d8459d',
|
||||||
'rsrc/js/application/diffusion/DiffusionLocateFileSource.js' => 'c93358e3',
|
'rsrc/js/application/diffusion/DiffusionLocateFileSource.js' => '00676f00',
|
||||||
'rsrc/js/application/diffusion/behavior-audit-preview.js' => 'd835b03a',
|
'rsrc/js/application/diffusion/behavior-audit-preview.js' => 'd835b03a',
|
||||||
'rsrc/js/application/diffusion/behavior-commit-branches.js' => 'bdaf4d04',
|
'rsrc/js/application/diffusion/behavior-commit-branches.js' => 'bdaf4d04',
|
||||||
'rsrc/js/application/diffusion/behavior-commit-graph.js' => '75b83cbb',
|
'rsrc/js/application/diffusion/behavior-commit-graph.js' => '75b83cbb',
|
||||||
|
@ -428,7 +428,7 @@ return array(
|
||||||
'rsrc/js/application/owners/owners-path-editor.js' => '7a68dda3',
|
'rsrc/js/application/owners/owners-path-editor.js' => '7a68dda3',
|
||||||
'rsrc/js/application/passphrase/passphrase-credential-control.js' => '3cb0b2fc',
|
'rsrc/js/application/passphrase/passphrase-credential-control.js' => '3cb0b2fc',
|
||||||
'rsrc/js/application/pholio/behavior-pholio-mock-edit.js' => 'bee502c8',
|
'rsrc/js/application/pholio/behavior-pholio-mock-edit.js' => 'bee502c8',
|
||||||
'rsrc/js/application/pholio/behavior-pholio-mock-view.js' => 'fbe497e7',
|
'rsrc/js/application/pholio/behavior-pholio-mock-view.js' => 'ec1f3669',
|
||||||
'rsrc/js/application/phortune/behavior-stripe-payment-form.js' => 'a6b98425',
|
'rsrc/js/application/phortune/behavior-stripe-payment-form.js' => 'a6b98425',
|
||||||
'rsrc/js/application/phortune/behavior-test-payment-form.js' => 'fc91ab6c',
|
'rsrc/js/application/phortune/behavior-test-payment-form.js' => 'fc91ab6c',
|
||||||
'rsrc/js/application/phortune/phortune-credit-card-form.js' => '2290aeef',
|
'rsrc/js/application/phortune/phortune-credit-card-form.js' => '2290aeef',
|
||||||
|
@ -468,7 +468,7 @@ return array(
|
||||||
'rsrc/js/core/KeyboardShortcutManager.js' => 'c19dd9b9',
|
'rsrc/js/core/KeyboardShortcutManager.js' => 'c19dd9b9',
|
||||||
'rsrc/js/core/MultirowRowManager.js' => 'b5d57730',
|
'rsrc/js/core/MultirowRowManager.js' => 'b5d57730',
|
||||||
'rsrc/js/core/Notification.js' => '008faf9c',
|
'rsrc/js/core/Notification.js' => '008faf9c',
|
||||||
'rsrc/js/core/Prefab.js' => 'c5af80a2',
|
'rsrc/js/core/Prefab.js' => '77b0ae28',
|
||||||
'rsrc/js/core/ShapedRequest.js' => '7cbe244b',
|
'rsrc/js/core/ShapedRequest.js' => '7cbe244b',
|
||||||
'rsrc/js/core/TextAreaUtils.js' => '320810c8',
|
'rsrc/js/core/TextAreaUtils.js' => '320810c8',
|
||||||
'rsrc/js/core/Title.js' => '485aaa6c',
|
'rsrc/js/core/Title.js' => '485aaa6c',
|
||||||
|
@ -480,7 +480,7 @@ return array(
|
||||||
'rsrc/js/core/behavior-choose-control.js' => '327a00d1',
|
'rsrc/js/core/behavior-choose-control.js' => '327a00d1',
|
||||||
'rsrc/js/core/behavior-copy.js' => 'b0b8f86d',
|
'rsrc/js/core/behavior-copy.js' => 'b0b8f86d',
|
||||||
'rsrc/js/core/behavior-detect-timezone.js' => '4c193c96',
|
'rsrc/js/core/behavior-detect-timezone.js' => '4c193c96',
|
||||||
'rsrc/js/core/behavior-device.js' => 'bb1dd507',
|
'rsrc/js/core/behavior-device.js' => 'a3714c76',
|
||||||
'rsrc/js/core/behavior-drag-and-drop-textarea.js' => '484a6e22',
|
'rsrc/js/core/behavior-drag-and-drop-textarea.js' => '484a6e22',
|
||||||
'rsrc/js/core/behavior-error-log.js' => '6882e80a',
|
'rsrc/js/core/behavior-error-log.js' => '6882e80a',
|
||||||
'rsrc/js/core/behavior-fancy-datepicker.js' => 'ecf4e799',
|
'rsrc/js/core/behavior-fancy-datepicker.js' => 'ecf4e799',
|
||||||
|
@ -527,9 +527,9 @@ return array(
|
||||||
'rsrc/js/phui/behavior-phui-tab-group.js' => '0a0b10e9',
|
'rsrc/js/phui/behavior-phui-tab-group.js' => '0a0b10e9',
|
||||||
'rsrc/js/phuix/PHUIXActionListView.js' => 'b5c256b8',
|
'rsrc/js/phuix/PHUIXActionListView.js' => 'b5c256b8',
|
||||||
'rsrc/js/phuix/PHUIXActionView.js' => '442efd08',
|
'rsrc/js/phuix/PHUIXActionView.js' => '442efd08',
|
||||||
'rsrc/js/phuix/PHUIXAutocomplete.js' => '4b7430ab',
|
'rsrc/js/phuix/PHUIXAutocomplete.js' => 'e0731603',
|
||||||
'rsrc/js/phuix/PHUIXButtonView.js' => '8a91e1ac',
|
'rsrc/js/phuix/PHUIXButtonView.js' => '8a91e1ac',
|
||||||
'rsrc/js/phuix/PHUIXDropdownMenu.js' => '8018ee50',
|
'rsrc/js/phuix/PHUIXDropdownMenu.js' => '04b2ae03',
|
||||||
'rsrc/js/phuix/PHUIXExample.js' => '68af71ca',
|
'rsrc/js/phuix/PHUIXExample.js' => '68af71ca',
|
||||||
'rsrc/js/phuix/PHUIXFormControl.js' => '83e03671',
|
'rsrc/js/phuix/PHUIXFormControl.js' => '83e03671',
|
||||||
'rsrc/js/phuix/PHUIXIconView.js' => 'bff6884b',
|
'rsrc/js/phuix/PHUIXIconView.js' => 'bff6884b',
|
||||||
|
@ -599,8 +599,8 @@ return array(
|
||||||
'javelin-behavior-choose-control' => '327a00d1',
|
'javelin-behavior-choose-control' => '327a00d1',
|
||||||
'javelin-behavior-comment-actions' => '9a6dd75c',
|
'javelin-behavior-comment-actions' => '9a6dd75c',
|
||||||
'javelin-behavior-config-reorder-fields' => 'b6993408',
|
'javelin-behavior-config-reorder-fields' => 'b6993408',
|
||||||
'javelin-behavior-conpherence-menu' => 'c9b99b77',
|
'javelin-behavior-conpherence-menu' => '4047cd35',
|
||||||
'javelin-behavior-conpherence-participant-pane' => '8604caa8',
|
'javelin-behavior-conpherence-participant-pane' => 'd057e45a',
|
||||||
'javelin-behavior-conpherence-pontificate' => '55616e04',
|
'javelin-behavior-conpherence-pontificate' => '55616e04',
|
||||||
'javelin-behavior-conpherence-search' => '9bbf3762',
|
'javelin-behavior-conpherence-search' => '9bbf3762',
|
||||||
'javelin-behavior-countdown-timer' => 'e4cc26b3',
|
'javelin-behavior-countdown-timer' => 'e4cc26b3',
|
||||||
|
@ -612,7 +612,7 @@ return array(
|
||||||
'javelin-behavior-day-view' => '4b3c4443',
|
'javelin-behavior-day-view' => '4b3c4443',
|
||||||
'javelin-behavior-desktop-notifications-control' => '27ca6289',
|
'javelin-behavior-desktop-notifications-control' => '27ca6289',
|
||||||
'javelin-behavior-detect-timezone' => '4c193c96',
|
'javelin-behavior-detect-timezone' => '4c193c96',
|
||||||
'javelin-behavior-device' => 'bb1dd507',
|
'javelin-behavior-device' => 'a3714c76',
|
||||||
'javelin-behavior-diff-preview-link' => '051c7832',
|
'javelin-behavior-diff-preview-link' => '051c7832',
|
||||||
'javelin-behavior-differential-diff-radios' => 'e1ff79b1',
|
'javelin-behavior-differential-diff-radios' => 'e1ff79b1',
|
||||||
'javelin-behavior-differential-feedback-preview' => '51c5ad07',
|
'javelin-behavior-differential-feedback-preview' => '51c5ad07',
|
||||||
|
@ -669,7 +669,7 @@ return array(
|
||||||
'javelin-behavior-phabricator-transaction-list' => '1f6794f6',
|
'javelin-behavior-phabricator-transaction-list' => '1f6794f6',
|
||||||
'javelin-behavior-phabricator-watch-anchor' => '9f36c42d',
|
'javelin-behavior-phabricator-watch-anchor' => '9f36c42d',
|
||||||
'javelin-behavior-pholio-mock-edit' => 'bee502c8',
|
'javelin-behavior-pholio-mock-edit' => 'bee502c8',
|
||||||
'javelin-behavior-pholio-mock-view' => 'fbe497e7',
|
'javelin-behavior-pholio-mock-view' => 'ec1f3669',
|
||||||
'javelin-behavior-phui-dropdown-menu' => 'b95d6f7d',
|
'javelin-behavior-phui-dropdown-menu' => 'b95d6f7d',
|
||||||
'javelin-behavior-phui-file-upload' => 'b003d4fb',
|
'javelin-behavior-phui-file-upload' => 'b003d4fb',
|
||||||
'javelin-behavior-phui-hovercards' => 'bcaccd64',
|
'javelin-behavior-phui-hovercards' => 'bcaccd64',
|
||||||
|
@ -709,7 +709,7 @@ return array(
|
||||||
'javelin-behavior-workflow' => '0a3f3021',
|
'javelin-behavior-workflow' => '0a3f3021',
|
||||||
'javelin-color' => '7e41274a',
|
'javelin-color' => '7e41274a',
|
||||||
'javelin-cookie' => '62dfea03',
|
'javelin-cookie' => '62dfea03',
|
||||||
'javelin-diffusion-locate-file-source' => 'c93358e3',
|
'javelin-diffusion-locate-file-source' => '00676f00',
|
||||||
'javelin-dom' => '4976858c',
|
'javelin-dom' => '4976858c',
|
||||||
'javelin-dynval' => 'f6555212',
|
'javelin-dynval' => 'f6555212',
|
||||||
'javelin-event' => '2ee659ce',
|
'javelin-event' => '2ee659ce',
|
||||||
|
@ -794,7 +794,7 @@ return array(
|
||||||
'phabricator-notification-menu-css' => '10685bd4',
|
'phabricator-notification-menu-css' => '10685bd4',
|
||||||
'phabricator-object-selector-css' => '85ee8ce6',
|
'phabricator-object-selector-css' => '85ee8ce6',
|
||||||
'phabricator-phtize' => 'd254d646',
|
'phabricator-phtize' => 'd254d646',
|
||||||
'phabricator-prefab' => 'c5af80a2',
|
'phabricator-prefab' => '77b0ae28',
|
||||||
'phabricator-remarkup-css' => 'cad18339',
|
'phabricator-remarkup-css' => 'cad18339',
|
||||||
'phabricator-search-results-css' => '505dd8cf',
|
'phabricator-search-results-css' => '505dd8cf',
|
||||||
'phabricator-shaped-request' => '7cbe244b',
|
'phabricator-shaped-request' => '7cbe244b',
|
||||||
|
@ -835,7 +835,7 @@ return array(
|
||||||
'phui-crumbs-view-css' => '6ece3bbb',
|
'phui-crumbs-view-css' => '6ece3bbb',
|
||||||
'phui-curtain-view-css' => '2bdaf026',
|
'phui-curtain-view-css' => '2bdaf026',
|
||||||
'phui-document-summary-view-css' => '9ca48bdf',
|
'phui-document-summary-view-css' => '9ca48bdf',
|
||||||
'phui-document-view-css' => 'c32e8dec',
|
'phui-document-view-css' => '878c2f52',
|
||||||
'phui-document-view-pro-css' => '8af7ea27',
|
'phui-document-view-pro-css' => '8af7ea27',
|
||||||
'phui-feed-story-css' => '44a9c8e9',
|
'phui-feed-story-css' => '44a9c8e9',
|
||||||
'phui-font-icon-base-css' => '870a7360',
|
'phui-font-icon-base-css' => '870a7360',
|
||||||
|
@ -843,7 +843,7 @@ return array(
|
||||||
'phui-form-css' => '7aaa04e3',
|
'phui-form-css' => '7aaa04e3',
|
||||||
'phui-form-view-css' => 'ae9f8d16',
|
'phui-form-view-css' => 'ae9f8d16',
|
||||||
'phui-head-thing-view-css' => 'fd311e5f',
|
'phui-head-thing-view-css' => 'fd311e5f',
|
||||||
'phui-header-view-css' => '67fab16d',
|
'phui-header-view-css' => '31dc6c72',
|
||||||
'phui-hovercard' => '1bd28176',
|
'phui-hovercard' => '1bd28176',
|
||||||
'phui-hovercard-view-css' => 'f0592bcf',
|
'phui-hovercard-view-css' => 'f0592bcf',
|
||||||
'phui-icon-set-selector-css' => '87db8fee',
|
'phui-icon-set-selector-css' => '87db8fee',
|
||||||
|
@ -879,9 +879,9 @@ return array(
|
||||||
'phui-workpanel-view-css' => 'a3a63478',
|
'phui-workpanel-view-css' => 'a3a63478',
|
||||||
'phuix-action-list-view' => 'b5c256b8',
|
'phuix-action-list-view' => 'b5c256b8',
|
||||||
'phuix-action-view' => '442efd08',
|
'phuix-action-view' => '442efd08',
|
||||||
'phuix-autocomplete' => '4b7430ab',
|
'phuix-autocomplete' => 'e0731603',
|
||||||
'phuix-button-view' => '8a91e1ac',
|
'phuix-button-view' => '8a91e1ac',
|
||||||
'phuix-dropdown-menu' => '8018ee50',
|
'phuix-dropdown-menu' => '04b2ae03',
|
||||||
'phuix-form-control-view' => '83e03671',
|
'phuix-form-control-view' => '83e03671',
|
||||||
'phuix-icon-view' => 'bff6884b',
|
'phuix-icon-view' => 'bff6884b',
|
||||||
'policy-css' => '957ea14c',
|
'policy-css' => '957ea14c',
|
||||||
|
@ -904,6 +904,12 @@ return array(
|
||||||
'unhandled-exception-css' => '4c96257a',
|
'unhandled-exception-css' => '4c96257a',
|
||||||
),
|
),
|
||||||
'requires' => array(
|
'requires' => array(
|
||||||
|
'00676f00' => array(
|
||||||
|
'javelin-install',
|
||||||
|
'javelin-dom',
|
||||||
|
'javelin-typeahead-preloaded-source',
|
||||||
|
'javelin-util',
|
||||||
|
),
|
||||||
'008faf9c' => array(
|
'008faf9c' => array(
|
||||||
'javelin-install',
|
'javelin-install',
|
||||||
'javelin-dom',
|
'javelin-dom',
|
||||||
|
@ -924,6 +930,13 @@ return array(
|
||||||
'javelin-dom',
|
'javelin-dom',
|
||||||
'phabricator-keyboard-shortcut',
|
'phabricator-keyboard-shortcut',
|
||||||
),
|
),
|
||||||
|
'04b2ae03' => array(
|
||||||
|
'javelin-install',
|
||||||
|
'javelin-util',
|
||||||
|
'javelin-dom',
|
||||||
|
'javelin-vector',
|
||||||
|
'javelin-stratcom',
|
||||||
|
),
|
||||||
'051c7832' => array(
|
'051c7832' => array(
|
||||||
'javelin-behavior',
|
'javelin-behavior',
|
||||||
'javelin-stratcom',
|
'javelin-stratcom',
|
||||||
|
@ -1142,6 +1155,20 @@ return array(
|
||||||
'3ffe32d6' => array(
|
'3ffe32d6' => array(
|
||||||
'javelin-install',
|
'javelin-install',
|
||||||
),
|
),
|
||||||
|
'4047cd35' => array(
|
||||||
|
'javelin-behavior',
|
||||||
|
'javelin-dom',
|
||||||
|
'javelin-util',
|
||||||
|
'javelin-stratcom',
|
||||||
|
'javelin-workflow',
|
||||||
|
'javelin-behavior-device',
|
||||||
|
'javelin-history',
|
||||||
|
'javelin-vector',
|
||||||
|
'javelin-scrollbar',
|
||||||
|
'phabricator-title',
|
||||||
|
'phabricator-shaped-request',
|
||||||
|
'conpherence-thread-manager',
|
||||||
|
),
|
||||||
'408bf173' => array(
|
'408bf173' => array(
|
||||||
'javelin-behavior',
|
'javelin-behavior',
|
||||||
'javelin-dom',
|
'javelin-dom',
|
||||||
|
@ -1232,12 +1259,6 @@ return array(
|
||||||
'javelin-util',
|
'javelin-util',
|
||||||
'phabricator-shaped-request',
|
'phabricator-shaped-request',
|
||||||
),
|
),
|
||||||
'4b7430ab' => array(
|
|
||||||
'javelin-install',
|
|
||||||
'javelin-dom',
|
|
||||||
'phuix-icon-view',
|
|
||||||
'phabricator-prefab',
|
|
||||||
),
|
|
||||||
'4c193c96' => array(
|
'4c193c96' => array(
|
||||||
'javelin-behavior',
|
'javelin-behavior',
|
||||||
'javelin-uri',
|
'javelin-uri',
|
||||||
|
@ -1471,6 +1492,18 @@ return array(
|
||||||
'javelin-reactor',
|
'javelin-reactor',
|
||||||
'javelin-util',
|
'javelin-util',
|
||||||
),
|
),
|
||||||
|
'77b0ae28' => array(
|
||||||
|
'javelin-install',
|
||||||
|
'javelin-util',
|
||||||
|
'javelin-dom',
|
||||||
|
'javelin-typeahead',
|
||||||
|
'javelin-tokenizer',
|
||||||
|
'javelin-typeahead-preloaded-source',
|
||||||
|
'javelin-typeahead-ondemand-source',
|
||||||
|
'javelin-dom',
|
||||||
|
'javelin-stratcom',
|
||||||
|
'javelin-util',
|
||||||
|
),
|
||||||
'77c1f0b0' => array(
|
'77c1f0b0' => array(
|
||||||
'javelin-behavior',
|
'javelin-behavior',
|
||||||
'javelin-dom',
|
'javelin-dom',
|
||||||
|
@ -1513,13 +1546,6 @@ return array(
|
||||||
'7f243deb' => array(
|
'7f243deb' => array(
|
||||||
'javelin-install',
|
'javelin-install',
|
||||||
),
|
),
|
||||||
'8018ee50' => array(
|
|
||||||
'javelin-install',
|
|
||||||
'javelin-util',
|
|
||||||
'javelin-dom',
|
|
||||||
'javelin-vector',
|
|
||||||
'javelin-stratcom',
|
|
||||||
),
|
|
||||||
'834a1173' => array(
|
'834a1173' => array(
|
||||||
'javelin-behavior',
|
'javelin-behavior',
|
||||||
'javelin-scrollbar',
|
'javelin-scrollbar',
|
||||||
|
@ -1536,15 +1562,6 @@ return array(
|
||||||
'85ee8ce6' => array(
|
'85ee8ce6' => array(
|
||||||
'aphront-dialog-view-css',
|
'aphront-dialog-view-css',
|
||||||
),
|
),
|
||||||
'8604caa8' => array(
|
|
||||||
'javelin-behavior',
|
|
||||||
'javelin-dom',
|
|
||||||
'javelin-stratcom',
|
|
||||||
'javelin-workflow',
|
|
||||||
'javelin-util',
|
|
||||||
'phabricator-notification',
|
|
||||||
'conpherence-thread-manager',
|
|
||||||
),
|
|
||||||
'88236f00' => array(
|
'88236f00' => array(
|
||||||
'javelin-behavior',
|
'javelin-behavior',
|
||||||
'phabricator-keyboard-shortcut',
|
'phabricator-keyboard-shortcut',
|
||||||
|
@ -1698,6 +1715,13 @@ return array(
|
||||||
'javelin-util',
|
'javelin-util',
|
||||||
'phabricator-keyboard-shortcut',
|
'phabricator-keyboard-shortcut',
|
||||||
),
|
),
|
||||||
|
'a3714c76' => array(
|
||||||
|
'javelin-behavior',
|
||||||
|
'javelin-stratcom',
|
||||||
|
'javelin-dom',
|
||||||
|
'javelin-vector',
|
||||||
|
'javelin-install',
|
||||||
|
),
|
||||||
'a3a63478' => array(
|
'a3a63478' => array(
|
||||||
'phui-workcard-view-css',
|
'phui-workcard-view-css',
|
||||||
),
|
),
|
||||||
|
@ -1835,13 +1859,6 @@ return array(
|
||||||
'javelin-uri',
|
'javelin-uri',
|
||||||
'phabricator-notification',
|
'phabricator-notification',
|
||||||
),
|
),
|
||||||
'bb1dd507' => array(
|
|
||||||
'javelin-behavior',
|
|
||||||
'javelin-stratcom',
|
|
||||||
'javelin-dom',
|
|
||||||
'javelin-vector',
|
|
||||||
'javelin-install',
|
|
||||||
),
|
|
||||||
'bcaccd64' => array(
|
'bcaccd64' => array(
|
||||||
'javelin-behavior',
|
'javelin-behavior',
|
||||||
'javelin-behavior-device',
|
'javelin-behavior-device',
|
||||||
|
@ -1901,18 +1918,6 @@ return array(
|
||||||
'c587b80f' => array(
|
'c587b80f' => array(
|
||||||
'javelin-install',
|
'javelin-install',
|
||||||
),
|
),
|
||||||
'c5af80a2' => array(
|
|
||||||
'javelin-install',
|
|
||||||
'javelin-util',
|
|
||||||
'javelin-dom',
|
|
||||||
'javelin-typeahead',
|
|
||||||
'javelin-tokenizer',
|
|
||||||
'javelin-typeahead-preloaded-source',
|
|
||||||
'javelin-typeahead-ondemand-source',
|
|
||||||
'javelin-dom',
|
|
||||||
'javelin-stratcom',
|
|
||||||
'javelin-util',
|
|
||||||
),
|
|
||||||
'c7ccd872' => array(
|
'c7ccd872' => array(
|
||||||
'phui-fontkit-css',
|
'phui-fontkit-css',
|
||||||
),
|
),
|
||||||
|
@ -1924,31 +1929,11 @@ return array(
|
||||||
'javelin-install',
|
'javelin-install',
|
||||||
'javelin-util',
|
'javelin-util',
|
||||||
),
|
),
|
||||||
'c93358e3' => array(
|
|
||||||
'javelin-install',
|
|
||||||
'javelin-dom',
|
|
||||||
'javelin-typeahead-preloaded-source',
|
|
||||||
'javelin-util',
|
|
||||||
),
|
|
||||||
'c989ade3' => array(
|
'c989ade3' => array(
|
||||||
'javelin-install',
|
'javelin-install',
|
||||||
'javelin-util',
|
'javelin-util',
|
||||||
'javelin-stratcom',
|
'javelin-stratcom',
|
||||||
),
|
),
|
||||||
'c9b99b77' => array(
|
|
||||||
'javelin-behavior',
|
|
||||||
'javelin-dom',
|
|
||||||
'javelin-util',
|
|
||||||
'javelin-stratcom',
|
|
||||||
'javelin-workflow',
|
|
||||||
'javelin-behavior-device',
|
|
||||||
'javelin-history',
|
|
||||||
'javelin-vector',
|
|
||||||
'javelin-scrollbar',
|
|
||||||
'phabricator-title',
|
|
||||||
'phabricator-shaped-request',
|
|
||||||
'conpherence-thread-manager',
|
|
||||||
),
|
|
||||||
'caade6f2' => array(
|
'caade6f2' => array(
|
||||||
'javelin-behavior',
|
'javelin-behavior',
|
||||||
'javelin-request',
|
'javelin-request',
|
||||||
|
@ -1966,6 +1951,15 @@ return array(
|
||||||
'cd2b9b77' => array(
|
'cd2b9b77' => array(
|
||||||
'phui-oi-list-view-css',
|
'phui-oi-list-view-css',
|
||||||
),
|
),
|
||||||
|
'd057e45a' => array(
|
||||||
|
'javelin-behavior',
|
||||||
|
'javelin-dom',
|
||||||
|
'javelin-stratcom',
|
||||||
|
'javelin-workflow',
|
||||||
|
'javelin-util',
|
||||||
|
'phabricator-notification',
|
||||||
|
'conpherence-thread-manager',
|
||||||
|
),
|
||||||
'd0a99ab4' => array(
|
'd0a99ab4' => array(
|
||||||
'javelin-behavior',
|
'javelin-behavior',
|
||||||
'javelin-typeahead-ondemand-source',
|
'javelin-typeahead-ondemand-source',
|
||||||
|
@ -2030,6 +2024,12 @@ return array(
|
||||||
'javelin-typeahead-ondemand-source',
|
'javelin-typeahead-ondemand-source',
|
||||||
'javelin-dom',
|
'javelin-dom',
|
||||||
),
|
),
|
||||||
|
'e0731603' => array(
|
||||||
|
'javelin-install',
|
||||||
|
'javelin-dom',
|
||||||
|
'phuix-icon-view',
|
||||||
|
'phabricator-prefab',
|
||||||
|
),
|
||||||
'e1d25dfb' => array(
|
'e1d25dfb' => array(
|
||||||
'javelin-behavior',
|
'javelin-behavior',
|
||||||
'javelin-stratcom',
|
'javelin-stratcom',
|
||||||
|
@ -2096,6 +2096,20 @@ return array(
|
||||||
'javelin-dom',
|
'javelin-dom',
|
||||||
'phabricator-draggable-list',
|
'phabricator-draggable-list',
|
||||||
),
|
),
|
||||||
|
'ec1f3669' => array(
|
||||||
|
'javelin-behavior',
|
||||||
|
'javelin-util',
|
||||||
|
'javelin-stratcom',
|
||||||
|
'javelin-dom',
|
||||||
|
'javelin-vector',
|
||||||
|
'javelin-magical-init',
|
||||||
|
'javelin-request',
|
||||||
|
'javelin-history',
|
||||||
|
'javelin-workflow',
|
||||||
|
'javelin-mask',
|
||||||
|
'javelin-behavior-device',
|
||||||
|
'phabricator-keyboard-shortcut',
|
||||||
|
),
|
||||||
'ecf4e799' => array(
|
'ecf4e799' => array(
|
||||||
'javelin-behavior',
|
'javelin-behavior',
|
||||||
'javelin-util',
|
'javelin-util',
|
||||||
|
@ -2144,20 +2158,6 @@ return array(
|
||||||
'javelin-install',
|
'javelin-install',
|
||||||
'javelin-dom',
|
'javelin-dom',
|
||||||
),
|
),
|
||||||
'fbe497e7' => array(
|
|
||||||
'javelin-behavior',
|
|
||||||
'javelin-util',
|
|
||||||
'javelin-stratcom',
|
|
||||||
'javelin-dom',
|
|
||||||
'javelin-vector',
|
|
||||||
'javelin-magical-init',
|
|
||||||
'javelin-request',
|
|
||||||
'javelin-history',
|
|
||||||
'javelin-workflow',
|
|
||||||
'javelin-mask',
|
|
||||||
'javelin-behavior-device',
|
|
||||||
'phabricator-keyboard-shortcut',
|
|
||||||
),
|
|
||||||
'fc91ab6c' => array(
|
'fc91ab6c' => array(
|
||||||
'javelin-behavior',
|
'javelin-behavior',
|
||||||
'javelin-dom',
|
'javelin-dom',
|
||||||
|
|
|
@ -5,7 +5,7 @@ $root = dirname(dirname(dirname(__FILE__)));
|
||||||
require_once $root.'/scripts/__init_script__.php';
|
require_once $root.'/scripts/__init_script__.php';
|
||||||
|
|
||||||
$args = new PhutilArgumentParser($argv);
|
$args = new PhutilArgumentParser($argv);
|
||||||
$args->setTagline(pht('manage garbage colletors'));
|
$args->setTagline(pht('manage garbage collectors'));
|
||||||
$args->setSynopsis(<<<EOSYNOPSIS
|
$args->setSynopsis(<<<EOSYNOPSIS
|
||||||
**garbage** __command__ [__options__]
|
**garbage** __command__ [__options__]
|
||||||
Manage garbage collectors.
|
Manage garbage collectors.
|
||||||
|
|
|
@ -204,20 +204,10 @@ abstract class AphrontApplicationConfiguration extends Phobject {
|
||||||
|
|
||||||
DarkConsoleXHProfPluginAPI::saveProfilerSample($access_log);
|
DarkConsoleXHProfPluginAPI::saveProfilerSample($access_log);
|
||||||
|
|
||||||
// Add points to the rate limits for this request.
|
PhabricatorStartup::disconnectRateLimits(
|
||||||
$rate_token = PhabricatorStartup::getRateLimitToken();
|
array(
|
||||||
if ($rate_token !== null) {
|
'viewer' => $request->getUser(),
|
||||||
// The base score for a request allows users to make 30 requests per
|
));
|
||||||
// minute.
|
|
||||||
$score = (1000 / 30);
|
|
||||||
|
|
||||||
// If the user was logged in, let them make more requests.
|
|
||||||
if ($request->getUser() && $request->getUser()->getPHID()) {
|
|
||||||
$score = $score / 5;
|
|
||||||
}
|
|
||||||
|
|
||||||
PhabricatorStartup::addRateLimitScore($rate_token, $score);
|
|
||||||
}
|
|
||||||
|
|
||||||
if ($processing_exception) {
|
if ($processing_exception) {
|
||||||
throw $processing_exception;
|
throw $processing_exception;
|
||||||
|
|
|
@ -15,26 +15,79 @@ class AphrontDefaultApplicationConfiguration
|
||||||
$parser = new PhutilQueryStringParser();
|
$parser = new PhutilQueryStringParser();
|
||||||
$data = array();
|
$data = array();
|
||||||
|
|
||||||
// If the request has "multipart/form-data" content, we can't use
|
|
||||||
// PhutilQueryStringParser to parse it, and the raw data supposedly is not
|
|
||||||
// available anyway (according to the PHP documentation, "php://input" is
|
|
||||||
// not available for "multipart/form-data" requests). However, it is
|
|
||||||
// available at least some of the time (see T3673), so double check that
|
|
||||||
// we aren't trying to parse data we won't be able to parse correctly by
|
|
||||||
// examining the Content-Type header.
|
|
||||||
$content_type = idx($_SERVER, 'CONTENT_TYPE');
|
|
||||||
$is_form_data = preg_match('@^multipart/form-data@i', $content_type);
|
|
||||||
|
|
||||||
$request_method = idx($_SERVER, 'REQUEST_METHOD');
|
$request_method = idx($_SERVER, 'REQUEST_METHOD');
|
||||||
if ($request_method === 'PUT') {
|
if ($request_method === 'PUT') {
|
||||||
// For PUT requests, do nothing: in particular, do NOT read input. This
|
// For PUT requests, do nothing: in particular, do NOT read input. This
|
||||||
// allows us to stream input later and process very large PUT requests,
|
// allows us to stream input later and process very large PUT requests,
|
||||||
// like those coming from Git LFS.
|
// like those coming from Git LFS.
|
||||||
} else {
|
} else {
|
||||||
|
// For POST requests, we're going to read the raw input ourselves here
|
||||||
|
// if we can. Among other things, this corrects variable names with
|
||||||
|
// the "." character in them, which PHP normally converts into "_".
|
||||||
|
|
||||||
|
// There are two major considerations here: whether the
|
||||||
|
// `enable_post_data_reading` option is set, and whether the content
|
||||||
|
// type is "multipart/form-data" or not.
|
||||||
|
|
||||||
|
// If `enable_post_data_reading` is off, we're free to read the entire
|
||||||
|
// raw request body and parse it -- and we must, because $_POST and
|
||||||
|
// $_FILES are not built for us. If `enable_post_data_reading` is on,
|
||||||
|
// which is the default, we may not be able to read the body (the
|
||||||
|
// documentation says we can't, but empirically we can at least some
|
||||||
|
// of the time).
|
||||||
|
|
||||||
|
// If the content type is "multipart/form-data", we need to build both
|
||||||
|
// $_POST and $_FILES, which is involved. The body itself is also more
|
||||||
|
// difficult to parse than other requests.
|
||||||
$raw_input = PhabricatorStartup::getRawInput();
|
$raw_input = PhabricatorStartup::getRawInput();
|
||||||
if (strlen($raw_input) && !$is_form_data) {
|
if (strlen($raw_input)) {
|
||||||
$data += $parser->parseQueryString($raw_input);
|
$content_type = idx($_SERVER, 'CONTENT_TYPE');
|
||||||
|
$is_multipart = preg_match('@^multipart/form-data@i', $content_type);
|
||||||
|
if ($is_multipart && !ini_get('enable_post_data_reading')) {
|
||||||
|
$multipart_parser = id(new AphrontMultipartParser())
|
||||||
|
->setContentType($content_type);
|
||||||
|
|
||||||
|
$multipart_parser->beginParse();
|
||||||
|
$multipart_parser->continueParse($raw_input);
|
||||||
|
$parts = $multipart_parser->endParse();
|
||||||
|
|
||||||
|
$query_string = array();
|
||||||
|
foreach ($parts as $part) {
|
||||||
|
if (!$part->isVariable()) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
$name = $part->getName();
|
||||||
|
$value = $part->getVariableValue();
|
||||||
|
|
||||||
|
$query_string[] = urlencode($name).'='.urlencode($value);
|
||||||
|
}
|
||||||
|
$query_string = implode('&', $query_string);
|
||||||
|
$post = $parser->parseQueryString($query_string);
|
||||||
|
|
||||||
|
$files = array();
|
||||||
|
foreach ($parts as $part) {
|
||||||
|
if ($part->isVariable()) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
$files[$part->getName()] = $part->getPHPFileDictionary();
|
||||||
|
}
|
||||||
|
$_FILES = $files;
|
||||||
|
} else {
|
||||||
|
$post = $parser->parseQueryString($raw_input);
|
||||||
|
}
|
||||||
|
|
||||||
|
$_POST = $post;
|
||||||
|
PhabricatorStartup::rebuildRequest();
|
||||||
|
|
||||||
|
$data += $post;
|
||||||
} else if ($_POST) {
|
} else if ($_POST) {
|
||||||
|
$post = filter_input_array(INPUT_POST, FILTER_UNSAFE_RAW);
|
||||||
|
if (is_array($post)) {
|
||||||
|
$_POST = $post;
|
||||||
|
PhabricatorStartup::rebuildRequest();
|
||||||
|
}
|
||||||
$data += $_POST;
|
$data += $_POST;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -160,7 +160,7 @@ abstract class AphrontHTTPParameterType extends Phobject {
|
||||||
/**
|
/**
|
||||||
* Call another type's existence check.
|
* Call another type's existence check.
|
||||||
*
|
*
|
||||||
* This method allows a type to reuse the exitence behavior of a different
|
* This method allows a type to reuse the existence behavior of a different
|
||||||
* type. For example, a "list of users" type may have the same basic
|
* type. For example, a "list of users" type may have the same basic
|
||||||
* existence check that a simpler "list of strings" type has, and can just
|
* existence check that a simpler "list of strings" type has, and can just
|
||||||
* call the simpler type to reuse its behavior.
|
* call the simpler type to reuse its behavior.
|
||||||
|
|
|
@ -204,7 +204,7 @@ final class AlmanacDeviceEditor
|
||||||
$xaction);
|
$xaction);
|
||||||
$errors[] = $error;
|
$errors[] = $error;
|
||||||
} else {
|
} else {
|
||||||
// TODO: Validate addresses, but IPv6 addresses are not trival
|
// TODO: Validate addresses, but IPv6 addresses are not trivial
|
||||||
// to validate.
|
// to validate.
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -63,7 +63,7 @@ final class PhabricatorAuditListView extends AphrontView {
|
||||||
return $summary;
|
return $summary;
|
||||||
}
|
}
|
||||||
|
|
||||||
// No summary, so either this is still impoting or just has an empty
|
// No summary, so either this is still importing or just has an empty
|
||||||
// commit message.
|
// commit message.
|
||||||
|
|
||||||
if (!$commit->isImported()) {
|
if (!$commit->isImported()) {
|
||||||
|
|
|
@ -134,7 +134,7 @@ abstract class PhabricatorAuthController extends PhabricatorController {
|
||||||
// checks later on to make sure this account is valid for the intended
|
// checks later on to make sure this account is valid for the intended
|
||||||
// operation. This requires edit permission for completeness and consistency
|
// operation. This requires edit permission for completeness and consistency
|
||||||
// but it won't actually be meaningfully checked because we're using the
|
// but it won't actually be meaningfully checked because we're using the
|
||||||
// ominpotent user.
|
// omnipotent user.
|
||||||
|
|
||||||
$account = id(new PhabricatorExternalAccountQuery())
|
$account = id(new PhabricatorExternalAccountQuery())
|
||||||
->setViewer(PhabricatorUser::getOmnipotentUser())
|
->setViewer(PhabricatorUser::getOmnipotentUser())
|
||||||
|
|
|
@ -79,7 +79,7 @@ final class PhabricatorAuthRegisterController
|
||||||
}
|
}
|
||||||
|
|
||||||
if ($default_email !== null) {
|
if ($default_email !== null) {
|
||||||
// We should bypass policy here becase e.g. limiting an application use
|
// We should bypass policy here because e.g. limiting an application use
|
||||||
// to a subset of users should not allow the others to overwrite
|
// to a subset of users should not allow the others to overwrite
|
||||||
// configured application emails.
|
// configured application emails.
|
||||||
$application_email = id(new PhabricatorMetaMTAApplicationEmailQuery())
|
$application_email = id(new PhabricatorMetaMTAApplicationEmailQuery())
|
||||||
|
|
|
@ -226,7 +226,7 @@ final class PhabricatorAuthSSHKeyEditor
|
||||||
->addHeader('Thread-Topic', $phid);
|
->addHeader('Thread-Topic', $phid);
|
||||||
|
|
||||||
// The primary value of this mail is alerting users to account compromises,
|
// The primary value of this mail is alerting users to account compromises,
|
||||||
// so force delivery. In particular, this mail should still be delievered
|
// so force delivery. In particular, this mail should still be delivered
|
||||||
// even if "self mail" is disabled.
|
// even if "self mail" is disabled.
|
||||||
$mail->setForceDelivery(true);
|
$mail->setForceDelivery(true);
|
||||||
|
|
||||||
|
|
|
@ -51,7 +51,7 @@ final class PhabricatorAuthInviteTestCase extends PhabricatorTestCase {
|
||||||
$caught = $ex;
|
$caught = $ex;
|
||||||
}
|
}
|
||||||
|
|
||||||
// This first time should accept the invite and verify the addresss.
|
// This first time should accept the invite and verify the address.
|
||||||
$this->assertTrue(
|
$this->assertTrue(
|
||||||
($caught instanceof PhabricatorAuthInviteRegisteredException));
|
($caught instanceof PhabricatorAuthInviteRegisteredException));
|
||||||
|
|
||||||
|
|
|
@ -74,7 +74,7 @@ final class PhabricatorAuthManagementRevokeWorkflow
|
||||||
if (!strlen($from) && !$is_everywhere) {
|
if (!strlen($from) && !$is_everywhere) {
|
||||||
throw new PhutilArgumentUsageException(
|
throw new PhutilArgumentUsageException(
|
||||||
pht(
|
pht(
|
||||||
'Specify the target to revoke credentals from with "--from" or '.
|
'Specify the target to revoke credentials from with "--from" or '.
|
||||||
'specify "--everywhere".'));
|
'specify "--everywhere".'));
|
||||||
} else if (strlen($from) && $is_everywhere) {
|
} else if (strlen($from) && $is_everywhere) {
|
||||||
throw new PhutilArgumentUsageException(
|
throw new PhutilArgumentUsageException(
|
||||||
|
|
|
@ -192,6 +192,7 @@ final class PhabricatorLDAPAuthProvider extends PhabricatorAuthProvider {
|
||||||
const KEY_VERSION = 'ldap:version';
|
const KEY_VERSION = 'ldap:version';
|
||||||
const KEY_REFERRALS = 'ldap:referrals';
|
const KEY_REFERRALS = 'ldap:referrals';
|
||||||
const KEY_START_TLS = 'ldap:start-tls';
|
const KEY_START_TLS = 'ldap:start-tls';
|
||||||
|
// TODO: This is misspelled! See T13005.
|
||||||
const KEY_ANONYMOUS_USERNAME = 'ldap:anoynmous-username';
|
const KEY_ANONYMOUS_USERNAME = 'ldap:anoynmous-username';
|
||||||
const KEY_ANONYMOUS_PASSWORD = 'ldap:anonymous-password';
|
const KEY_ANONYMOUS_PASSWORD = 'ldap:anonymous-password';
|
||||||
const KEY_ALWAYS_SEARCH = 'ldap:always-search';
|
const KEY_ALWAYS_SEARCH = 'ldap:always-search';
|
||||||
|
|
|
@ -270,7 +270,7 @@ abstract class PhabricatorOAuth1AuthProvider
|
||||||
}
|
}
|
||||||
|
|
||||||
private function getHandshakeTokenKeyFromClientCode($client_code) {
|
private function getHandshakeTokenKeyFromClientCode($client_code) {
|
||||||
// NOTE: This is very slightly coersive since the TemporaryToken table
|
// NOTE: This is very slightly coercive since the TemporaryToken table
|
||||||
// expects an "objectPHID" as an identifier, but nothing about the storage
|
// expects an "objectPHID" as an identifier, but nothing about the storage
|
||||||
// is bound to PHIDs.
|
// is bound to PHIDs.
|
||||||
|
|
||||||
|
|
|
@ -108,7 +108,7 @@ abstract class PhabricatorApplication
|
||||||
*
|
*
|
||||||
* Launchable applications can be pinned to the home page, and show up in the
|
* Launchable applications can be pinned to the home page, and show up in the
|
||||||
* "Launcher" view of the Applications application. Making an application
|
* "Launcher" view of the Applications application. Making an application
|
||||||
* unlauncahble prevents pinning and hides it from this view.
|
* unlaunchable prevents pinning and hides it from this view.
|
||||||
*
|
*
|
||||||
* Usually, an application should be marked unlaunchable if:
|
* Usually, an application should be marked unlaunchable if:
|
||||||
*
|
*
|
||||||
|
|
|
@ -552,7 +552,7 @@ abstract class PhabricatorController extends AphrontController {
|
||||||
|
|
||||||
|
|
||||||
public function buildApplicationCrumbsForEditEngine() {
|
public function buildApplicationCrumbsForEditEngine() {
|
||||||
// TODO: This is kind of gross, I'm bascially just making this public so
|
// TODO: This is kind of gross, I'm basically just making this public so
|
||||||
// I can use it in EditEngine. We could do this without making it public
|
// I can use it in EditEngine. We could do this without making it public
|
||||||
// by using controller delegation, or make it properly public.
|
// by using controller delegation, or make it properly public.
|
||||||
return $this->buildApplicationCrumbs();
|
return $this->buildApplicationCrumbs();
|
||||||
|
|
|
@ -10,7 +10,7 @@ final class PhabricatorAccessControlTestCase extends PhabricatorTestCase {
|
||||||
|
|
||||||
public function testControllerAccessControls() {
|
public function testControllerAccessControls() {
|
||||||
$root = dirname(phutil_get_library_root('phabricator'));
|
$root = dirname(phutil_get_library_root('phabricator'));
|
||||||
require_once $root.'/support/PhabricatorStartup.php';
|
require_once $root.'/support/startup/PhabricatorStartup.php';
|
||||||
|
|
||||||
$application_configuration = new AphrontDefaultApplicationConfiguration();
|
$application_configuration = new AphrontDefaultApplicationConfiguration();
|
||||||
|
|
||||||
|
|
|
@ -134,7 +134,7 @@ final class PhabricatorCalendarImportEditEngine
|
||||||
$fields[] = id(new PhabricatorSelectEditField())
|
$fields[] = id(new PhabricatorSelectEditField())
|
||||||
->setKey('frequency')
|
->setKey('frequency')
|
||||||
->setLabel(pht('Update Automatically'))
|
->setLabel(pht('Update Automatically'))
|
||||||
->setDescription(pht('Configure an automatic update frequncy.'))
|
->setDescription(pht('Configure an automatic update frequency.'))
|
||||||
->setTransactionType(
|
->setTransactionType(
|
||||||
PhabricatorCalendarImportFrequencyTransaction::TRANSACTIONTYPE)
|
PhabricatorCalendarImportFrequencyTransaction::TRANSACTIONTYPE)
|
||||||
->setConduitDescription(pht('Set the automatic update frequency.'))
|
->setConduitDescription(pht('Set the automatic update frequency.'))
|
||||||
|
|
|
@ -16,7 +16,7 @@ final class PhabricatorCalendarIconSet
|
||||||
'fa-plane' => pht('Travel'),
|
'fa-plane' => pht('Travel'),
|
||||||
'fa-plus-square' => pht('Health / Appointment'),
|
'fa-plus-square' => pht('Health / Appointment'),
|
||||||
|
|
||||||
'fa-rocket' => pht('Sabatical / Leave'),
|
'fa-rocket' => pht('Sabbatical / Leave'),
|
||||||
'fa-home' => pht('Working From Home'),
|
'fa-home' => pht('Working From Home'),
|
||||||
'fa-tree' => pht('Holiday'),
|
'fa-tree' => pht('Holiday'),
|
||||||
'fa-gamepad' => pht('Staycation'),
|
'fa-gamepad' => pht('Staycation'),
|
||||||
|
|
|
@ -8,7 +8,7 @@
|
||||||
* calendar views - one for the conpherence calendar widget and one for the
|
* calendar views - one for the conpherence calendar widget and one for the
|
||||||
* user profile calendar view. These have slight differences such as
|
* user profile calendar view. These have slight differences such as
|
||||||
* conpherence showing both a three day "today 'til 2 days from now" *and*
|
* conpherence showing both a three day "today 'til 2 days from now" *and*
|
||||||
* a Sunday -> Saturday list, whilest the profile view shows a more simple
|
* a Sunday -> Saturday list, whilst the profile view shows a more simple
|
||||||
* seven day rolling list of events.
|
* seven day rolling list of events.
|
||||||
*/
|
*/
|
||||||
final class CalendarTimeUtil extends Phobject {
|
final class CalendarTimeUtil extends Phobject {
|
||||||
|
|
|
@ -23,7 +23,7 @@ final class PhabricatorCalendarEventFrequencyTransaction
|
||||||
// month, it means "the 30th of every month" as far as the RRULE is
|
// month, it means "the 30th of every month" as far as the RRULE is
|
||||||
// concerned. Such an event will not occur on months with fewer days.
|
// concerned. Such an event will not occur on months with fewer days.
|
||||||
|
|
||||||
// This is surprising, and proably not what the user wants. Instead,
|
// This is surprising, and probably not what the user wants. Instead,
|
||||||
// schedule these events relative to the end of the month: on the "-1st",
|
// schedule these events relative to the end of the month: on the "-1st",
|
||||||
// "-2nd" or "-3rd" day of the month. For example, a monthly event on
|
// "-2nd" or "-3rd" day of the month. For example, a monthly event on
|
||||||
// the 31st of a 31-day month translates to "every month, on the last
|
// the 31st of a 31-day month translates to "every month, on the last
|
||||||
|
@ -66,7 +66,7 @@ final class PhabricatorCalendarEventFrequencyTransaction
|
||||||
if (!isset($valid[$value])) {
|
if (!isset($valid[$value])) {
|
||||||
$errors[] = $this->newInvalidError(
|
$errors[] = $this->newInvalidError(
|
||||||
pht(
|
pht(
|
||||||
'Event frequency "%s" is not valid. Valid frequences are: %s.',
|
'Event frequency "%s" is not valid. Valid frequencies are: %s.',
|
||||||
$value,
|
$value,
|
||||||
implode(', ', $valid)),
|
implode(', ', $valid)),
|
||||||
$xaction);
|
$xaction);
|
||||||
|
|
|
@ -132,7 +132,7 @@ final class PhabricatorCalendarEventInviteTransaction
|
||||||
$this->renderHandleList($rem));
|
$this->renderHandleList($rem));
|
||||||
} else {
|
} else {
|
||||||
return pht(
|
return pht(
|
||||||
'%s invited %s attendee(s): %s; uninvinted %s attendee(s): %s.',
|
'%s invited %s attendee(s): %s; uninvited %s attendee(s): %s.',
|
||||||
$this->renderAuthor(),
|
$this->renderAuthor(),
|
||||||
phutil_count($add),
|
phutil_count($add),
|
||||||
$this->renderHandleList($add),
|
$this->renderHandleList($add),
|
||||||
|
@ -161,7 +161,7 @@ final class PhabricatorCalendarEventInviteTransaction
|
||||||
} else {
|
} else {
|
||||||
return pht(
|
return pht(
|
||||||
'%s updated the invite list for %s, invited %s: %s; '.
|
'%s updated the invite list for %s, invited %s: %s; '.
|
||||||
'uninvinted %s: %s.',
|
'uninvited %s: %s.',
|
||||||
$this->renderAuthor(),
|
$this->renderAuthor(),
|
||||||
$this->renderObject(),
|
$this->renderObject(),
|
||||||
phutil_count($add),
|
phutil_count($add),
|
||||||
|
|
|
@ -32,7 +32,7 @@ final class PhabricatorCalendarImportFrequencyTransaction
|
||||||
if (!isset($valid[$value])) {
|
if (!isset($valid[$value])) {
|
||||||
$errors[] = $this->newInvalidError(
|
$errors[] = $this->newInvalidError(
|
||||||
pht(
|
pht(
|
||||||
'Import frequency "%s" is not valid. Valid frequences are: %s.',
|
'Import frequency "%s" is not valid. Valid frequencies are: %s.',
|
||||||
$value,
|
$value,
|
||||||
implode(', ', $valid)),
|
implode(', ', $valid)),
|
||||||
$xaction);
|
$xaction);
|
||||||
|
|
|
@ -85,7 +85,7 @@ final class PhabricatorStorageSetupCheck extends PhabricatorSetupCheck {
|
||||||
'be buffered into memory before being written to permanent '.
|
'be buffered into memory before being written to permanent '.
|
||||||
'storage. Phabricator needs memory available to store these '.
|
'storage. Phabricator needs memory available to store these '.
|
||||||
'chunks while they are uploaded, but PHP is currently configured '.
|
'chunks while they are uploaded, but PHP is currently configured '.
|
||||||
'to severly limit the available memory.'.
|
'to severely limit the available memory.'.
|
||||||
"\n\n".
|
"\n\n".
|
||||||
'PHP processes currently have very little free memory available '.
|
'PHP processes currently have very little free memory available '.
|
||||||
'(%s). To work well, processes should have at least %s.'.
|
'(%s). To work well, processes should have at least %s.'.
|
||||||
|
|
|
@ -81,12 +81,15 @@ abstract class PhabricatorConfigSchemaSpec extends Phobject {
|
||||||
$engine->getNgramsSchemaKeys(),
|
$engine->getNgramsSchemaKeys(),
|
||||||
$index_options);
|
$index_options);
|
||||||
|
|
||||||
|
// NOTE: The common ngrams table is not marked as an index table. It is
|
||||||
|
// tiny and persisting it across a restore saves us a lot of work garbage
|
||||||
|
// collecting common ngrams from the index after it gets built.
|
||||||
|
|
||||||
$this->buildRawSchema(
|
$this->buildRawSchema(
|
||||||
$engine->getApplicationName(),
|
$engine->getApplicationName(),
|
||||||
$engine->getCommonNgramsTableName(),
|
$engine->getCommonNgramsTableName(),
|
||||||
$engine->getCommonNgramsSchemaColumns(),
|
$engine->getCommonNgramsSchemaColumns(),
|
||||||
$engine->getCommonNgramsSchemaKeys(),
|
$engine->getCommonNgramsSchemaKeys());
|
||||||
$index_options);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
protected function buildRawSchema(
|
protected function buildRawSchema(
|
||||||
|
|
|
@ -290,7 +290,7 @@ final class ConpherenceThreadQuery
|
||||||
->withObjectPHIDs(array_keys($conpherences))
|
->withObjectPHIDs(array_keys($conpherences))
|
||||||
->needHandles(true);
|
->needHandles(true);
|
||||||
|
|
||||||
// We have to flip these for the underyling query class. The semantics of
|
// We have to flip these for the underlying query class. The semantics of
|
||||||
// paging are tricky business.
|
// paging are tricky business.
|
||||||
if ($this->afterTransactionID) {
|
if ($this->afterTransactionID) {
|
||||||
$query->setBeforeID($this->afterTransactionID);
|
$query->setBeforeID($this->afterTransactionID);
|
||||||
|
|
|
@ -78,7 +78,7 @@ final class PhabricatorDashboardPanelTabsCustomField
|
||||||
|
|
||||||
public function renderEditControl(array $handles) {
|
public function renderEditControl(array $handles) {
|
||||||
// NOTE: This includes archived panels so we don't mutate the tabs
|
// NOTE: This includes archived panels so we don't mutate the tabs
|
||||||
// when saving a tab panel that includes archied panels. This whole UI is
|
// when saving a tab panel that includes archived panels. This whole UI is
|
||||||
// hopefully temporary anyway.
|
// hopefully temporary anyway.
|
||||||
|
|
||||||
$value = $this->getFieldValue();
|
$value = $this->getFieldValue();
|
||||||
|
|
|
@ -217,7 +217,7 @@ abstract class DifferentialController extends PhabricatorController {
|
||||||
// by default and let the user toggle the rest. With modern messages,
|
// by default and let the user toggle the rest. With modern messages,
|
||||||
// we can send the user to the Harbormaster detail page. Just show
|
// we can send the user to the Harbormaster detail page. Just show
|
||||||
// "a lot" of messages in legacy cases to try to strike a balance
|
// "a lot" of messages in legacy cases to try to strike a balance
|
||||||
// between implementation simplicitly and compatibility.
|
// between implementation simplicity and compatibility.
|
||||||
$legacy_messages = array_slice($legacy_messages, 0, 100);
|
$legacy_messages = array_slice($legacy_messages, 0, 100);
|
||||||
|
|
||||||
$messages = array();
|
$messages = array();
|
||||||
|
|
|
@ -45,7 +45,7 @@ abstract class DifferentialHarbormasterField
|
||||||
// by default and let the user toggle the rest. With modern messages,
|
// by default and let the user toggle the rest. With modern messages,
|
||||||
// we can send the user to the Harbormaster detail page. Just show
|
// we can send the user to the Harbormaster detail page. Just show
|
||||||
// "a lot" of messages in legacy cases to try to strike a balance
|
// "a lot" of messages in legacy cases to try to strike a balance
|
||||||
// between implementation simplicitly and compatibility.
|
// between implementation simplicity and compatibility.
|
||||||
$legacy_messages = array_slice($legacy_messages, 0, 100);
|
$legacy_messages = array_slice($legacy_messages, 0, 100);
|
||||||
|
|
||||||
foreach ($legacy_messages as $message) {
|
foreach ($legacy_messages as $message) {
|
||||||
|
|
|
@ -106,7 +106,7 @@ final class DifferentialDiffEditor
|
||||||
* We run Herald as part of transaction validation because Herald can
|
* We run Herald as part of transaction validation because Herald can
|
||||||
* block diff creation for Differential diffs. Its important to do this
|
* block diff creation for Differential diffs. Its important to do this
|
||||||
* separately so no Herald logs are saved; these logs could expose
|
* separately so no Herald logs are saved; these logs could expose
|
||||||
* information the Herald rules are inteneded to block.
|
* information the Herald rules are intended to block.
|
||||||
*/
|
*/
|
||||||
protected function validateTransaction(
|
protected function validateTransaction(
|
||||||
PhabricatorLiskDAO $object,
|
PhabricatorLiskDAO $object,
|
||||||
|
|
|
@ -699,7 +699,7 @@ final class DifferentialChangesetParser extends Phobject {
|
||||||
$hunk_parser->parseHunksForLineData($changeset->getHunks());
|
$hunk_parser->parseHunksForLineData($changeset->getHunks());
|
||||||
|
|
||||||
// Depending on the whitespace mode, we may need to compute a different
|
// Depending on the whitespace mode, we may need to compute a different
|
||||||
// set of changes than the set of changes in the hunk data (specificaly,
|
// set of changes than the set of changes in the hunk data (specifically,
|
||||||
// we might want to consider changed lines which have only whitespace
|
// we might want to consider changed lines which have only whitespace
|
||||||
// changes as unchanged).
|
// changes as unchanged).
|
||||||
if ($ignore_all) {
|
if ($ignore_all) {
|
||||||
|
@ -1192,11 +1192,11 @@ final class DifferentialChangesetParser extends Phobject {
|
||||||
* Mask - compute the actual lines that need to be shown (because they
|
* Mask - compute the actual lines that need to be shown (because they
|
||||||
* are near changes lines, near inline comments, or the request has
|
* are near changes lines, near inline comments, or the request has
|
||||||
* explicitly asked for them, i.e. resulting from the user clicking
|
* explicitly asked for them, i.e. resulting from the user clicking
|
||||||
* "show more"). The $mask returned is a sparesely populated dictionary
|
* "show more"). The $mask returned is a sparsely populated dictionary
|
||||||
* of $visible_line_number => true.
|
* of $visible_line_number => true.
|
||||||
*
|
*
|
||||||
* Depths - compute how indented any given line is. The $depths returned
|
* Depths - compute how indented any given line is. The $depths returned
|
||||||
* is a sparesely populated dictionary of $visible_line_number => $depth.
|
* is a sparsely populated dictionary of $visible_line_number => $depth.
|
||||||
*
|
*
|
||||||
* This function also has the side effect of modifying member variable
|
* This function also has the side effect of modifying member variable
|
||||||
* new such that tabs are normalized to spaces for each line of the diff.
|
* new such that tabs are normalized to spaces for each line of the diff.
|
||||||
|
|
|
@ -128,7 +128,7 @@ final class DifferentialModernHunk extends DifferentialHunk {
|
||||||
$this->setData($file->getPHID());
|
$this->setData($file->getPHID());
|
||||||
|
|
||||||
// NOTE: Because hunks don't have a PHID and we just load hunk data with
|
// NOTE: Because hunks don't have a PHID and we just load hunk data with
|
||||||
// the ominipotent viewer, we do not need to attach the file to anything.
|
// the omnipotent viewer, we do not need to attach the file to anything.
|
||||||
|
|
||||||
$result = $this->save();
|
$result = $this->save();
|
||||||
|
|
||||||
|
|
|
@ -442,7 +442,7 @@ final class DifferentialRevision extends DifferentialDAO
|
||||||
|
|
||||||
// For each path which the viewer owns a package for, find other packages
|
// For each path which the viewer owns a package for, find other packages
|
||||||
// which that authority can be used to force-accept. Once we find a way to
|
// which that authority can be used to force-accept. Once we find a way to
|
||||||
// force-accept a package, we don't need to keep loooking.
|
// force-accept a package, we don't need to keep looking.
|
||||||
$has_control = array();
|
$has_control = array();
|
||||||
foreach ($force_map as $path => $spec) {
|
foreach ($force_map as $path => $spec) {
|
||||||
$path_fragments = PhabricatorOwnersPackage::splitPath($path);
|
$path_fragments = PhabricatorOwnersPackage::splitPath($path);
|
||||||
|
@ -891,7 +891,7 @@ final class DifferentialRevision extends DifferentialDAO
|
||||||
self::TABLE_COMMIT,
|
self::TABLE_COMMIT,
|
||||||
$this->getID());
|
$this->getID());
|
||||||
|
|
||||||
// we have to do paths a little differentally as they do not have
|
// we have to do paths a little differently as they do not have
|
||||||
// an id or phid column for delete() to act on
|
// an id or phid column for delete() to act on
|
||||||
$dummy_path = new DifferentialAffectedPath();
|
$dummy_path = new DifferentialAffectedPath();
|
||||||
queryfx(
|
queryfx(
|
||||||
|
|
|
@ -22,7 +22,7 @@ final class DifferentialResponsibleViewerFunctionDatasource
|
||||||
'summary' => pht('Use the current viewing user.'),
|
'summary' => pht('Use the current viewing user.'),
|
||||||
'description' => pht(
|
'description' => pht(
|
||||||
'Show revisions the current viewer is responsible for. This '.
|
'Show revisions the current viewer is responsible for. This '.
|
||||||
'function inclues revisions the viewer is responsible for through '.
|
'function includes revisions the viewer is responsible for through '.
|
||||||
'membership in projects and packages.'),
|
'membership in projects and packages.'),
|
||||||
),
|
),
|
||||||
);
|
);
|
||||||
|
|
|
@ -479,7 +479,7 @@ final class DiffusionCommitController extends DiffusionController {
|
||||||
// chains of events). This should be rare, but does not indicate a bug
|
// chains of events). This should be rare, but does not indicate a bug
|
||||||
// or data issue.
|
// or data issue.
|
||||||
|
|
||||||
// NOTE: We never query push logs in SVN because the commiter is always
|
// NOTE: We never query push logs in SVN because the committer is always
|
||||||
// the pusher and the commit time is always the push time; the push log
|
// the pusher and the commit time is always the push time; the push log
|
||||||
// is redundant and we save a query by skipping it.
|
// is redundant and we save a query by skipping it.
|
||||||
|
|
||||||
|
|
|
@ -338,7 +338,7 @@ final class DiffusionRepositoryEditEngine
|
||||||
->setIsCopyable(true)
|
->setIsCopyable(true)
|
||||||
->setDescription(pht('Track only these branches.'))
|
->setDescription(pht('Track only these branches.'))
|
||||||
->setConduitDescription(pht('Set the tracked branches.'))
|
->setConduitDescription(pht('Set the tracked branches.'))
|
||||||
->setConduitTypeDescription(pht('New tracked branchs.'))
|
->setConduitTypeDescription(pht('New tracked branches.'))
|
||||||
->setValue($track_value),
|
->setValue($track_value),
|
||||||
id(new PhabricatorTextAreaEditField())
|
id(new PhabricatorTextAreaEditField())
|
||||||
->setIsStringList(true)
|
->setIsStringList(true)
|
||||||
|
@ -349,7 +349,7 @@ final class DiffusionRepositoryEditEngine
|
||||||
->setIsCopyable(true)
|
->setIsCopyable(true)
|
||||||
->setDescription(pht('Autoclose commits on only these branches.'))
|
->setDescription(pht('Autoclose commits on only these branches.'))
|
||||||
->setConduitDescription(pht('Set the autoclose branches.'))
|
->setConduitDescription(pht('Set the autoclose branches.'))
|
||||||
->setConduitTypeDescription(pht('New default tracked branchs.'))
|
->setConduitTypeDescription(pht('New default tracked branches.'))
|
||||||
->setValue($autoclose_value),
|
->setValue($autoclose_value),
|
||||||
id(new PhabricatorTextEditField())
|
id(new PhabricatorTextEditField())
|
||||||
->setKey('importOnly')
|
->setKey('importOnly')
|
||||||
|
@ -396,7 +396,7 @@ final class DiffusionRepositoryEditEngine
|
||||||
->setConduitDescription(
|
->setConduitDescription(
|
||||||
pht('Change symbol languages for this repository.'))
|
pht('Change symbol languages for this repository.'))
|
||||||
->setConduitTypeDescription(
|
->setConduitTypeDescription(
|
||||||
pht('New symbol langauges.'))
|
pht('New symbol languages.'))
|
||||||
->setValue($object->getSymbolLanguages()),
|
->setValue($object->getSymbolLanguages()),
|
||||||
id(new PhabricatorDatasourceEditField())
|
id(new PhabricatorDatasourceEditField())
|
||||||
->setKey('symbolRepositoryPHIDs')
|
->setKey('symbolRepositoryPHIDs')
|
||||||
|
|
|
@ -1230,7 +1230,7 @@ final class DiffusionCommitHookEngine extends Phobject {
|
||||||
// also look at author data (do the commits come from multiple different
|
// also look at author data (do the commits come from multiple different
|
||||||
// authors?) and commit date data (is the oldest commit more than 48 hours
|
// authors?) and commit date data (is the oldest commit more than 48 hours
|
||||||
// old), but we don't have immediate access to those and this simple
|
// old), but we don't have immediate access to those and this simple
|
||||||
// heruistic might be good enough.
|
// heuristic might be good enough.
|
||||||
|
|
||||||
$commit_count = 0;
|
$commit_count = 0;
|
||||||
$type_commit = PhabricatorRepositoryPushLog::REFTYPE_COMMIT;
|
$type_commit = PhabricatorRepositoryPushLog::REFTYPE_COMMIT;
|
||||||
|
|
|
@ -80,7 +80,7 @@ final class DiffusionGitLFSAuthenticateWorkflow
|
||||||
|
|
||||||
$lfs_uri = $repository->getGitLFSURI('info/lfs');
|
$lfs_uri = $repository->getGitLFSURI('info/lfs');
|
||||||
|
|
||||||
// Generate a temporary token to allow the user to acces LFS over HTTP.
|
// Generate a temporary token to allow the user to access LFS over HTTP.
|
||||||
// This works even if normal HTTP repository operations are not available
|
// This works even if normal HTTP repository operations are not available
|
||||||
// on this host, and does not require the user to have a VCS password.
|
// on this host, and does not require the user to have a VCS password.
|
||||||
|
|
||||||
|
|
|
@ -112,7 +112,7 @@ final class HeraldCommitAdapter
|
||||||
$phids[] = $repository_phid;
|
$phids[] = $repository_phid;
|
||||||
|
|
||||||
// NOTE: This is projects for the repository, not for the commit. When
|
// NOTE: This is projects for the repository, not for the commit. When
|
||||||
// Herald evalutes, commits normally can not have any project tags yet.
|
// Herald evaluates, commits normally can not have any project tags yet.
|
||||||
$repository_project_phids = PhabricatorEdgeQuery::loadDestinationPHIDs(
|
$repository_project_phids = PhabricatorEdgeQuery::loadDestinationPHIDs(
|
||||||
$repository_phid,
|
$repository_phid,
|
||||||
$project_type);
|
$project_type);
|
||||||
|
|
|
@ -178,7 +178,7 @@ abstract class DiffusionCommandEngine extends Phobject {
|
||||||
if (!$device) {
|
if (!$device) {
|
||||||
throw new Exception(
|
throw new Exception(
|
||||||
pht(
|
pht(
|
||||||
'Attempting to build a reposiory command (for repository "%s") '.
|
'Attempting to build a repository command (for repository "%s") '.
|
||||||
'as device, but this host ("%s") is not configured as a cluster '.
|
'as device, but this host ("%s") is not configured as a cluster '.
|
||||||
'device.',
|
'device.',
|
||||||
$repository->getDisplayName(),
|
$repository->getDisplayName(),
|
||||||
|
|
|
@ -101,7 +101,7 @@ final class DiffusionMercurialWireProtocol extends Phobject {
|
||||||
|
|
||||||
/** If the server version is running 3.4+ it will respond
|
/** If the server version is running 3.4+ it will respond
|
||||||
* with 'bundle2' capability in the format of "bundle2=(url-encoding)".
|
* with 'bundle2' capability in the format of "bundle2=(url-encoding)".
|
||||||
* Until we maange to properly package up bundles to send back we
|
* Until we manage to properly package up bundles to send back we
|
||||||
* disallow the client from knowing we speak bundle2 by removing it
|
* disallow the client from knowing we speak bundle2 by removing it
|
||||||
* from the capabilities listing.
|
* from the capabilities listing.
|
||||||
*
|
*
|
||||||
|
|
|
@ -231,7 +231,7 @@ final class DiffusionRepositoryClusterEngine extends Phobject {
|
||||||
// no way to tell which one has the "right" data. If we pick wrong, we
|
// no way to tell which one has the "right" data. If we pick wrong, we
|
||||||
// might erase some or all of the data in the repository.
|
// might erase some or all of the data in the repository.
|
||||||
|
|
||||||
// Since this is dangeorus, we refuse to guess unless there is only one
|
// Since this is dangerous, we refuse to guess unless there is only one
|
||||||
// device. If we're the only device in the group, we obviously must be
|
// device. If we're the only device in the group, we obviously must be
|
||||||
// a leader.
|
// a leader.
|
||||||
|
|
||||||
|
@ -252,7 +252,7 @@ final class DiffusionRepositoryClusterEngine extends Phobject {
|
||||||
'Repository "%s" exists on more than one device, but no device '.
|
'Repository "%s" exists on more than one device, but no device '.
|
||||||
'has any repository version information. Phabricator can not '.
|
'has any repository version information. Phabricator can not '.
|
||||||
'guess which copy of the existing data is authoritative. Promote '.
|
'guess which copy of the existing data is authoritative. Promote '.
|
||||||
'a device or see "Ambigous Leaders" in the documentation.',
|
'a device or see "Ambiguous Leaders" in the documentation.',
|
||||||
$repository->getDisplayName()));
|
$repository->getDisplayName()));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -9,7 +9,7 @@
|
||||||
* low-level query can.
|
* low-level query can.
|
||||||
*
|
*
|
||||||
* This class can resolve the most common refs (commits, branches, tags) and
|
* This class can resolve the most common refs (commits, branches, tags) and
|
||||||
* can do so cheapy (by examining the database, without needing to make calls
|
* can do so cheaply (by examining the database, without needing to make calls
|
||||||
* to the VCS or the service host).
|
* to the VCS or the service host).
|
||||||
*/
|
*/
|
||||||
final class DiffusionCachedResolveRefsQuery
|
final class DiffusionCachedResolveRefsQuery
|
||||||
|
|
|
@ -69,7 +69,7 @@ final class DiffusionCommitQuery
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Look up commits in a specific repository. Prefer
|
* Look up commits in a specific repository. Prefer
|
||||||
* @{method:withRepositoryIDs}; the underyling table is keyed by ID such
|
* @{method:withRepositoryIDs}; the underlying table is keyed by ID such
|
||||||
* that this method requires a separate initial query to map PHID to ID.
|
* that this method requires a separate initial query to map PHID to ID.
|
||||||
*/
|
*/
|
||||||
public function withRepositoryPHIDs(array $phids) {
|
public function withRepositoryPHIDs(array $phids) {
|
||||||
|
|
|
@ -53,7 +53,7 @@ final class DiffusionCommitConcernTransaction
|
||||||
}
|
}
|
||||||
|
|
||||||
// Even if you've already raised a concern, you can raise again as long
|
// Even if you've already raised a concern, you can raise again as long
|
||||||
// as the author requsted you verify.
|
// as the author requested you verify.
|
||||||
$state_verify = PhabricatorAuditCommitStatusConstants::NEEDS_VERIFICATION;
|
$state_verify = PhabricatorAuditCommitStatusConstants::NEEDS_VERIFICATION;
|
||||||
|
|
||||||
if ($this->isViewerFullyRejected($object, $viewer)) {
|
if ($this->isViewerFullyRejected($object, $viewer)) {
|
||||||
|
|
|
@ -53,7 +53,7 @@ final class DiffusionCommitVerifyTransaction
|
||||||
throw new Exception(
|
throw new Exception(
|
||||||
pht(
|
pht(
|
||||||
'You can not request verification of this commit because no '.
|
'You can not request verification of this commit because no '.
|
||||||
'auditors have raised conerns with it.'));
|
'auditors have raised concerns with it.'));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -64,7 +64,7 @@ abstract class DrydockBlueprintImplementation extends Phobject {
|
||||||
* is a coarse compatibility check between a lease and a resource.
|
* is a coarse compatibility check between a lease and a resource.
|
||||||
*
|
*
|
||||||
* @param DrydockBlueprint Concrete blueprint to allocate for.
|
* @param DrydockBlueprint Concrete blueprint to allocate for.
|
||||||
* @param DrydockResource Candidiate resource to allocate the lease on.
|
* @param DrydockResource Candidate resource to allocate the lease on.
|
||||||
* @param DrydockLease Pending lease that wants to allocate here.
|
* @param DrydockLease Pending lease that wants to allocate here.
|
||||||
* @return bool True if the resource and lease are compatible.
|
* @return bool True if the resource and lease are compatible.
|
||||||
* @task lease
|
* @task lease
|
||||||
|
@ -76,7 +76,7 @@ abstract class DrydockBlueprintImplementation extends Phobject {
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Acquire a lease. Allows resources to peform setup as leases are brought
|
* Acquire a lease. Allows resources to perform setup as leases are brought
|
||||||
* online.
|
* online.
|
||||||
*
|
*
|
||||||
* If acquisition fails, throw an exception.
|
* If acquisition fails, throw an exception.
|
||||||
|
|
|
@ -100,7 +100,7 @@ final class DrydockAuthorization extends DrydockDAO
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Apply external authorization effects after a user chagnes the value of a
|
* Apply external authorization effects after a user changes the value of a
|
||||||
* blueprint selector control an object.
|
* blueprint selector control an object.
|
||||||
*
|
*
|
||||||
* @param PhabricatorUser User applying the change.
|
* @param PhabricatorUser User applying the change.
|
||||||
|
|
|
@ -241,7 +241,7 @@ final class DrydockLeaseUpdateWorker extends DrydockWorker {
|
||||||
// NOTE: We have not acquired the lease yet, so it is possible that the
|
// NOTE: We have not acquired the lease yet, so it is possible that the
|
||||||
// resource we just built will be snatched up by some other lease before
|
// resource we just built will be snatched up by some other lease before
|
||||||
// we can acquire it. This is not problematic: we'll retry a little later
|
// we can acquire it. This is not problematic: we'll retry a little later
|
||||||
// and should suceed eventually.
|
// and should succeed eventually.
|
||||||
}
|
}
|
||||||
|
|
||||||
$resources = $this->rankResources($resources, $lease);
|
$resources = $this->rankResources($resources, $lease);
|
||||||
|
@ -261,7 +261,7 @@ final class DrydockLeaseUpdateWorker extends DrydockWorker {
|
||||||
if (!$allocated) {
|
if (!$allocated) {
|
||||||
throw new PhutilAggregateException(
|
throw new PhutilAggregateException(
|
||||||
pht(
|
pht(
|
||||||
'Unable to acquire lease "%s" on any resouce.',
|
'Unable to acquire lease "%s" on any resource.',
|
||||||
$lease->getPHID()),
|
$lease->getPHID()),
|
||||||
$exceptions);
|
$exceptions);
|
||||||
}
|
}
|
||||||
|
@ -725,7 +725,7 @@ final class DrydockLeaseUpdateWorker extends DrydockWorker {
|
||||||
// performed the read above and now, the resource might have closed, so
|
// performed the read above and now, the resource might have closed, so
|
||||||
// we may activate leases on dead resources. At least for now, this seems
|
// we may activate leases on dead resources. At least for now, this seems
|
||||||
// fine: a resource dying right before we activate a lease on it should not
|
// fine: a resource dying right before we activate a lease on it should not
|
||||||
// be distinguisahble from a resource dying right after we activate a lease
|
// be distinguishable from a resource dying right after we activate a lease
|
||||||
// on it. We end up with an active lease on a dead resource either way, and
|
// on it. We end up with an active lease on a dead resource either way, and
|
||||||
// can not prevent resources dying from lightning strikes.
|
// can not prevent resources dying from lightning strikes.
|
||||||
|
|
||||||
|
|
|
@ -199,7 +199,7 @@ abstract class DrydockWorker extends PhabricatorWorker {
|
||||||
$viewer = $this->getViewer();
|
$viewer = $this->getViewer();
|
||||||
|
|
||||||
// Don't reclaim a resource if it has been updated recently. If two
|
// Don't reclaim a resource if it has been updated recently. If two
|
||||||
// leases are fighting, we don't want them to keep reclaming resources
|
// leases are fighting, we don't want them to keep reclaiming resources
|
||||||
// from one another forever without making progress, so make resources
|
// from one another forever without making progress, so make resources
|
||||||
// immune to reclamation for a little while after they activate or update.
|
// immune to reclamation for a little while after they activate or update.
|
||||||
|
|
||||||
|
|
|
@ -119,7 +119,7 @@ final class PhabricatorFileDataController extends PhabricatorFileController {
|
||||||
// make this logic simpler and more consistent.
|
// make this logic simpler and more consistent.
|
||||||
|
|
||||||
// Beyond making the policy check itself more consistent, this also makes
|
// Beyond making the policy check itself more consistent, this also makes
|
||||||
// sure we're consitent about returning HTTP 404 on bad requests instead
|
// sure we're consistent about returning HTTP 404 on bad requests instead
|
||||||
// of serving HTTP 200 with a login page, which can mislead some clients.
|
// of serving HTTP 200 with a login page, which can mislead some clients.
|
||||||
|
|
||||||
$viewer = PhabricatorUser::getOmnipotentUser();
|
$viewer = PhabricatorUser::getOmnipotentUser();
|
||||||
|
|
|
@ -24,7 +24,7 @@ final class PhabricatorFilesManagementCatWorkflow
|
||||||
'help' => pht(
|
'help' => pht(
|
||||||
'DANGEROUS. Attempt to salvage file content even if the '.
|
'DANGEROUS. Attempt to salvage file content even if the '.
|
||||||
'integrity check fails. If an adversary has tampered with '.
|
'integrity check fails. If an adversary has tampered with '.
|
||||||
'the file, the conent may be unsafe.'),
|
'the file, the content may be unsafe.'),
|
||||||
),
|
),
|
||||||
array(
|
array(
|
||||||
'name' => 'names',
|
'name' => 'names',
|
||||||
|
|
|
@ -178,10 +178,18 @@ final class PhabricatorFile extends PhabricatorFileDAO
|
||||||
}
|
}
|
||||||
|
|
||||||
$tmp_name = idx($spec, 'tmp_name');
|
$tmp_name = idx($spec, 'tmp_name');
|
||||||
|
|
||||||
|
// NOTE: If we parsed the request body ourselves, the files we wrote will
|
||||||
|
// not be registered in the `is_uploaded_file()` list. It's fine to skip
|
||||||
|
// this check: it just protects against sloppy code from the long ago era
|
||||||
|
// of "register_globals".
|
||||||
|
|
||||||
|
if (ini_get('enable_post_data_reading')) {
|
||||||
$is_valid = @is_uploaded_file($tmp_name);
|
$is_valid = @is_uploaded_file($tmp_name);
|
||||||
if (!$is_valid) {
|
if (!$is_valid) {
|
||||||
throw new Exception(pht('File is not an uploaded file.'));
|
throw new Exception(pht('File is not an uploaded file.'));
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
$file_data = Filesystem::readFile($tmp_name);
|
$file_data = Filesystem::readFile($tmp_name);
|
||||||
$file_size = idx($spec, 'size');
|
$file_size = idx($spec, 'size');
|
||||||
|
|
|
@ -56,7 +56,7 @@ final class PhabricatorFundApplication extends PhabricatorApplication {
|
||||||
return array(
|
return array(
|
||||||
FundDefaultViewCapability::CAPABILITY => array(
|
FundDefaultViewCapability::CAPABILITY => array(
|
||||||
'caption' => pht('Default view policy for newly created initiatives.'),
|
'caption' => pht('Default view policy for newly created initiatives.'),
|
||||||
'tempate' => FundInitiativePHIDType::TYPECONST,
|
'template' => FundInitiativePHIDType::TYPECONST,
|
||||||
),
|
),
|
||||||
FundCreateInitiativesCapability::CAPABILITY => array(
|
FundCreateInitiativesCapability::CAPABILITY => array(
|
||||||
'default' => PhabricatorPolicies::POLICY_ADMIN,
|
'default' => PhabricatorPolicies::POLICY_ADMIN,
|
||||||
|
|
|
@ -50,7 +50,7 @@ final class FundInitiativeEditEngine
|
||||||
}
|
}
|
||||||
|
|
||||||
protected function getObjectName() {
|
protected function getObjectName() {
|
||||||
return pht('Initivative');
|
return pht('Initiative');
|
||||||
}
|
}
|
||||||
|
|
||||||
protected function getObjectCreateCancelURI($object) {
|
protected function getObjectCreateCancelURI($object) {
|
||||||
|
|
|
@ -3,6 +3,7 @@
|
||||||
final class HarbormasterBuildPlanDefaultViewCapability
|
final class HarbormasterBuildPlanDefaultViewCapability
|
||||||
extends PhabricatorPolicyCapability {
|
extends PhabricatorPolicyCapability {
|
||||||
|
|
||||||
|
// TODO: This is misspelled! See T13005.
|
||||||
const CAPABILITY = 'harbomaster.plan.default.view';
|
const CAPABILITY = 'harbomaster.plan.default.view';
|
||||||
|
|
||||||
public function getCapabilityName() {
|
public function getCapabilityName() {
|
||||||
|
|
|
@ -142,7 +142,7 @@ final class HarbormasterSendMessageConduitAPIMethod
|
||||||
"=============\n".
|
"=============\n".
|
||||||
"When you send Harbormaster a message, you must include a `type`, ".
|
"When you send Harbormaster a message, you must include a `type`, ".
|
||||||
"which describes the overall state of the build. For example, use ".
|
"which describes the overall state of the build. For example, use ".
|
||||||
"`pass` to tell Harbomaster that a build completed successfully.".
|
"`pass` to tell Harbormaster that a build completed successfully.".
|
||||||
"\n\n".
|
"\n\n".
|
||||||
"Supported message types are:".
|
"Supported message types are:".
|
||||||
"\n\n".
|
"\n\n".
|
||||||
|
@ -155,7 +155,7 @@ final class HarbormasterSendMessageConduitAPIMethod
|
||||||
"message, but you can also send a `work` message to report intermediate ".
|
"message, but you can also send a `work` message to report intermediate ".
|
||||||
"results.\n\n".
|
"results.\n\n".
|
||||||
"To provide unit test results, pass a list of results in the `unit` ".
|
"To provide unit test results, pass a list of results in the `unit` ".
|
||||||
"parameter. Each result shoud be a dictionary with these keys:".
|
"parameter. Each result should be a dictionary with these keys:".
|
||||||
"\n\n".
|
"\n\n".
|
||||||
"%s".
|
"%s".
|
||||||
"\n\n".
|
"\n\n".
|
||||||
|
|
|
@ -38,7 +38,7 @@ final class HarbormasterBuildStep extends HarbormasterDAO
|
||||||
// T6203/NULLABILITY
|
// T6203/NULLABILITY
|
||||||
// This should not be nullable. Current `null` values indicate steps
|
// This should not be nullable. Current `null` values indicate steps
|
||||||
// which predated editable names. These should be backfilled with
|
// which predated editable names. These should be backfilled with
|
||||||
// default names, then the code for handling `null` shoudl be removed.
|
// default names, then the code for handling `null` should be removed.
|
||||||
'name' => 'text255?',
|
'name' => 'text255?',
|
||||||
'stepAutoKey' => 'text32?',
|
'stepAutoKey' => 'text32?',
|
||||||
),
|
),
|
||||||
|
|
|
@ -236,7 +236,7 @@ final class LegalpadDocumentSignController extends LegalpadController {
|
||||||
|
|
||||||
// Use the last content update as the modified date. We don't want to
|
// Use the last content update as the modified date. We don't want to
|
||||||
// show that a document like a TOS was "updated" by an incidental change
|
// show that a document like a TOS was "updated" by an incidental change
|
||||||
// to a field like the preamble or privacy settings which does not acutally
|
// to a field like the preamble or privacy settings which does not actually
|
||||||
// affect the content of the agreement.
|
// affect the content of the agreement.
|
||||||
$content_updated = $document_body->getDateCreated();
|
$content_updated = $document_body->getDateCreated();
|
||||||
|
|
||||||
|
|
|
@ -3,6 +3,7 @@
|
||||||
final class LegalpadDocumentPreambleTransaction
|
final class LegalpadDocumentPreambleTransaction
|
||||||
extends LegalpadDocumentTransactionType {
|
extends LegalpadDocumentTransactionType {
|
||||||
|
|
||||||
|
// TODO: This is misspelled! See T13005.
|
||||||
const TRANSACTIONTYPE = 'legalpad:premable';
|
const TRANSACTIONTYPE = 'legalpad:premable';
|
||||||
|
|
||||||
public function generateOldValue($object) {
|
public function generateOldValue($object) {
|
||||||
|
|
|
@ -116,7 +116,7 @@ final class ManiphestReportController extends ManiphestController {
|
||||||
case ManiphestTaskMergedIntoTransaction::TRANSACTIONTYPE:
|
case ManiphestTaskMergedIntoTransaction::TRANSACTIONTYPE:
|
||||||
// NOTE: Merging a task does not generate a "status" transaction.
|
// NOTE: Merging a task does not generate a "status" transaction.
|
||||||
// We pretend it did. Note that this is not always accurate: it is
|
// We pretend it did. Note that this is not always accurate: it is
|
||||||
// possble to merge a task which was previously closed, but this
|
// possible to merge a task which was previously closed, but this
|
||||||
// fake transaction always counts a merge as a closure.
|
// fake transaction always counts a merge as a closure.
|
||||||
$oldv = $default_status;
|
$oldv = $default_status;
|
||||||
$newv = $duplicate_status;
|
$newv = $duplicate_status;
|
||||||
|
@ -762,7 +762,7 @@ final class ManiphestReportController extends ManiphestController {
|
||||||
// and equal distance in the past. This is so users can type "6 days" (which
|
// and equal distance in the past. This is so users can type "6 days" (which
|
||||||
// means "6 days from now") and get the behavior of "6 days ago", rather
|
// means "6 days from now") and get the behavior of "6 days ago", rather
|
||||||
// than no results (because the window epoch is in the future). This might
|
// than no results (because the window epoch is in the future). This might
|
||||||
// be a little confusing because it casues "tomorrow" to mean "yesterday"
|
// be a little confusing because it causes "tomorrow" to mean "yesterday"
|
||||||
// and "2022" (or whatever) to mean "ten years ago", but these inputs are
|
// and "2022" (or whatever) to mean "ten years ago", but these inputs are
|
||||||
// nonsense anyway.
|
// nonsense anyway.
|
||||||
|
|
||||||
|
|
|
@ -13,4 +13,18 @@ final class ManiphestTaskHasDuplicateTaskEdgeType
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function getConduitKey() {
|
||||||
|
return 'task.merged-in';
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getConduitName() {
|
||||||
|
return pht('Merged In');
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getConduitDescription() {
|
||||||
|
return pht(
|
||||||
|
'The source task has had the destination task closed as a '.
|
||||||
|
'duplicate and merged into it.');
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -13,4 +13,19 @@ final class ManiphestTaskIsDuplicateOfTaskEdgeType
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function getConduitKey() {
|
||||||
|
return 'task.duplicate';
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getConduitName() {
|
||||||
|
return pht('Closed as Duplicate');
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getConduitDescription() {
|
||||||
|
return pht(
|
||||||
|
'The source task has been closed as a duplicate of the '.
|
||||||
|
'destination task.');
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -972,7 +972,7 @@ final class ManiphestTransactionEditor
|
||||||
|
|
||||||
$object_phid = $object->getPHID();
|
$object_phid = $object->getPHID();
|
||||||
|
|
||||||
// We're doing layout with the ominpotent viewer to make sure we don't
|
// We're doing layout with the omnipotent viewer to make sure we don't
|
||||||
// remove positions in columns that exist, but which the actual actor
|
// remove positions in columns that exist, but which the actual actor
|
||||||
// can't see.
|
// can't see.
|
||||||
$omnipotent_viewer = PhabricatorUser::getOmnipotentUser();
|
$omnipotent_viewer = PhabricatorUser::getOmnipotentUser();
|
||||||
|
|
|
@ -63,7 +63,7 @@ final class PhabricatorMailManagementUnverifyWorkflow
|
||||||
echo tsprintf(
|
echo tsprintf(
|
||||||
"%s\n",
|
"%s\n",
|
||||||
pht(
|
pht(
|
||||||
'Address "%s" (owned by "%s") is already unveriifed.',
|
'Address "%s" (owned by "%s") is already unverified.',
|
||||||
$address,
|
$address,
|
||||||
$user->getUsername()));
|
$user->getUsername()));
|
||||||
continue;
|
continue;
|
||||||
|
|
|
@ -255,7 +255,7 @@ abstract class PhabricatorMailReceiver extends Phobject {
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Reduce an email address to its canonical form. For example, an adddress
|
* Reduce an email address to its canonical form. For example, an address
|
||||||
* like:
|
* like:
|
||||||
*
|
*
|
||||||
* "Abraham Lincoln" < ALincoln@example.com >
|
* "Abraham Lincoln" < ALincoln@example.com >
|
||||||
|
|
|
@ -82,7 +82,7 @@ final class PhabricatorOwnersPackageTestCase extends PhabricatorTestCase {
|
||||||
|
|
||||||
// Now, add a more specific path to Package #1. This tests nested ownership
|
// Now, add a more specific path to Package #1. This tests nested ownership
|
||||||
// in packages with weak dominion rules. This time, Package #1 should end
|
// in packages with weak dominion rules. This time, Package #1 should end
|
||||||
// up back on top, with Package #2 cedeing control to its more specific
|
// up back on top, with Package #2 ceding control to its more specific
|
||||||
// path.
|
// path.
|
||||||
$rows[] = array(
|
$rows[] = array(
|
||||||
'id' => 1,
|
'id' => 1,
|
||||||
|
|
|
@ -104,7 +104,7 @@ abstract class PassphraseCredentialType extends Phobject {
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Return true if the provided credental requires a password to decrypt.
|
* Return true if the provided credential requires a password to decrypt.
|
||||||
*
|
*
|
||||||
* @param PhutilOpaqueEnvelope Credential secret value.
|
* @param PhutilOpaqueEnvelope Credential secret value.
|
||||||
* @return bool True if the credential needs a password.
|
* @return bool True if the credential needs a password.
|
||||||
|
|
|
@ -67,7 +67,7 @@ final class PassphraseCredentialControl extends AphrontFormControl {
|
||||||
$user_credential->getName());
|
$user_credential->getName());
|
||||||
}
|
}
|
||||||
} catch (PhabricatorPolicyException $policy_exception) {
|
} catch (PhabricatorPolicyException $policy_exception) {
|
||||||
// Pull the credential with the ominipotent viewer so we can look up
|
// Pull the credential with the omnipotent viewer so we can look up
|
||||||
// the ID and provide the monogram.
|
// the ID and provide the monogram.
|
||||||
$omnipotent_credential = id(new PassphraseCredentialQuery())
|
$omnipotent_credential = id(new PassphraseCredentialQuery())
|
||||||
->setViewer(PhabricatorUser::getOmnipotentUser())
|
->setViewer(PhabricatorUser::getOmnipotentUser())
|
||||||
|
|
|
@ -10,7 +10,7 @@ final class PhabricatorMentionRemarkupRule extends PhutilRemarkupRule {
|
||||||
|
|
||||||
// NOTE: The negative lookbehind prevents matches like "mail@lists", while
|
// NOTE: The negative lookbehind prevents matches like "mail@lists", while
|
||||||
// allowing constructs like "@tomo/@mroch". Since we now allow periods in
|
// allowing constructs like "@tomo/@mroch". Since we now allow periods in
|
||||||
// usernames, we can't resonably distinguish that "@company.com" isn't a
|
// usernames, we can't reasonably distinguish that "@company.com" isn't a
|
||||||
// username, so we'll incorrectly pick it up, but there's little to be done
|
// username, so we'll incorrectly pick it up, but there's little to be done
|
||||||
// about that. We forbid terminal periods so that we can correctly capture
|
// about that. We forbid terminal periods so that we can correctly capture
|
||||||
// "@joe" instead of "@joe." in "Hey, @joe.".
|
// "@joe" instead of "@joe." in "Hey, @joe.".
|
||||||
|
|
|
@ -425,7 +425,7 @@ final class PhabricatorPeopleQuery
|
||||||
}
|
}
|
||||||
|
|
||||||
// If the user is set to "Available" for this event, don't consider it
|
// If the user is set to "Available" for this event, don't consider it
|
||||||
// when computin their away status.
|
// when computing their away status.
|
||||||
if (!$invitee->getDisplayAvailability($event)) {
|
if (!$invitee->getDisplayAvailability($event)) {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
@ -492,7 +492,7 @@ final class PhabricatorPeopleQuery
|
||||||
// valid for that long.
|
// valid for that long.
|
||||||
|
|
||||||
// NOTE: This doesn't handle overlapping events with the greatest
|
// NOTE: This doesn't handle overlapping events with the greatest
|
||||||
// possible care. In theory, if you're attenting multiple events
|
// possible care. In theory, if you're attending multiple events
|
||||||
// simultaneously we should accommodate that. However, it's complex
|
// simultaneously we should accommodate that. However, it's complex
|
||||||
// to compute, rare, and probably not confusing most of the time.
|
// to compute, rare, and probably not confusing most of the time.
|
||||||
|
|
||||||
|
|
|
@ -79,7 +79,7 @@ final class PhabricatorPeopleSearchEngine
|
||||||
->setOptions(
|
->setOptions(
|
||||||
pht('(Show All)'),
|
pht('(Show All)'),
|
||||||
pht('Show Only Unapproved Users'),
|
pht('Show Only Unapproved Users'),
|
||||||
pht('Hide Unappproved Users'))
|
pht('Hide Unapproved Users'))
|
||||||
->setDescription(
|
->setDescription(
|
||||||
pht(
|
pht(
|
||||||
'Pass true to find only users awaiting administrative approval, '.
|
'Pass true to find only users awaiting administrative approval, '.
|
||||||
|
|
|
@ -407,7 +407,7 @@ final class PhabricatorUser
|
||||||
$token = substr($token, $breach_prelen + self::CSRF_SALT_LENGTH);
|
$token = substr($token, $breach_prelen + self::CSRF_SALT_LENGTH);
|
||||||
|
|
||||||
// When the user posts a form, we check that it contains a valid CSRF token.
|
// When the user posts a form, we check that it contains a valid CSRF token.
|
||||||
// Tokens cycle each hour (every CSRF_CYLCE_FREQUENCY seconds) and we accept
|
// Tokens cycle each hour (every CSRF_CYCLE_FREQUENCY seconds) and we accept
|
||||||
// either the current token, the next token (users can submit a "future"
|
// either the current token, the next token (users can submit a "future"
|
||||||
// token if you have two web frontends that have some clock skew) or any of
|
// token if you have two web frontends that have some clock skew) or any of
|
||||||
// the last 6 tokens. This means that pages are valid for up to 7 hours.
|
// the last 6 tokens. This means that pages are valid for up to 7 hours.
|
||||||
|
@ -1180,7 +1180,7 @@ final class PhabricatorUser
|
||||||
/**
|
/**
|
||||||
* Get a scalar string identifying this user.
|
* Get a scalar string identifying this user.
|
||||||
*
|
*
|
||||||
* This is similar to using the PHID, but distinguishes between ominpotent
|
* This is similar to using the PHID, but distinguishes between omnipotent
|
||||||
* and public users explicitly. This allows safe construction of cache keys
|
* and public users explicitly. This allows safe construction of cache keys
|
||||||
* or cache buckets which do not conflate public and omnipotent users.
|
* or cache buckets which do not conflate public and omnipotent users.
|
||||||
*
|
*
|
||||||
|
@ -1459,7 +1459,7 @@ final class PhabricatorUser
|
||||||
id(new PhabricatorConduitSearchFieldSpecification())
|
id(new PhabricatorConduitSearchFieldSpecification())
|
||||||
->setKey('roles')
|
->setKey('roles')
|
||||||
->setType('list<string>')
|
->setType('list<string>')
|
||||||
->setDescription(pht('List of acccount roles.')),
|
->setDescription(pht('List of account roles.')),
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -82,7 +82,7 @@ final class PhabricatorHandleList
|
||||||
if (!isset($this[$phid])) {
|
if (!isset($this[$phid])) {
|
||||||
throw new Exception(
|
throw new Exception(
|
||||||
pht(
|
pht(
|
||||||
'Trying to create a new sublist of an existsing handle list, '.
|
'Trying to create a new sublist of an existing handle list, '.
|
||||||
'but PHID "%s" does not appear in the parent list.',
|
'but PHID "%s" does not appear in the parent list.',
|
||||||
$phid));
|
$phid));
|
||||||
}
|
}
|
||||||
|
|
|
@ -3,7 +3,7 @@
|
||||||
/**
|
/**
|
||||||
* Resolve a list of identifiers into PHIDs.
|
* Resolve a list of identifiers into PHIDs.
|
||||||
*
|
*
|
||||||
* This class simplifies the process of convering a list of mixed token types
|
* This class simplifies the process of converting a list of mixed token types
|
||||||
* (like some PHIDs and some usernames) into a list of just PHIDs.
|
* (like some PHIDs and some usernames) into a list of just PHIDs.
|
||||||
*/
|
*/
|
||||||
abstract class PhabricatorPHIDResolver extends Phobject {
|
abstract class PhabricatorPHIDResolver extends Phobject {
|
||||||
|
|
|
@ -361,7 +361,7 @@ final class PhortuneStripePaymentProvider extends PhortunePaymentProvider {
|
||||||
case 'error:duplicate_transaction':
|
case 'error:duplicate_transaction':
|
||||||
case 'error:processing_error':
|
case 'error:processing_error':
|
||||||
default:
|
default:
|
||||||
// NOTE: These errors currently don't recevive a detailed message.
|
// NOTE: These errors currently don't receive a detailed message.
|
||||||
// NOTE: We can also end up here with "http:nnn" messages.
|
// NOTE: We can also end up here with "http:nnn" messages.
|
||||||
|
|
||||||
// TODO: At least some of these should have a better message, or be
|
// TODO: At least some of these should have a better message, or be
|
||||||
|
|
|
@ -124,7 +124,7 @@ final class PhrequentTimeBlock extends Phobject {
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
// Here, we've prematurely ended a deeper stratum. Merge higher
|
// Here, we've prematurely ended a deeper stratum. Merge higher
|
||||||
// stata. This looks like this:
|
// strata. This looks like this:
|
||||||
//
|
//
|
||||||
// V
|
// V
|
||||||
// V
|
// V
|
||||||
|
|
|
@ -452,7 +452,7 @@ final class PhrictionTransactionEditor
|
||||||
$verb) {
|
$verb) {
|
||||||
|
|
||||||
$errors = array();
|
$errors = array();
|
||||||
// NOTE: We use the ominpotent user for these checks because policy
|
// NOTE: We use the omnipotent user for these checks because policy
|
||||||
// doesn't matter; existence does.
|
// doesn't matter; existence does.
|
||||||
$other_doc_viewer = PhabricatorUser::getOmnipotentUser();
|
$other_doc_viewer = PhabricatorUser::getOmnipotentUser();
|
||||||
$ancestral_slugs = PhabricatorSlug::getAncestry($object->getSlug());
|
$ancestral_slugs = PhabricatorSlug::getAncestry($object->getSlug());
|
||||||
|
|
|
@ -257,7 +257,7 @@ final class PhabricatorPolicyFilter extends Phobject {
|
||||||
$filtered[$key] = $object;
|
$filtered[$key] = $object;
|
||||||
}
|
}
|
||||||
|
|
||||||
// If we survied the primary checks, apply extended checks to objects
|
// If we survived the primary checks, apply extended checks to objects
|
||||||
// with extended policies.
|
// with extended policies.
|
||||||
$results = array();
|
$results = array();
|
||||||
$extended = array();
|
$extended = array();
|
||||||
|
|
|
@ -97,7 +97,7 @@ final class PhabricatorProjectColumnQuery
|
||||||
if ($proxy_phid !== null) {
|
if ($proxy_phid !== null) {
|
||||||
$proxy = idx($proxies, $proxy_phid);
|
$proxy = idx($proxies, $proxy_phid);
|
||||||
|
|
||||||
// Only attach valid proxies, so we don't end up getting surprsied if
|
// Only attach valid proxies, so we don't end up getting surprised if
|
||||||
// an install somehow gets junk into their database.
|
// an install somehow gets junk into their database.
|
||||||
if (!($proxy instanceof PhabricatorColumnProxyInterface)) {
|
if (!($proxy instanceof PhabricatorColumnProxyInterface)) {
|
||||||
$proxy = null;
|
$proxy = null;
|
||||||
|
|
|
@ -24,7 +24,7 @@ final class ProjectRemarkupRule extends PhabricatorObjectRemarkupRule {
|
||||||
protected function getObjectIDPattern() {
|
protected function getObjectIDPattern() {
|
||||||
// NOTE: The latter half of this rule matches monograms with internal
|
// NOTE: The latter half of this rule matches monograms with internal
|
||||||
// periods, like `#domain.com`, but does not match monograms with terminal
|
// periods, like `#domain.com`, but does not match monograms with terminal
|
||||||
// periods, because they're probably just puncutation.
|
// periods, because they're probably just punctuation.
|
||||||
|
|
||||||
// Broadly, this will not match every possible project monogram, and we
|
// Broadly, this will not match every possible project monogram, and we
|
||||||
// accept some false negatives -- like `#dot.` -- in order to avoid a bunch
|
// accept some false negatives -- like `#dot.` -- in order to avoid a bunch
|
||||||
|
|
|
@ -5,7 +5,7 @@
|
||||||
*
|
*
|
||||||
* 1: To parse "Releeph: picks RQ<nn>" headers in commits created by
|
* 1: To parse "Releeph: picks RQ<nn>" headers in commits created by
|
||||||
* arc-releeph so that RQs committed by arc-releeph have real
|
* arc-releeph so that RQs committed by arc-releeph have real
|
||||||
* PhabricatorRepositoryCommits associated with them (instaed of just the SHA
|
* PhabricatorRepositoryCommits associated with them (instead of just the SHA
|
||||||
* of the commit, as seen by the pusher).
|
* of the commit, as seen by the pusher).
|
||||||
*
|
*
|
||||||
* 2: If requestors want to commit directly to their release branch, they can
|
* 2: If requestors want to commit directly to their release branch, they can
|
||||||
|
|
|
@ -7,7 +7,7 @@ final class ReleephDefaultFieldSelector extends ReleephFieldSelector {
|
||||||
*
|
*
|
||||||
* TODO: This is a giant hacky mess because I am dumb and moved forward on
|
* TODO: This is a giant hacky mess because I am dumb and moved forward on
|
||||||
* Releeph changes with partial information. Recover from this as gracefully
|
* Releeph changes with partial information. Recover from this as gracefully
|
||||||
* as possible. This obivously is an abomination. -epriestley
|
* as possible. This obviously is an abomination. -epriestley
|
||||||
*/
|
*/
|
||||||
public static function isFacebook() {
|
public static function isFacebook() {
|
||||||
return class_exists('ReleephFacebookKarmaFieldSpecification');
|
return class_exists('ReleephFacebookKarmaFieldSpecification');
|
||||||
|
|
|
@ -113,7 +113,7 @@ final class PhabricatorMercurialGraphStream
|
||||||
private function parseParents($parents, $target_rev) {
|
private function parseParents($parents, $target_rev) {
|
||||||
|
|
||||||
// The hg '{parents}' token is empty if there is one "natural" parent
|
// The hg '{parents}' token is empty if there is one "natural" parent
|
||||||
// (predecessor local commit ID). Othwerwise, it may have one or two
|
// (predecessor local commit ID). Otherwise, it may have one or two
|
||||||
// parents. The string looks like this:
|
// parents. The string looks like this:
|
||||||
//
|
//
|
||||||
// 151:1f6c61a60586 154:1d5f799ebe1e
|
// 151:1f6c61a60586 154:1d5f799ebe1e
|
||||||
|
|
|
@ -27,10 +27,10 @@
|
||||||
* // URIs are very unlikely to be the same repository.
|
* // URIs are very unlikely to be the same repository.
|
||||||
* }
|
* }
|
||||||
*
|
*
|
||||||
* Because a repository can be hosted at arbitrarly many arbitrary URIs, there
|
* Because a repository can be hosted at arbitrarily many arbitrary URIs, there
|
||||||
* is no way to completely prevent false negatives by only examining URIs
|
* is no way to completely prevent false negatives by only examining URIs
|
||||||
* (that is, repositories with totally different URIs could really be the same).
|
* (that is, repositories with totally different URIs could really be the same).
|
||||||
* However, normalization is relatively agressive and false negatives should
|
* However, normalization is relatively aggressive and false negatives should
|
||||||
* be rare: if normalization says two URIs are different repositories, they
|
* be rare: if normalization says two URIs are different repositories, they
|
||||||
* probably are.
|
* probably are.
|
||||||
*
|
*
|
||||||
|
|
|
@ -703,7 +703,7 @@ final class PhabricatorRepositoryDiscoveryEngine
|
||||||
// new repository for the first time is less important than any other
|
// new repository for the first time is less important than any other
|
||||||
// daemon task.
|
// daemon task.
|
||||||
|
|
||||||
// If the repostitory has finished importing and we're just catching up
|
// If the repository has finished importing and we're just catching up
|
||||||
// on recent commits, we schedule discovery at COMMIT priority, which is
|
// on recent commits, we schedule discovery at COMMIT priority, which is
|
||||||
// slightly below the default priority.
|
// slightly below the default priority.
|
||||||
|
|
||||||
|
|
|
@ -90,7 +90,7 @@ final class PhabricatorRepositoryManagementThawWorkflow
|
||||||
$risk_message);
|
$risk_message);
|
||||||
|
|
||||||
$is_force = $args->getArg('force');
|
$is_force = $args->getArg('force');
|
||||||
$prompt = pht('Accept the possibilty of permanent data loss?');
|
$prompt = pht('Accept the possibility of permanent data loss?');
|
||||||
if (!$is_force && !phutil_console_confirm($prompt)) {
|
if (!$is_force && !phutil_console_confirm($prompt)) {
|
||||||
throw new PhutilArgumentUsageException(
|
throw new PhutilArgumentUsageException(
|
||||||
pht('User aborted the workflow.'));
|
pht('User aborted the workflow.'));
|
||||||
|
|
|
@ -1875,7 +1875,7 @@ final class PhabricatorRepository extends PhabricatorRepositoryDAO
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Retrieve the sevice URI for the device hosting this repository.
|
* Retrieve the service URI for the device hosting this repository.
|
||||||
*
|
*
|
||||||
* See @{method:newConduitClient} for a general discussion of interacting
|
* See @{method:newConduitClient} for a general discussion of interacting
|
||||||
* with repository services. This method provides lower-level resolution of
|
* with repository services. This method provides lower-level resolution of
|
||||||
|
@ -2129,7 +2129,7 @@ final class PhabricatorRepository extends PhabricatorRepositoryDAO
|
||||||
if ($this->isGit()) {
|
if ($this->isGit()) {
|
||||||
// $_ENV does not populate in CLI contexts if "E" is missing from
|
// $_ENV does not populate in CLI contexts if "E" is missing from
|
||||||
// "variables_order" in PHP config. Currently, we do not require this
|
// "variables_order" in PHP config. Currently, we do not require this
|
||||||
// to be configured. Since it may not be, explictitly bring expected Git
|
// to be configured. Since it may not be, explicitly bring expected Git
|
||||||
// environmental variables into scope. This list is not exhaustive, but
|
// environmental variables into scope. This list is not exhaustive, but
|
||||||
// only lists variables with a known impact on commit hook behavior.
|
// only lists variables with a known impact on commit hook behavior.
|
||||||
|
|
||||||
|
|
|
@ -362,7 +362,7 @@ final class PhabricatorRepositoryURI
|
||||||
return PhabricatorEnv::getEnvConfig('diffusion.ssh-port');
|
return PhabricatorEnv::getEnvConfig('diffusion.ssh-port');
|
||||||
}
|
}
|
||||||
|
|
||||||
// If Phabricator is running on a nonstandard port, use that as the defualt
|
// If Phabricator is running on a nonstandard port, use that as the default
|
||||||
// port for URIs with the same protocol.
|
// port for URIs with the same protocol.
|
||||||
|
|
||||||
$is_http = ($protocol == self::BUILTIN_PROTOCOL_HTTP);
|
$is_http = ($protocol == self::BUILTIN_PROTOCOL_HTTP);
|
||||||
|
|
|
@ -66,7 +66,7 @@ final class PhabricatorRepositoryWorkingCopyVersion
|
||||||
* may have committed and acknowledged a write on a node that lost the lock
|
* may have committed and acknowledged a write on a node that lost the lock
|
||||||
* partway through the write and is no longer reachable.
|
* partway through the write and is no longer reachable.
|
||||||
*
|
*
|
||||||
* In particular, if a node loses its connection to the datbase the global
|
* In particular, if a node loses its connection to the database the global
|
||||||
* lock is released by default. This is a durable lock which stays locked
|
* lock is released by default. This is a durable lock which stays locked
|
||||||
* by default.
|
* by default.
|
||||||
*/
|
*/
|
||||||
|
|
|
@ -216,7 +216,7 @@ final class PhabricatorRepositoryMercurialCommitChangeParserWorker
|
||||||
$changes[$path]['changeType']
|
$changes[$path]['changeType']
|
||||||
= DifferentialChangeType::TYPE_COPY_AWAY;
|
= DifferentialChangeType::TYPE_COPY_AWAY;
|
||||||
} else if ($existing_type == DifferentialChangeType::TYPE_ADD) {
|
} else if ($existing_type == DifferentialChangeType::TYPE_ADD) {
|
||||||
// This change removes a diretory and replaces it with a file. Mark
|
// This change removes a directory and replaces it with a file. Mark
|
||||||
// it as "change" instead of "add".
|
// it as "change" instead of "add".
|
||||||
$changes[$path]['changeType'] = DifferentialChangeType::TYPE_CHANGE;
|
$changes[$path]['changeType'] = DifferentialChangeType::TYPE_CHANGE;
|
||||||
}
|
}
|
||||||
|
|
|
@ -359,7 +359,7 @@ abstract class PhabricatorApplicationSearchEngine extends Phobject {
|
||||||
* );
|
* );
|
||||||
*
|
*
|
||||||
* Any unspecified fields (including custom fields and fields added
|
* Any unspecified fields (including custom fields and fields added
|
||||||
* automatically by infrastruture) will be put in the middle.
|
* automatically by infrastructure) will be put in the middle.
|
||||||
*
|
*
|
||||||
* @return list<string> Default ordering for field keys.
|
* @return list<string> Default ordering for field keys.
|
||||||
*/
|
*/
|
||||||
|
|
|
@ -5,7 +5,7 @@ abstract class PhabricatorSearchManagementWorkflow
|
||||||
|
|
||||||
protected function validateClusterSearchConfig() {
|
protected function validateClusterSearchConfig() {
|
||||||
// Configuration is normally validated by setup self-checks on the web
|
// Configuration is normally validated by setup self-checks on the web
|
||||||
// workflow, but users may reasonsably run `bin/search` commands after
|
// workflow, but users may reasonably run `bin/search` commands after
|
||||||
// making manual edits to "local.json". Re-verify configuration here before
|
// making manual edits to "local.json". Re-verify configuration here before
|
||||||
// continuing.
|
// continuing.
|
||||||
|
|
||||||
|
|
|
@ -80,7 +80,7 @@ final class PhabricatorMotivatorProfileMenuItem
|
||||||
private function getCatFacts() {
|
private function getCatFacts() {
|
||||||
return array(
|
return array(
|
||||||
pht('Cats purr when they are happy, upset, or asleep.'),
|
pht('Cats purr when they are happy, upset, or asleep.'),
|
||||||
pht('The first cats evolved on the savanah about 8,000 years ago.'),
|
pht('The first cats evolved on the savannah about 8,000 years ago.'),
|
||||||
pht(
|
pht(
|
||||||
'Cats have a tail, two feet, between one and three ears, and two '.
|
'Cats have a tail, two feet, between one and three ears, and two '.
|
||||||
'other feet.'),
|
'other feet.'),
|
||||||
|
@ -111,7 +111,7 @@ final class PhabricatorMotivatorProfileMenuItem
|
||||||
pht(
|
pht(
|
||||||
'Not all cats can retract their claws, but most of them can.'),
|
'Not all cats can retract their claws, but most of them can.'),
|
||||||
pht(
|
pht(
|
||||||
'In the wild, cats and racoons sometimes hunt together in packs.'),
|
'In the wild, cats and raccoons sometimes hunt together in packs.'),
|
||||||
pht(
|
pht(
|
||||||
'The Spanish word for cat is "cato". The biggest cat is called '.
|
'The Spanish word for cat is "cato". The biggest cat is called '.
|
||||||
'"el cato".'),
|
'"el cato".'),
|
||||||
|
|
|
@ -143,7 +143,7 @@ abstract class PhabricatorSettingsPanel extends Phobject {
|
||||||
/**
|
/**
|
||||||
* Return false to prevent this panel from being displayed or used. You can
|
* Return false to prevent this panel from being displayed or used. You can
|
||||||
* do, e.g., configuration checks here, to determine if the feature your
|
* do, e.g., configuration checks here, to determine if the feature your
|
||||||
* panel controls is unavailble in this install. By default, all panels are
|
* panel controls is unavailable in this install. By default, all panels are
|
||||||
* enabled.
|
* enabled.
|
||||||
*
|
*
|
||||||
* @return bool True if the panel should be shown.
|
* @return bool True if the panel should be shown.
|
||||||
|
|
|
@ -49,7 +49,7 @@ final class PhabricatorUserPreferencesQuery
|
||||||
* If no settings exist for a user, a new empty settings object with
|
* If no settings exist for a user, a new empty settings object with
|
||||||
* appropriate defaults is returned.
|
* appropriate defaults is returned.
|
||||||
*
|
*
|
||||||
* @param bool True to generat synthetic preferences for missing users.
|
* @param bool True to generate synthetic preferences for missing users.
|
||||||
*/
|
*/
|
||||||
public function needSyntheticPreferences($synthetic) {
|
public function needSyntheticPreferences($synthetic) {
|
||||||
$this->synthetic = $synthetic;
|
$this->synthetic = $synthetic;
|
||||||
|
|
|
@ -46,7 +46,7 @@ final class PhabricatorTimezoneSetting
|
||||||
|
|
||||||
throw new Exception(
|
throw new Exception(
|
||||||
pht(
|
pht(
|
||||||
'Timezone "%s" is not a valid timezone identiifer.',
|
'Timezone "%s" is not a valid timezone identifier.',
|
||||||
$value));
|
$value));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -83,7 +83,7 @@ final class PhabricatorSubscriptionsEditController
|
||||||
} else {
|
} else {
|
||||||
|
|
||||||
// TODO: Eventually, get rid of this once everything implements
|
// TODO: Eventually, get rid of this once everything implements
|
||||||
// PhabriatorApplicationTransactionInterface.
|
// PhabricatorApplicationTransactionInterface.
|
||||||
|
|
||||||
$editor = id(new PhabricatorSubscriptionsEditor())
|
$editor = id(new PhabricatorSubscriptionsEditor())
|
||||||
->setActor($viewer)
|
->setActor($viewer)
|
||||||
|
|
|
@ -763,7 +763,7 @@ abstract class PhabricatorEditEngine
|
||||||
* Load an object given a configured query.
|
* Load an object given a configured query.
|
||||||
*
|
*
|
||||||
* @param PhabricatorPolicyAwareQuery Configured query.
|
* @param PhabricatorPolicyAwareQuery Configured query.
|
||||||
* @param list<const> List of required capabilitiy constants, or omit for
|
* @param list<const> List of required capability constants, or omit for
|
||||||
* defaults.
|
* defaults.
|
||||||
* @return object|null Object, or null if no such object exists.
|
* @return object|null Object, or null if no such object exists.
|
||||||
* @task load
|
* @task load
|
||||||
|
@ -1382,7 +1382,7 @@ abstract class PhabricatorEditEngine
|
||||||
* and that field is visible and editable for the user.
|
* and that field is visible and editable for the user.
|
||||||
*
|
*
|
||||||
* For example, you can use it to test if a user is able to reassign tasks
|
* For example, you can use it to test if a user is able to reassign tasks
|
||||||
* or not, prior to rendering dedicated UI for task reassingment.
|
* or not, prior to rendering dedicated UI for task reassignment.
|
||||||
*
|
*
|
||||||
* Note that this method does NOT test if the user can actually edit the
|
* Note that this method does NOT test if the user can actually edit the
|
||||||
* current object, just if they have access to the related field.
|
* current object, just if they have access to the related field.
|
||||||
|
|
|
@ -3701,7 +3701,7 @@ abstract class PhabricatorApplicationTransactionEditor
|
||||||
|
|
||||||
// If a later project in the list is an ancestor of this one, it will
|
// If a later project in the list is an ancestor of this one, it will
|
||||||
// have added itself to the map. If any ancestor of this project points
|
// have added itself to the map. If any ancestor of this project points
|
||||||
// at itself in the map, this project should be dicarded in favor of
|
// at itself in the map, this project should be discarded in favor of
|
||||||
// that later ancestor.
|
// that later ancestor.
|
||||||
foreach ($project->getAncestorProjects() as $ancestor) {
|
foreach ($project->getAncestorProjects() as $ancestor) {
|
||||||
$ancestor_phid = $ancestor->getPHID();
|
$ancestor_phid = $ancestor->getPHID();
|
||||||
|
|
Some files were not shown because too many files have changed in this diff Show more
Loading…
Reference in a new issue