Merge branch 'master' into blender-tweaks
This commit is contained in:
@@ -9,10 +9,10 @@ return array(
|
|||||||
'names' => array(
|
'names' => array(
|
||||||
'conpherence.pkg.css' => 'e68cf1fa',
|
'conpherence.pkg.css' => 'e68cf1fa',
|
||||||
'conpherence.pkg.js' => '15191c65',
|
'conpherence.pkg.js' => '15191c65',
|
||||||
'core.pkg.css' => '84d8ab9a',
|
'core.pkg.css' => '5efaf405',
|
||||||
'core.pkg.js' => '2058ec09',
|
'core.pkg.js' => 'b5a949ca',
|
||||||
'differential.pkg.css' => '06dc617c',
|
'differential.pkg.css' => '06dc617c',
|
||||||
'differential.pkg.js' => 'ef19e026',
|
'differential.pkg.js' => 'c1cfa143',
|
||||||
'diffusion.pkg.css' => 'a2d17c7d',
|
'diffusion.pkg.css' => 'a2d17c7d',
|
||||||
'diffusion.pkg.js' => '6134c5a1',
|
'diffusion.pkg.js' => '6134c5a1',
|
||||||
'maniphest.pkg.css' => '4845691a',
|
'maniphest.pkg.css' => '4845691a',
|
||||||
@@ -75,7 +75,7 @@ return array(
|
|||||||
'rsrc/css/application/feed/feed.css' => 'ecd4ec57',
|
'rsrc/css/application/feed/feed.css' => 'ecd4ec57',
|
||||||
'rsrc/css/application/files/global-drag-and-drop.css' => 'b556a948',
|
'rsrc/css/application/files/global-drag-and-drop.css' => 'b556a948',
|
||||||
'rsrc/css/application/flag/flag.css' => 'bba8f811',
|
'rsrc/css/application/flag/flag.css' => 'bba8f811',
|
||||||
'rsrc/css/application/harbormaster/harbormaster.css' => '730a4a3c',
|
'rsrc/css/application/harbormaster/harbormaster.css' => '7446ce72',
|
||||||
'rsrc/css/application/herald/herald-test.css' => 'a52e323e',
|
'rsrc/css/application/herald/herald-test.css' => 'a52e323e',
|
||||||
'rsrc/css/application/herald/herald.css' => 'cd8d0134',
|
'rsrc/css/application/herald/herald.css' => 'cd8d0134',
|
||||||
'rsrc/css/application/maniphest/report.css' => '9b9580b7',
|
'rsrc/css/application/maniphest/report.css' => '9b9580b7',
|
||||||
@@ -122,7 +122,7 @@ return array(
|
|||||||
'rsrc/css/layout/phabricator-source-code-view.css' => '2ab25dfa',
|
'rsrc/css/layout/phabricator-source-code-view.css' => '2ab25dfa',
|
||||||
'rsrc/css/phui/button/phui-button-bar.css' => 'f1ff5494',
|
'rsrc/css/phui/button/phui-button-bar.css' => 'f1ff5494',
|
||||||
'rsrc/css/phui/button/phui-button-simple.css' => '8e1baf68',
|
'rsrc/css/phui/button/phui-button-simple.css' => '8e1baf68',
|
||||||
'rsrc/css/phui/button/phui-button.css' => '1863cc6e',
|
'rsrc/css/phui/button/phui-button.css' => '6ccb303c',
|
||||||
'rsrc/css/phui/calendar/phui-calendar-day.css' => '572b1893',
|
'rsrc/css/phui/calendar/phui-calendar-day.css' => '572b1893',
|
||||||
'rsrc/css/phui/calendar/phui-calendar-list.css' => '576be600',
|
'rsrc/css/phui/calendar/phui-calendar-list.css' => '576be600',
|
||||||
'rsrc/css/phui/calendar/phui-calendar-month.css' => '21154caf',
|
'rsrc/css/phui/calendar/phui-calendar-month.css' => '21154caf',
|
||||||
@@ -146,15 +146,15 @@ return array(
|
|||||||
'rsrc/css/phui/phui-comment-panel.css' => 'f50152ad',
|
'rsrc/css/phui/phui-comment-panel.css' => 'f50152ad',
|
||||||
'rsrc/css/phui/phui-crumbs-view.css' => '10728aaa',
|
'rsrc/css/phui/phui-crumbs-view.css' => '10728aaa',
|
||||||
'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' => 'dd79b5df',
|
||||||
'rsrc/css/phui/phui-document-summary.css' => '9ca48bdf',
|
'rsrc/css/phui/phui-document-summary.css' => '9ca48bdf',
|
||||||
'rsrc/css/phui/phui-document.css' => '878c2f52',
|
'rsrc/css/phui/phui-document.css' => 'c4ac41f9',
|
||||||
'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' => 'b446e8ff',
|
'rsrc/css/phui/phui-form-view.css' => '739c78df',
|
||||||
'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' => 'edeb9252',
|
'rsrc/css/phui/phui-header-view.css' => '1ba8b707',
|
||||||
'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' => 'cf24ceec',
|
'rsrc/css/phui/phui-icon.css' => 'cf24ceec',
|
||||||
@@ -375,12 +375,12 @@ return array(
|
|||||||
'rsrc/js/application/dashboard/behavior-dashboard-query-panel-select.js' => '453c5375',
|
'rsrc/js/application/dashboard/behavior-dashboard-query-panel-select.js' => '453c5375',
|
||||||
'rsrc/js/application/dashboard/behavior-dashboard-tab-panel.js' => 'd4eecc63',
|
'rsrc/js/application/dashboard/behavior-dashboard-tab-panel.js' => 'd4eecc63',
|
||||||
'rsrc/js/application/diff/DiffChangeset.js' => 'b49b59d6',
|
'rsrc/js/application/diff/DiffChangeset.js' => 'b49b59d6',
|
||||||
'rsrc/js/application/diff/DiffChangesetList.js' => 'f0ffe8c3',
|
'rsrc/js/application/diff/DiffChangesetList.js' => 'e0b984b5',
|
||||||
'rsrc/js/application/diff/DiffInline.js' => 'e83d28f3',
|
'rsrc/js/application/diff/DiffInline.js' => 'e83d28f3',
|
||||||
'rsrc/js/application/diff/behavior-preview-link.js' => '051c7832',
|
'rsrc/js/application/diff/behavior-preview-link.js' => '051c7832',
|
||||||
'rsrc/js/application/differential/behavior-comment-preview.js' => '51c5ad07',
|
'rsrc/js/application/differential/behavior-comment-preview.js' => '51c5ad07',
|
||||||
'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' => 'f0eb6708',
|
||||||
'rsrc/js/application/differential/behavior-user-select.js' => 'a8d8459d',
|
'rsrc/js/application/differential/behavior-user-select.js' => 'a8d8459d',
|
||||||
'rsrc/js/application/diffusion/DiffusionLocateFileSource.js' => '00676f00',
|
'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',
|
||||||
@@ -395,7 +395,7 @@ return array(
|
|||||||
'rsrc/js/application/files/behavior-launch-icon-composer.js' => '48086888',
|
'rsrc/js/application/files/behavior-launch-icon-composer.js' => '48086888',
|
||||||
'rsrc/js/application/harbormaster/behavior-harbormaster-log.js' => '549459b8',
|
'rsrc/js/application/harbormaster/behavior-harbormaster-log.js' => '549459b8',
|
||||||
'rsrc/js/application/herald/HeraldRuleEditor.js' => 'dca75c0e',
|
'rsrc/js/application/herald/HeraldRuleEditor.js' => 'dca75c0e',
|
||||||
'rsrc/js/application/herald/PathTypeahead.js' => '662e9cea',
|
'rsrc/js/application/herald/PathTypeahead.js' => '6d8c7912',
|
||||||
'rsrc/js/application/herald/herald-rule-editor.js' => '7ebaeed3',
|
'rsrc/js/application/herald/herald-rule-editor.js' => '7ebaeed3',
|
||||||
'rsrc/js/application/maniphest/behavior-batch-selector.js' => 'ad54037e',
|
'rsrc/js/application/maniphest/behavior-batch-selector.js' => 'ad54037e',
|
||||||
'rsrc/js/application/maniphest/behavior-line-chart.js' => 'e4232876',
|
'rsrc/js/application/maniphest/behavior-line-chart.js' => 'e4232876',
|
||||||
@@ -425,7 +425,7 @@ return array(
|
|||||||
'rsrc/js/application/search/behavior-reorder-profile-menu-items.js' => 'e2e0a072',
|
'rsrc/js/application/search/behavior-reorder-profile-menu-items.js' => 'e2e0a072',
|
||||||
'rsrc/js/application/search/behavior-reorder-queries.js' => 'e9581f08',
|
'rsrc/js/application/search/behavior-reorder-queries.js' => 'e9581f08',
|
||||||
'rsrc/js/application/slowvote/behavior-slowvote-embed.js' => '887ad43f',
|
'rsrc/js/application/slowvote/behavior-slowvote-embed.js' => '887ad43f',
|
||||||
'rsrc/js/application/transactions/behavior-comment-actions.js' => '9a6dd75c',
|
'rsrc/js/application/transactions/behavior-comment-actions.js' => '038bf27f',
|
||||||
'rsrc/js/application/transactions/behavior-reorder-configs.js' => 'd7a74243',
|
'rsrc/js/application/transactions/behavior-reorder-configs.js' => 'd7a74243',
|
||||||
'rsrc/js/application/transactions/behavior-reorder-fields.js' => 'b59e1e96',
|
'rsrc/js/application/transactions/behavior-reorder-fields.js' => 'b59e1e96',
|
||||||
'rsrc/js/application/transactions/behavior-show-older-transactions.js' => '8f29b364',
|
'rsrc/js/application/transactions/behavior-show-older-transactions.js' => '8f29b364',
|
||||||
@@ -475,7 +475,7 @@ return array(
|
|||||||
'rsrc/js/core/behavior-more.js' => 'a80d0378',
|
'rsrc/js/core/behavior-more.js' => 'a80d0378',
|
||||||
'rsrc/js/core/behavior-object-selector.js' => '77c1f0b0',
|
'rsrc/js/core/behavior-object-selector.js' => '77c1f0b0',
|
||||||
'rsrc/js/core/behavior-oncopy.js' => '2926fff2',
|
'rsrc/js/core/behavior-oncopy.js' => '2926fff2',
|
||||||
'rsrc/js/core/behavior-phabricator-nav.js' => '94b7c320',
|
'rsrc/js/core/behavior-phabricator-nav.js' => '9d32bc88',
|
||||||
'rsrc/js/core/behavior-phabricator-remarkup-assist.js' => 'acd29eee',
|
'rsrc/js/core/behavior-phabricator-remarkup-assist.js' => 'acd29eee',
|
||||||
'rsrc/js/core/behavior-read-only-warning.js' => 'ba158207',
|
'rsrc/js/core/behavior-read-only-warning.js' => 'ba158207',
|
||||||
'rsrc/js/core/behavior-redirect.js' => '0213259f',
|
'rsrc/js/core/behavior-redirect.js' => '0213259f',
|
||||||
@@ -508,7 +508,7 @@ return array(
|
|||||||
'rsrc/js/phuix/PHUIXActionListView.js' => 'b5c256b8',
|
'rsrc/js/phuix/PHUIXActionListView.js' => 'b5c256b8',
|
||||||
'rsrc/js/phuix/PHUIXActionView.js' => '8d4a8c72',
|
'rsrc/js/phuix/PHUIXActionView.js' => '8d4a8c72',
|
||||||
'rsrc/js/phuix/PHUIXAutocomplete.js' => 'df1bbd34',
|
'rsrc/js/phuix/PHUIXAutocomplete.js' => 'df1bbd34',
|
||||||
'rsrc/js/phuix/PHUIXButtonView.js' => '8a91e1ac',
|
'rsrc/js/phuix/PHUIXButtonView.js' => '85ac9772',
|
||||||
'rsrc/js/phuix/PHUIXDropdownMenu.js' => '04b2ae03',
|
'rsrc/js/phuix/PHUIXDropdownMenu.js' => '04b2ae03',
|
||||||
'rsrc/js/phuix/PHUIXExample.js' => '68af71ca',
|
'rsrc/js/phuix/PHUIXExample.js' => '68af71ca',
|
||||||
'rsrc/js/phuix/PHUIXFormControl.js' => '210a16c1',
|
'rsrc/js/phuix/PHUIXFormControl.js' => '210a16c1',
|
||||||
@@ -556,7 +556,7 @@ return array(
|
|||||||
'font-fontawesome' => 'e838e088',
|
'font-fontawesome' => 'e838e088',
|
||||||
'font-lato' => 'c7ccd872',
|
'font-lato' => 'c7ccd872',
|
||||||
'global-drag-and-drop-css' => 'b556a948',
|
'global-drag-and-drop-css' => 'b556a948',
|
||||||
'harbormaster-css' => '730a4a3c',
|
'harbormaster-css' => '7446ce72',
|
||||||
'herald-css' => 'cd8d0134',
|
'herald-css' => 'cd8d0134',
|
||||||
'herald-rule-editor' => 'dca75c0e',
|
'herald-rule-editor' => 'dca75c0e',
|
||||||
'herald-test-css' => 'a52e323e',
|
'herald-test-css' => 'a52e323e',
|
||||||
@@ -577,7 +577,7 @@ return array(
|
|||||||
'javelin-behavior-bulk-job-reload' => 'edf8a145',
|
'javelin-behavior-bulk-job-reload' => 'edf8a145',
|
||||||
'javelin-behavior-calendar-month-view' => 'fe33e256',
|
'javelin-behavior-calendar-month-view' => 'fe33e256',
|
||||||
'javelin-behavior-choose-control' => '327a00d1',
|
'javelin-behavior-choose-control' => '327a00d1',
|
||||||
'javelin-behavior-comment-actions' => '9a6dd75c',
|
'javelin-behavior-comment-actions' => '038bf27f',
|
||||||
'javelin-behavior-config-reorder-fields' => 'b6993408',
|
'javelin-behavior-config-reorder-fields' => 'b6993408',
|
||||||
'javelin-behavior-conpherence-menu' => '4047cd35',
|
'javelin-behavior-conpherence-menu' => '4047cd35',
|
||||||
'javelin-behavior-conpherence-participant-pane' => 'd057e45a',
|
'javelin-behavior-conpherence-participant-pane' => 'd057e45a',
|
||||||
@@ -596,7 +596,7 @@ return array(
|
|||||||
'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',
|
||||||
'javelin-behavior-differential-populate' => '419998ab',
|
'javelin-behavior-differential-populate' => 'f0eb6708',
|
||||||
'javelin-behavior-differential-user-select' => 'a8d8459d',
|
'javelin-behavior-differential-user-select' => 'a8d8459d',
|
||||||
'javelin-behavior-diffusion-commit-branches' => 'bdaf4d04',
|
'javelin-behavior-diffusion-commit-branches' => 'bdaf4d04',
|
||||||
'javelin-behavior-diffusion-commit-graph' => '75b83cbb',
|
'javelin-behavior-diffusion-commit-graph' => '75b83cbb',
|
||||||
@@ -633,7 +633,7 @@ return array(
|
|||||||
'javelin-behavior-phabricator-keyboard-pager' => 'a8da01f0',
|
'javelin-behavior-phabricator-keyboard-pager' => 'a8da01f0',
|
||||||
'javelin-behavior-phabricator-keyboard-shortcuts' => '01fca1f0',
|
'javelin-behavior-phabricator-keyboard-shortcuts' => '01fca1f0',
|
||||||
'javelin-behavior-phabricator-line-linker' => '66a62306',
|
'javelin-behavior-phabricator-line-linker' => '66a62306',
|
||||||
'javelin-behavior-phabricator-nav' => '94b7c320',
|
'javelin-behavior-phabricator-nav' => '9d32bc88',
|
||||||
'javelin-behavior-phabricator-notification-example' => '8ce821c5',
|
'javelin-behavior-phabricator-notification-example' => '8ce821c5',
|
||||||
'javelin-behavior-phabricator-object-selector' => '77c1f0b0',
|
'javelin-behavior-phabricator-object-selector' => '77c1f0b0',
|
||||||
'javelin-behavior-phabricator-oncopy' => '2926fff2',
|
'javelin-behavior-phabricator-oncopy' => '2926fff2',
|
||||||
@@ -741,7 +741,7 @@ return array(
|
|||||||
'owners-path-editor' => 'c96502cf',
|
'owners-path-editor' => 'c96502cf',
|
||||||
'owners-path-editor-css' => '9c136c29',
|
'owners-path-editor-css' => '9c136c29',
|
||||||
'paste-css' => '9fcc9773',
|
'paste-css' => '9fcc9773',
|
||||||
'path-typeahead' => '662e9cea',
|
'path-typeahead' => '6d8c7912',
|
||||||
'people-picture-menu-item-css' => 'a06f7f34',
|
'people-picture-menu-item-css' => 'a06f7f34',
|
||||||
'people-profile-css' => '4df76faf',
|
'people-profile-css' => '4df76faf',
|
||||||
'phabricator-action-list-view-css' => '0bcd9a45',
|
'phabricator-action-list-view-css' => '0bcd9a45',
|
||||||
@@ -754,7 +754,7 @@ return array(
|
|||||||
'phabricator-darkmessage' => 'c48cccdd',
|
'phabricator-darkmessage' => 'c48cccdd',
|
||||||
'phabricator-dashboard-css' => 'fe5b1869',
|
'phabricator-dashboard-css' => 'fe5b1869',
|
||||||
'phabricator-diff-changeset' => 'b49b59d6',
|
'phabricator-diff-changeset' => 'b49b59d6',
|
||||||
'phabricator-diff-changeset-list' => 'f0ffe8c3',
|
'phabricator-diff-changeset-list' => 'e0b984b5',
|
||||||
'phabricator-diff-inline' => 'e83d28f3',
|
'phabricator-diff-inline' => 'e83d28f3',
|
||||||
'phabricator-drag-and-drop-file-upload' => '58dea2fa',
|
'phabricator-drag-and-drop-file-upload' => '58dea2fa',
|
||||||
'phabricator-draggable-list' => 'bea6e7f4',
|
'phabricator-draggable-list' => 'bea6e7f4',
|
||||||
@@ -803,7 +803,7 @@ return array(
|
|||||||
'phui-box-css' => '4bd6cdb9',
|
'phui-box-css' => '4bd6cdb9',
|
||||||
'phui-bulk-editor-css' => '9a81e5d5',
|
'phui-bulk-editor-css' => '9a81e5d5',
|
||||||
'phui-button-bar-css' => 'f1ff5494',
|
'phui-button-bar-css' => 'f1ff5494',
|
||||||
'phui-button-css' => '1863cc6e',
|
'phui-button-css' => '6ccb303c',
|
||||||
'phui-button-simple-css' => '8e1baf68',
|
'phui-button-simple-css' => '8e1baf68',
|
||||||
'phui-calendar-css' => 'f1ddf11c',
|
'phui-calendar-css' => 'f1ddf11c',
|
||||||
'phui-calendar-day-css' => '572b1893',
|
'phui-calendar-day-css' => '572b1893',
|
||||||
@@ -816,15 +816,15 @@ return array(
|
|||||||
'phui-crumbs-view-css' => '10728aaa',
|
'phui-crumbs-view-css' => '10728aaa',
|
||||||
'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' => '878c2f52',
|
'phui-document-view-css' => 'c4ac41f9',
|
||||||
'phui-document-view-pro-css' => '8af7ea27',
|
'phui-document-view-pro-css' => 'dd79b5df',
|
||||||
'phui-feed-story-css' => '44a9c8e9',
|
'phui-feed-story-css' => '44a9c8e9',
|
||||||
'phui-font-icon-base-css' => '870a7360',
|
'phui-font-icon-base-css' => '870a7360',
|
||||||
'phui-fontkit-css' => '1320ed01',
|
'phui-fontkit-css' => '1320ed01',
|
||||||
'phui-form-css' => '7aaa04e3',
|
'phui-form-css' => '7aaa04e3',
|
||||||
'phui-form-view-css' => 'b446e8ff',
|
'phui-form-view-css' => '739c78df',
|
||||||
'phui-head-thing-view-css' => 'fd311e5f',
|
'phui-head-thing-view-css' => 'fd311e5f',
|
||||||
'phui-header-view-css' => 'edeb9252',
|
'phui-header-view-css' => '1ba8b707',
|
||||||
'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',
|
||||||
@@ -861,7 +861,7 @@ return array(
|
|||||||
'phuix-action-list-view' => 'b5c256b8',
|
'phuix-action-list-view' => 'b5c256b8',
|
||||||
'phuix-action-view' => '8d4a8c72',
|
'phuix-action-view' => '8d4a8c72',
|
||||||
'phuix-autocomplete' => 'df1bbd34',
|
'phuix-autocomplete' => 'df1bbd34',
|
||||||
'phuix-button-view' => '8a91e1ac',
|
'phuix-button-view' => '85ac9772',
|
||||||
'phuix-dropdown-menu' => '04b2ae03',
|
'phuix-dropdown-menu' => '04b2ae03',
|
||||||
'phuix-form-control-view' => '210a16c1',
|
'phuix-form-control-view' => '210a16c1',
|
||||||
'phuix-icon-view' => 'bff6884b',
|
'phuix-icon-view' => 'bff6884b',
|
||||||
@@ -908,6 +908,15 @@ return array(
|
|||||||
'javelin-behavior',
|
'javelin-behavior',
|
||||||
'javelin-uri',
|
'javelin-uri',
|
||||||
),
|
),
|
||||||
|
'038bf27f' => array(
|
||||||
|
'javelin-behavior',
|
||||||
|
'javelin-stratcom',
|
||||||
|
'javelin-workflow',
|
||||||
|
'javelin-dom',
|
||||||
|
'phuix-form-control-view',
|
||||||
|
'phuix-icon-view',
|
||||||
|
'javelin-behavior-phabricator-gesture',
|
||||||
|
),
|
||||||
'040fce04' => array(
|
'040fce04' => array(
|
||||||
'javelin-behavior',
|
'javelin-behavior',
|
||||||
'javelin-request',
|
'javelin-request',
|
||||||
@@ -1133,14 +1142,6 @@ return array(
|
|||||||
'javelin-workflow',
|
'javelin-workflow',
|
||||||
'phabricator-draggable-list',
|
'phabricator-draggable-list',
|
||||||
),
|
),
|
||||||
'419998ab' => array(
|
|
||||||
'javelin-behavior',
|
|
||||||
'javelin-dom',
|
|
||||||
'javelin-stratcom',
|
|
||||||
'phabricator-tooltip',
|
|
||||||
'phabricator-diff-changeset-list',
|
|
||||||
'phabricator-diff-changeset',
|
|
||||||
),
|
|
||||||
'4250a34e' => array(
|
'4250a34e' => array(
|
||||||
'javelin-behavior',
|
'javelin-behavior',
|
||||||
'javelin-dom',
|
'javelin-dom',
|
||||||
@@ -1361,14 +1362,6 @@ return array(
|
|||||||
'javelin-workflow',
|
'javelin-workflow',
|
||||||
'javelin-dom',
|
'javelin-dom',
|
||||||
),
|
),
|
||||||
'662e9cea' => array(
|
|
||||||
'javelin-install',
|
|
||||||
'javelin-typeahead',
|
|
||||||
'javelin-dom',
|
|
||||||
'javelin-request',
|
|
||||||
'javelin-typeahead-ondemand-source',
|
|
||||||
'javelin-util',
|
|
||||||
),
|
|
||||||
66888767 => array(
|
66888767 => array(
|
||||||
'javelin-behavior',
|
'javelin-behavior',
|
||||||
'javelin-stratcom',
|
'javelin-stratcom',
|
||||||
@@ -1444,6 +1437,14 @@ return array(
|
|||||||
'javelin-typeahead',
|
'javelin-typeahead',
|
||||||
'javelin-uri',
|
'javelin-uri',
|
||||||
),
|
),
|
||||||
|
'6d8c7912' => array(
|
||||||
|
'javelin-install',
|
||||||
|
'javelin-typeahead',
|
||||||
|
'javelin-dom',
|
||||||
|
'javelin-request',
|
||||||
|
'javelin-typeahead-ondemand-source',
|
||||||
|
'javelin-util',
|
||||||
|
),
|
||||||
'70baed2f' => array(
|
'70baed2f' => array(
|
||||||
'javelin-install',
|
'javelin-install',
|
||||||
'javelin-dom',
|
'javelin-dom',
|
||||||
@@ -1540,6 +1541,10 @@ return array(
|
|||||||
'javelin-dom',
|
'javelin-dom',
|
||||||
'javelin-stratcom',
|
'javelin-stratcom',
|
||||||
),
|
),
|
||||||
|
'85ac9772' => array(
|
||||||
|
'javelin-install',
|
||||||
|
'javelin-dom',
|
||||||
|
),
|
||||||
'85ee8ce6' => array(
|
'85ee8ce6' => array(
|
||||||
'aphront-dialog-view-css',
|
'aphront-dialog-view-css',
|
||||||
),
|
),
|
||||||
@@ -1567,10 +1572,6 @@ return array(
|
|||||||
'javelin-install',
|
'javelin-install',
|
||||||
'javelin-dom',
|
'javelin-dom',
|
||||||
),
|
),
|
||||||
'8a91e1ac' => array(
|
|
||||||
'javelin-install',
|
|
||||||
'javelin-dom',
|
|
||||||
),
|
|
||||||
'8ce821c5' => array(
|
'8ce821c5' => array(
|
||||||
'phabricator-notification',
|
'phabricator-notification',
|
||||||
'javelin-stratcom',
|
'javelin-stratcom',
|
||||||
@@ -1630,16 +1631,6 @@ return array(
|
|||||||
'javelin-resource',
|
'javelin-resource',
|
||||||
'javelin-routable',
|
'javelin-routable',
|
||||||
),
|
),
|
||||||
'94b7c320' => array(
|
|
||||||
'javelin-behavior',
|
|
||||||
'javelin-behavior-device',
|
|
||||||
'javelin-stratcom',
|
|
||||||
'javelin-dom',
|
|
||||||
'javelin-magical-init',
|
|
||||||
'javelin-vector',
|
|
||||||
'javelin-request',
|
|
||||||
'javelin-util',
|
|
||||||
),
|
|
||||||
'960f6a39' => array(
|
'960f6a39' => array(
|
||||||
'javelin-behavior',
|
'javelin-behavior',
|
||||||
'javelin-dom',
|
'javelin-dom',
|
||||||
@@ -1647,15 +1638,6 @@ return array(
|
|||||||
'javelin-mask',
|
'javelin-mask',
|
||||||
'phabricator-drag-and-drop-file-upload',
|
'phabricator-drag-and-drop-file-upload',
|
||||||
),
|
),
|
||||||
'9a6dd75c' => array(
|
|
||||||
'javelin-behavior',
|
|
||||||
'javelin-stratcom',
|
|
||||||
'javelin-workflow',
|
|
||||||
'javelin-dom',
|
|
||||||
'phuix-form-control-view',
|
|
||||||
'phuix-icon-view',
|
|
||||||
'javelin-behavior-phabricator-gesture',
|
|
||||||
),
|
|
||||||
'9a860428' => array(
|
'9a860428' => array(
|
||||||
'javelin-behavior',
|
'javelin-behavior',
|
||||||
'javelin-dom',
|
'javelin-dom',
|
||||||
@@ -1669,6 +1651,16 @@ return array(
|
|||||||
'javelin-workflow',
|
'javelin-workflow',
|
||||||
'javelin-stratcom',
|
'javelin-stratcom',
|
||||||
),
|
),
|
||||||
|
'9d32bc88' => array(
|
||||||
|
'javelin-behavior',
|
||||||
|
'javelin-behavior-device',
|
||||||
|
'javelin-stratcom',
|
||||||
|
'javelin-dom',
|
||||||
|
'javelin-magical-init',
|
||||||
|
'javelin-vector',
|
||||||
|
'javelin-request',
|
||||||
|
'javelin-util',
|
||||||
|
),
|
||||||
'9d9685d6' => array(
|
'9d9685d6' => array(
|
||||||
'phui-oi-list-view-css',
|
'phui-oi-list-view-css',
|
||||||
),
|
),
|
||||||
@@ -2028,6 +2020,10 @@ return array(
|
|||||||
'phuix-icon-view',
|
'phuix-icon-view',
|
||||||
'phabricator-prefab',
|
'phabricator-prefab',
|
||||||
),
|
),
|
||||||
|
'e0b984b5' => array(
|
||||||
|
'javelin-install',
|
||||||
|
'phuix-button-view',
|
||||||
|
),
|
||||||
'e1d25dfb' => array(
|
'e1d25dfb' => array(
|
||||||
'javelin-behavior',
|
'javelin-behavior',
|
||||||
'javelin-stratcom',
|
'javelin-stratcom',
|
||||||
@@ -2120,9 +2116,13 @@ return array(
|
|||||||
'javelin-workflow',
|
'javelin-workflow',
|
||||||
'javelin-json',
|
'javelin-json',
|
||||||
),
|
),
|
||||||
'f0ffe8c3' => array(
|
'f0eb6708' => array(
|
||||||
'javelin-install',
|
'javelin-behavior',
|
||||||
'phuix-button-view',
|
'javelin-dom',
|
||||||
|
'javelin-stratcom',
|
||||||
|
'phabricator-tooltip',
|
||||||
|
'phabricator-diff-changeset-list',
|
||||||
|
'phabricator-diff-changeset',
|
||||||
),
|
),
|
||||||
'f1ff5494' => array(
|
'f1ff5494' => array(
|
||||||
'phui-button-css',
|
'phui-button-css',
|
||||||
|
|||||||
@@ -0,0 +1,20 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
// Advise installs to rebuild the repository identities.
|
||||||
|
|
||||||
|
// If the install has no commits (or no commits that lack an
|
||||||
|
// authorIdentityPHID), don't require a rebuild.
|
||||||
|
$commits = id(new PhabricatorRepositoryCommit())
|
||||||
|
->loadAllWhere('authorIdentityPHID IS NULL LIMIT 1');
|
||||||
|
|
||||||
|
if (!$commits) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
try {
|
||||||
|
id(new PhabricatorConfigManualActivity())
|
||||||
|
->setActivityType(PhabricatorConfigManualActivity::TYPE_IDENTITIES)
|
||||||
|
->save();
|
||||||
|
} catch (AphrontDuplicateKeyQueryException $ex) {
|
||||||
|
// If we've already noted that this activity is required, just move on.
|
||||||
|
}
|
||||||
@@ -0,0 +1,2 @@
|
|||||||
|
ALTER TABLE {$NAMESPACE}_drydock.drydock_lease
|
||||||
|
ADD acquiredEpoch INT UNSIGNED;
|
||||||
@@ -0,0 +1,2 @@
|
|||||||
|
ALTER TABLE {$NAMESPACE}_drydock.drydock_lease
|
||||||
|
ADD activatedEpoch INT UNSIGNED;
|
||||||
@@ -0,0 +1,2 @@
|
|||||||
|
ALTER TABLE {$NAMESPACE}_phriction.phriction_document
|
||||||
|
ADD contentPHID VARBINARY(64) NOT NULL;
|
||||||
@@ -0,0 +1,2 @@
|
|||||||
|
ALTER TABLE {$NAMESPACE}_phriction.phriction_content
|
||||||
|
ADD documentPHID VARBINARY(64) NOT NULL;
|
||||||
@@ -0,0 +1,2 @@
|
|||||||
|
ALTER TABLE {$NAMESPACE}_phriction.phriction_document
|
||||||
|
ADD editedEpoch INT UNSIGNED NOT NULL;
|
||||||
57
resources/sql/autopatches/20180828.phriction.04.migrate.php
Normal file
57
resources/sql/autopatches/20180828.phriction.04.migrate.php
Normal file
@@ -0,0 +1,57 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
// Update the PhrictionDocument and PhrictionContent tables to refer to one
|
||||||
|
// another by PHID instead of by ID.
|
||||||
|
|
||||||
|
$document_table = new PhrictionDocument();
|
||||||
|
$content_table = new PhrictionContent();
|
||||||
|
|
||||||
|
$conn = $document_table->establishConnection('w');
|
||||||
|
|
||||||
|
$document_iterator = new LiskRawMigrationIterator(
|
||||||
|
$conn,
|
||||||
|
$document_table->getTableName());
|
||||||
|
foreach ($document_iterator as $row) {
|
||||||
|
$content_id = $row['contentID'];
|
||||||
|
|
||||||
|
$content_row = queryfx_one(
|
||||||
|
$conn,
|
||||||
|
'SELECT phid, dateCreated FROM %T WHERE id = %d',
|
||||||
|
$content_table->getTableName(),
|
||||||
|
$content_id);
|
||||||
|
|
||||||
|
if (!$content_row) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
queryfx(
|
||||||
|
$conn,
|
||||||
|
'UPDATE %T SET contentPHID = %s, editedEpoch = %d WHERE id = %d',
|
||||||
|
$document_table->getTableName(),
|
||||||
|
$content_row['phid'],
|
||||||
|
$content_row['dateCreated'],
|
||||||
|
$row['id']);
|
||||||
|
}
|
||||||
|
|
||||||
|
$content_iterator = new LiskRawMigrationIterator(
|
||||||
|
$conn,
|
||||||
|
$content_table->getTableName());
|
||||||
|
foreach ($content_iterator as $row) {
|
||||||
|
$document_id = $row['documentID'];
|
||||||
|
|
||||||
|
$document_row = queryfx_one(
|
||||||
|
$conn,
|
||||||
|
'SELECT phid FROM %T WHERE id = %d',
|
||||||
|
$document_table->getTableName(),
|
||||||
|
$document_id);
|
||||||
|
if (!$document_row) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
queryfx(
|
||||||
|
$conn,
|
||||||
|
'UPDATE %T SET documentPHID = %s WHERE id = %d',
|
||||||
|
$content_table->getTableName(),
|
||||||
|
$document_row['phid'],
|
||||||
|
$row['id']);
|
||||||
|
}
|
||||||
@@ -0,0 +1,2 @@
|
|||||||
|
ALTER TABLE {$NAMESPACE}_phriction.phriction_document
|
||||||
|
DROP contentID;
|
||||||
@@ -0,0 +1,20 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
// See T13193. We're about to drop the "documentID" column, which is part of
|
||||||
|
// a UNIQUE KEY. In MariaDB, we must first drop the "documentID" key or we get
|
||||||
|
// into deep trouble.
|
||||||
|
|
||||||
|
// There's no "IF EXISTS" modifier for "ALTER TABLE" so run this as a PHP patch
|
||||||
|
// instead of an SQL patch.
|
||||||
|
|
||||||
|
$table = new PhrictionContent();
|
||||||
|
$conn = $table->establishConnection('w');
|
||||||
|
|
||||||
|
try {
|
||||||
|
queryfx(
|
||||||
|
$conn,
|
||||||
|
'ALTER TABLE %T DROP KEY documentID',
|
||||||
|
$table->getTableName());
|
||||||
|
} catch (AphrontQueryException $ex) {
|
||||||
|
// Ignore.
|
||||||
|
}
|
||||||
@@ -0,0 +1,2 @@
|
|||||||
|
ALTER TABLE {$NAMESPACE}_phriction.phriction_content
|
||||||
|
DROP documentID;
|
||||||
@@ -0,0 +1 @@
|
|||||||
|
DELETE FROM {$NAMESPACE}_phriction.phriction_content WHERE documentPHID = '';
|
||||||
@@ -0,0 +1,2 @@
|
|||||||
|
ALTER TABLE {$NAMESPACE}_phriction.phriction_content
|
||||||
|
ADD UNIQUE KEY `key_version` (documentPHID, version);
|
||||||
26
resources/sql/autopatches/20180829.phriction.01.mailkey.php
Normal file
26
resources/sql/autopatches/20180829.phriction.01.mailkey.php
Normal file
@@ -0,0 +1,26 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
$document_table = new PhrictionDocument();
|
||||||
|
$document_conn = $document_table->establishConnection('w');
|
||||||
|
$document_name = $document_table->getTableName();
|
||||||
|
|
||||||
|
$properties_table = new PhabricatorMetaMTAMailProperties();
|
||||||
|
$conn = $properties_table->establishConnection('w');
|
||||||
|
|
||||||
|
$iterator = new LiskRawMigrationIterator($document_conn, $document_name);
|
||||||
|
foreach ($iterator as $row) {
|
||||||
|
queryfx(
|
||||||
|
$conn,
|
||||||
|
'INSERT IGNORE INTO %T
|
||||||
|
(objectPHID, mailProperties, dateCreated, dateModified)
|
||||||
|
VALUES
|
||||||
|
(%s, %s, %d, %d)',
|
||||||
|
$properties_table->getTableName(),
|
||||||
|
$row['phid'],
|
||||||
|
phutil_json_encode(
|
||||||
|
array(
|
||||||
|
'mailKey' => $row['mailKey'],
|
||||||
|
)),
|
||||||
|
PhabricatorTime::getNow(),
|
||||||
|
PhabricatorTime::getNow());
|
||||||
|
}
|
||||||
@@ -0,0 +1,2 @@
|
|||||||
|
ALTER TABLE {$NAMESPACE}_phriction.phriction_document
|
||||||
|
DROP mailKey;
|
||||||
@@ -0,0 +1,2 @@
|
|||||||
|
ALTER TABLE {$NAMESPACE}_phriction.phriction_document
|
||||||
|
ADD maxVersion INT UNSIGNED NOT NULL;
|
||||||
30
resources/sql/autopatches/20180830.phriction.02.maxes.php
Normal file
30
resources/sql/autopatches/20180830.phriction.02.maxes.php
Normal file
@@ -0,0 +1,30 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
// Populate the "maxVersion" column by copying the maximum "version" from the
|
||||||
|
// content table.
|
||||||
|
|
||||||
|
$document_table = new PhrictionDocument();
|
||||||
|
$content_table = new PhrictionContent();
|
||||||
|
|
||||||
|
$conn = $document_table->establishConnection('w');
|
||||||
|
|
||||||
|
$iterator = new LiskRawMigrationIterator(
|
||||||
|
$conn,
|
||||||
|
$document_table->getTableName());
|
||||||
|
foreach ($iterator as $row) {
|
||||||
|
$content = queryfx_one(
|
||||||
|
$conn,
|
||||||
|
'SELECT MAX(version) max FROM %T WHERE documentPHID = %s',
|
||||||
|
$content_table->getTableName(),
|
||||||
|
$row['phid']);
|
||||||
|
if (!$content) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
queryfx(
|
||||||
|
$conn,
|
||||||
|
'UPDATE %T SET maxVersion = %d WHERE id = %d',
|
||||||
|
$document_table->getTableName(),
|
||||||
|
$content['max'],
|
||||||
|
$row['id']);
|
||||||
|
}
|
||||||
54
resources/sql/autopatches/20180910.audit.01.searches.php
Normal file
54
resources/sql/autopatches/20180910.audit.01.searches.php
Normal file
@@ -0,0 +1,54 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
$table = new PhabricatorSavedQuery();
|
||||||
|
$conn = $table->establishConnection('w');
|
||||||
|
|
||||||
|
$status_map = array(
|
||||||
|
0 => 'none',
|
||||||
|
1 => 'needs-audit',
|
||||||
|
2 => 'concern-raised',
|
||||||
|
3 => 'partially-audited',
|
||||||
|
4 => 'audited',
|
||||||
|
5 => 'needs-verification',
|
||||||
|
);
|
||||||
|
|
||||||
|
foreach (new LiskMigrationIterator($table) as $query) {
|
||||||
|
if ($query->getEngineClassName() !== 'PhabricatorCommitSearchEngine') {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
$parameters = $query->getParameters();
|
||||||
|
$status = idx($parameters, 'statuses');
|
||||||
|
|
||||||
|
if (!$status) {
|
||||||
|
// No saved "status" constraint.
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!is_array($status)) {
|
||||||
|
// Saved constraint isn't a list.
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Migrate old integer values to new string values.
|
||||||
|
$old_status = $status;
|
||||||
|
foreach ($status as $key => $value) {
|
||||||
|
if (is_numeric($value)) {
|
||||||
|
$status[$key] = $status_map[$value];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if ($status === $old_status) {
|
||||||
|
// Nothing changed.
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
$parameters['statuses'] = $status;
|
||||||
|
|
||||||
|
queryfx(
|
||||||
|
$conn,
|
||||||
|
'UPDATE %T SET parameters = %s WHERE id = %d',
|
||||||
|
$table->getTableName(),
|
||||||
|
phutil_json_encode($parameters),
|
||||||
|
$query->getID());
|
||||||
|
}
|
||||||
2
resources/sql/autopatches/20180910.audit.02.string.sql
Normal file
2
resources/sql/autopatches/20180910.audit.02.string.sql
Normal file
@@ -0,0 +1,2 @@
|
|||||||
|
ALTER TABLE {$NAMESPACE}_repository.repository_commit
|
||||||
|
CHANGE auditStatus auditStatus VARCHAR(32) NOT NULL COLLATE {$COLLATE_TEXT};
|
||||||
28
resources/sql/autopatches/20180910.audit.03.status.php
Normal file
28
resources/sql/autopatches/20180910.audit.03.status.php
Normal file
@@ -0,0 +1,28 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
$table = new PhabricatorRepositoryCommit();
|
||||||
|
$conn = $table->establishConnection('w');
|
||||||
|
|
||||||
|
$status_map = array(
|
||||||
|
0 => 'none',
|
||||||
|
1 => 'needs-audit',
|
||||||
|
2 => 'concern-raised',
|
||||||
|
3 => 'partially-audited',
|
||||||
|
4 => 'audited',
|
||||||
|
5 => 'needs-verification',
|
||||||
|
);
|
||||||
|
|
||||||
|
foreach (new LiskMigrationIterator($table) as $commit) {
|
||||||
|
$status = $commit->getAuditStatus();
|
||||||
|
|
||||||
|
if (!isset($status_map[$status])) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
queryfx(
|
||||||
|
$conn,
|
||||||
|
'UPDATE %T SET auditStatus = %s WHERE id = %d',
|
||||||
|
$table->getTableName(),
|
||||||
|
$status_map[$status],
|
||||||
|
$commit->getID());
|
||||||
|
}
|
||||||
48
resources/sql/autopatches/20180910.audit.04.xactions.php
Normal file
48
resources/sql/autopatches/20180910.audit.04.xactions.php
Normal file
@@ -0,0 +1,48 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
$table = new PhabricatorAuditTransaction();
|
||||||
|
$conn = $table->establishConnection('w');
|
||||||
|
|
||||||
|
$status_map = array(
|
||||||
|
0 => 'none',
|
||||||
|
1 => 'needs-audit',
|
||||||
|
2 => 'concern-raised',
|
||||||
|
3 => 'partially-audited',
|
||||||
|
4 => 'audited',
|
||||||
|
5 => 'needs-verification',
|
||||||
|
);
|
||||||
|
|
||||||
|
$state_type = DiffusionCommitStateTransaction::TRANSACTIONTYPE;
|
||||||
|
|
||||||
|
foreach (new LiskMigrationIterator($table) as $xaction) {
|
||||||
|
if ($xaction->getTransactionType() !== $state_type) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
$old_value = $xaction->getOldValue();
|
||||||
|
$new_value = $xaction->getNewValue();
|
||||||
|
|
||||||
|
$any_change = false;
|
||||||
|
|
||||||
|
if (isset($status_map[$old_value])) {
|
||||||
|
$old_value = $status_map[$old_value];
|
||||||
|
$any_change = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (isset($status_map[$new_value])) {
|
||||||
|
$new_value = $status_map[$new_value];
|
||||||
|
$any_change = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!$any_change) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
queryfx(
|
||||||
|
$conn,
|
||||||
|
'UPDATE %T SET oldValue = %s, newValue = %s WHERE id = %d',
|
||||||
|
$table->getTableName(),
|
||||||
|
phutil_json_encode($old_value),
|
||||||
|
phutil_json_encode($new_value),
|
||||||
|
$xaction->getID());
|
||||||
|
}
|
||||||
26
resources/sql/autopatches/20180914.audit.01.mailkey.php
Normal file
26
resources/sql/autopatches/20180914.audit.01.mailkey.php
Normal file
@@ -0,0 +1,26 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
$commit_table = new PhabricatorRepositoryCommit();
|
||||||
|
$commit_conn = $commit_table->establishConnection('w');
|
||||||
|
$commit_name = $commit_table->getTableName();
|
||||||
|
|
||||||
|
$properties_table = new PhabricatorMetaMTAMailProperties();
|
||||||
|
$conn = $properties_table->establishConnection('w');
|
||||||
|
|
||||||
|
$iterator = new LiskRawMigrationIterator($commit_conn, $commit_name);
|
||||||
|
foreach ($iterator as $commit) {
|
||||||
|
queryfx(
|
||||||
|
$conn,
|
||||||
|
'INSERT IGNORE INTO %T
|
||||||
|
(objectPHID, mailProperties, dateCreated, dateModified)
|
||||||
|
VALUES
|
||||||
|
(%s, %s, %d, %d)',
|
||||||
|
$properties_table->getTableName(),
|
||||||
|
$commit['phid'],
|
||||||
|
phutil_json_encode(
|
||||||
|
array(
|
||||||
|
'mailKey' => $commit['mailKey'],
|
||||||
|
)),
|
||||||
|
PhabricatorTime::getNow(),
|
||||||
|
PhabricatorTime::getNow());
|
||||||
|
}
|
||||||
2
resources/sql/autopatches/20180914.audit.02.rmkey.sql
Normal file
2
resources/sql/autopatches/20180914.audit.02.rmkey.sql
Normal file
@@ -0,0 +1,2 @@
|
|||||||
|
ALTER TABLE {$NAMESPACE}_repository.repository_commit
|
||||||
|
DROP mailKey;
|
||||||
@@ -0,0 +1,2 @@
|
|||||||
|
ALTER TABLE {$NAMESPACE}_drydock.drydock_log
|
||||||
|
ADD operationPHID VARBINARY(64);
|
||||||
@@ -1,53 +0,0 @@
|
|||||||
#!/usr/bin/env php
|
|
||||||
<?php
|
|
||||||
|
|
||||||
$root = dirname(dirname(dirname(__FILE__)));
|
|
||||||
require_once $root.'/scripts/__init_script__.php';
|
|
||||||
|
|
||||||
$commit = new PhabricatorRepositoryCommit();
|
|
||||||
|
|
||||||
$conn_w = id(new PhabricatorRepository())->establishConnection('w');
|
|
||||||
$sizes = queryfx_all(
|
|
||||||
$conn_w,
|
|
||||||
'SELECT repositoryID, count(*) N FROM %T GROUP BY repositoryID',
|
|
||||||
$commit->getTableName());
|
|
||||||
$sizes = ipull($sizes, 'N', 'repositoryID');
|
|
||||||
|
|
||||||
$maxes = queryfx_all(
|
|
||||||
$conn_w,
|
|
||||||
'SELECT repositoryID, max(epoch) maxEpoch FROM %T GROUP BY repositoryID',
|
|
||||||
$commit->getTableName());
|
|
||||||
$maxes = ipull($maxes, 'maxEpoch', 'repositoryID');
|
|
||||||
|
|
||||||
|
|
||||||
$repository_ids = array_keys($sizes + $maxes);
|
|
||||||
|
|
||||||
echo pht('Updating %d repositories', count($repository_ids));
|
|
||||||
|
|
||||||
foreach ($repository_ids as $repository_id) {
|
|
||||||
$last_commit = queryfx_one(
|
|
||||||
$conn_w,
|
|
||||||
'SELECT id FROM %T WHERE repositoryID = %d AND epoch = %d LIMIT 1',
|
|
||||||
$commit->getTableName(),
|
|
||||||
$repository_id,
|
|
||||||
idx($maxes, $repository_id, 0));
|
|
||||||
if ($last_commit) {
|
|
||||||
$last_commit = $last_commit['id'];
|
|
||||||
} else {
|
|
||||||
$last_commit = 0;
|
|
||||||
}
|
|
||||||
queryfx(
|
|
||||||
$conn_w,
|
|
||||||
'INSERT INTO %T (repositoryID, lastCommitID, size, epoch)
|
|
||||||
VALUES (%d, %d, %d, %d) ON DUPLICATE KEY UPDATE
|
|
||||||
lastCommitID = VALUES(lastCommitID),
|
|
||||||
size = VALUES(size),
|
|
||||||
epoch = VALUES(epoch)',
|
|
||||||
PhabricatorRepository::TABLE_SUMMARY,
|
|
||||||
$repository_id,
|
|
||||||
$last_commit,
|
|
||||||
idx($sizes, $repository_id, 0),
|
|
||||||
idx($maxes, $repository_id, 0));
|
|
||||||
echo '.';
|
|
||||||
}
|
|
||||||
echo "\n".pht('Done.')."\n";
|
|
||||||
@@ -2,13 +2,27 @@
|
|||||||
<?php
|
<?php
|
||||||
|
|
||||||
$root = dirname(dirname(dirname(__FILE__)));
|
$root = dirname(dirname(dirname(__FILE__)));
|
||||||
require_once $root.'/scripts/__init_script__.php';
|
require_once $root.'/scripts/init/init-script.php';
|
||||||
|
|
||||||
|
// NOTE: We are caching a datastructure rather than the flat key file because
|
||||||
|
// the path on disk to "ssh-exec" is arbitrarily mutable at runtime. See T12397.
|
||||||
|
|
||||||
$cache = PhabricatorCaches::getMutableCache();
|
$cache = PhabricatorCaches::getMutableCache();
|
||||||
$authfile_key = PhabricatorAuthSSHKeyQuery::AUTHFILE_CACHEKEY;
|
$authstruct_key = PhabricatorAuthSSHKeyQuery::AUTHSTRUCT_CACHEKEY;
|
||||||
$authfile = $cache->getKey($authfile_key);
|
$authstruct_raw = $cache->getKey($authstruct_key);
|
||||||
|
|
||||||
if ($authfile === null) {
|
$authstruct = null;
|
||||||
|
|
||||||
|
if (strlen($authstruct_raw)) {
|
||||||
|
try {
|
||||||
|
$authstruct = phutil_json_decode($authstruct_raw);
|
||||||
|
} catch (Exception $ex) {
|
||||||
|
// Ignore any issues with the cached data; we'll just rebuild the
|
||||||
|
// structure below.
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if ($authstruct === null) {
|
||||||
$keys = id(new PhabricatorAuthSSHKeyQuery())
|
$keys = id(new PhabricatorAuthSSHKeyQuery())
|
||||||
->setViewer(PhabricatorUser::getOmnipotentUser())
|
->setViewer(PhabricatorUser::getOmnipotentUser())
|
||||||
->withIsActive(true)
|
->withIsActive(true)
|
||||||
@@ -19,7 +33,7 @@ if ($authfile === null) {
|
|||||||
exit(1);
|
exit(1);
|
||||||
}
|
}
|
||||||
|
|
||||||
$bin = $root.'/bin/ssh-exec';
|
$key_list = array();
|
||||||
foreach ($keys as $ssh_key) {
|
foreach ($keys as $ssh_key) {
|
||||||
$key_argv = array();
|
$key_argv = array();
|
||||||
$object = $ssh_key->getObject();
|
$object = $ssh_key->getObject();
|
||||||
@@ -42,18 +56,7 @@ if ($authfile === null) {
|
|||||||
$key_argv[] = '--phabricator-ssh-key';
|
$key_argv[] = '--phabricator-ssh-key';
|
||||||
$key_argv[] = $ssh_key->getID();
|
$key_argv[] = $ssh_key->getID();
|
||||||
|
|
||||||
$cmd = csprintf('%s %Ls', $bin, $key_argv);
|
|
||||||
|
|
||||||
$instance = PhabricatorEnv::getEnvConfig('cluster.instance');
|
|
||||||
if (strlen($instance)) {
|
|
||||||
$cmd = csprintf('PHABRICATOR_INSTANCE=%s %C', $instance, $cmd);
|
|
||||||
}
|
|
||||||
|
|
||||||
// This is additional escaping for the SSH 'command="..."' string.
|
|
||||||
$cmd = addcslashes($cmd, '"\\');
|
|
||||||
|
|
||||||
// Strip out newlines and other nonsense from the key type and key body.
|
// Strip out newlines and other nonsense from the key type and key body.
|
||||||
|
|
||||||
$type = $ssh_key->getKeyType();
|
$type = $ssh_key->getKeyType();
|
||||||
$type = preg_replace('@[\x00-\x20]+@', '', $type);
|
$type = preg_replace('@[\x00-\x20]+@', '', $type);
|
||||||
if (!strlen($type)) {
|
if (!strlen($type)) {
|
||||||
@@ -66,6 +69,40 @@ if ($authfile === null) {
|
|||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
$key_list[] = array(
|
||||||
|
'argv' => $key_argv,
|
||||||
|
'type' => $type,
|
||||||
|
'key' => $key,
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
$authstruct = array(
|
||||||
|
'keys' => $key_list,
|
||||||
|
);
|
||||||
|
|
||||||
|
$authstruct_raw = phutil_json_encode($authstruct);
|
||||||
|
$ttl = phutil_units('24 hours in seconds');
|
||||||
|
$cache->setKey($authstruct_key, $authstruct_raw, $ttl);
|
||||||
|
}
|
||||||
|
|
||||||
|
$bin = $root.'/bin/ssh-exec';
|
||||||
|
$instance = PhabricatorEnv::getEnvConfig('cluster.instance');
|
||||||
|
|
||||||
|
$lines = array();
|
||||||
|
foreach ($authstruct['keys'] as $key_struct) {
|
||||||
|
$key_argv = $key_struct['argv'];
|
||||||
|
$key = $key_struct['key'];
|
||||||
|
$type = $key_struct['type'];
|
||||||
|
|
||||||
|
$cmd = csprintf('%s %Ls', $bin, $key_argv);
|
||||||
|
|
||||||
|
if (strlen($instance)) {
|
||||||
|
$cmd = csprintf('PHABRICATOR_INSTANCE=%s %C', $instance, $cmd);
|
||||||
|
}
|
||||||
|
|
||||||
|
// This is additional escaping for the SSH 'command="..."' string.
|
||||||
|
$cmd = addcslashes($cmd, '"\\');
|
||||||
|
|
||||||
$options = array(
|
$options = array(
|
||||||
'command="'.$cmd.'"',
|
'command="'.$cmd.'"',
|
||||||
'no-port-forwarding',
|
'no-port-forwarding',
|
||||||
@@ -79,9 +116,7 @@ if ($authfile === null) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
$authfile = implode('', $lines);
|
$authfile = implode('', $lines);
|
||||||
$ttl = phutil_units('24 hours in seconds');
|
|
||||||
$cache->setKey($authfile_key, $authfile, $ttl);
|
|
||||||
}
|
|
||||||
|
|
||||||
echo $authfile;
|
echo $authfile;
|
||||||
|
|
||||||
exit(0);
|
exit(0);
|
||||||
|
|||||||
@@ -27,7 +27,15 @@ $args->parsePartial(
|
|||||||
'param' => pht('port'),
|
'param' => pht('port'),
|
||||||
'help' => pht('Port number to connect to.'),
|
'help' => pht('Port number to connect to.'),
|
||||||
),
|
),
|
||||||
|
array(
|
||||||
|
'name' => 'options',
|
||||||
|
'short' => 'o',
|
||||||
|
'param' => pht('options'),
|
||||||
|
'repeat' => true,
|
||||||
|
'help' => pht('SSH options.'),
|
||||||
|
),
|
||||||
));
|
));
|
||||||
|
|
||||||
$unconsumed_argv = $args->getUnconsumedArgumentVector();
|
$unconsumed_argv = $args->getUnconsumedArgumentVector();
|
||||||
|
|
||||||
if (function_exists('pcntl_signal')) {
|
if (function_exists('pcntl_signal')) {
|
||||||
@@ -113,6 +121,25 @@ if ($port) {
|
|||||||
$arguments[] = $port;
|
$arguments[] = $port;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
$options = $args->getArg('options');
|
||||||
|
$allowed_ssh_options = array('SendEnv=GIT_PROTOCOL');
|
||||||
|
|
||||||
|
if (!empty($options)) {
|
||||||
|
foreach ($options as $option) {
|
||||||
|
if (array_search($option, $allowed_ssh_options) !== false) {
|
||||||
|
$pattern[] = '-o %s';
|
||||||
|
$arguments[] = $option;
|
||||||
|
} else {
|
||||||
|
throw new Exception(
|
||||||
|
pht(
|
||||||
|
'Disallowed ssh option "%s" given with "-o". '.
|
||||||
|
'Allowed options are: %s.',
|
||||||
|
$option,
|
||||||
|
implode(', ', $allowed_ssh_options)));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
$pattern[] = '--';
|
$pattern[] = '--';
|
||||||
|
|
||||||
$pattern[] = '%s';
|
$pattern[] = '%s';
|
||||||
|
|||||||
@@ -39,6 +39,10 @@ $data = array();
|
|||||||
$futures = array();
|
$futures = array();
|
||||||
|
|
||||||
foreach (explode("\n", trim($input)) as $file) {
|
foreach (explode("\n", trim($input)) as $file) {
|
||||||
|
if (!strlen($file)) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
$file = Filesystem::readablePath($file);
|
$file = Filesystem::readablePath($file);
|
||||||
$futures[$file] = ctags_get_parser_future($file);
|
$futures[$file] = ctags_get_parser_future($file);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -27,6 +27,10 @@ $data = array();
|
|||||||
$futures = array();
|
$futures = array();
|
||||||
|
|
||||||
foreach (explode("\n", trim($input)) as $file) {
|
foreach (explode("\n", trim($input)) as $file) {
|
||||||
|
if (!strlen($file)) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
$file = Filesystem::readablePath($file);
|
$file = Filesystem::readablePath($file);
|
||||||
$data[$file] = Filesystem::readFile($file);
|
$data[$file] = Filesystem::readFile($file);
|
||||||
$futures[$file] = PhutilXHPASTBinary::getParserFuture($data[$file]);
|
$futures[$file] = PhutilXHPASTBinary::getParserFuture($data[$file]);
|
||||||
|
|||||||
@@ -313,6 +313,7 @@ phutil_register_library_map(array(
|
|||||||
'ConduitCallTestCase' => 'applications/conduit/call/__tests__/ConduitCallTestCase.php',
|
'ConduitCallTestCase' => 'applications/conduit/call/__tests__/ConduitCallTestCase.php',
|
||||||
'ConduitColumnsParameterType' => 'applications/conduit/parametertype/ConduitColumnsParameterType.php',
|
'ConduitColumnsParameterType' => 'applications/conduit/parametertype/ConduitColumnsParameterType.php',
|
||||||
'ConduitConnectConduitAPIMethod' => 'applications/conduit/method/ConduitConnectConduitAPIMethod.php',
|
'ConduitConnectConduitAPIMethod' => 'applications/conduit/method/ConduitConnectConduitAPIMethod.php',
|
||||||
|
'ConduitConstantDescription' => 'applications/conduit/data/ConduitConstantDescription.php',
|
||||||
'ConduitEpochParameterType' => 'applications/conduit/parametertype/ConduitEpochParameterType.php',
|
'ConduitEpochParameterType' => 'applications/conduit/parametertype/ConduitEpochParameterType.php',
|
||||||
'ConduitException' => 'applications/conduit/protocol/exception/ConduitException.php',
|
'ConduitException' => 'applications/conduit/protocol/exception/ConduitException.php',
|
||||||
'ConduitGetCapabilitiesConduitAPIMethod' => 'applications/conduit/method/ConduitGetCapabilitiesConduitAPIMethod.php',
|
'ConduitGetCapabilitiesConduitAPIMethod' => 'applications/conduit/method/ConduitGetCapabilitiesConduitAPIMethod.php',
|
||||||
@@ -644,6 +645,7 @@ phutil_register_library_map(array(
|
|||||||
'DifferentialRevisionStatusTransaction' => 'applications/differential/xaction/DifferentialRevisionStatusTransaction.php',
|
'DifferentialRevisionStatusTransaction' => 'applications/differential/xaction/DifferentialRevisionStatusTransaction.php',
|
||||||
'DifferentialRevisionSummaryHeraldField' => 'applications/differential/herald/DifferentialRevisionSummaryHeraldField.php',
|
'DifferentialRevisionSummaryHeraldField' => 'applications/differential/herald/DifferentialRevisionSummaryHeraldField.php',
|
||||||
'DifferentialRevisionSummaryTransaction' => 'applications/differential/xaction/DifferentialRevisionSummaryTransaction.php',
|
'DifferentialRevisionSummaryTransaction' => 'applications/differential/xaction/DifferentialRevisionSummaryTransaction.php',
|
||||||
|
'DifferentialRevisionTestPlanHeraldField' => 'applications/differential/herald/DifferentialRevisionTestPlanHeraldField.php',
|
||||||
'DifferentialRevisionTestPlanTransaction' => 'applications/differential/xaction/DifferentialRevisionTestPlanTransaction.php',
|
'DifferentialRevisionTestPlanTransaction' => 'applications/differential/xaction/DifferentialRevisionTestPlanTransaction.php',
|
||||||
'DifferentialRevisionTitleHeraldField' => 'applications/differential/herald/DifferentialRevisionTitleHeraldField.php',
|
'DifferentialRevisionTitleHeraldField' => 'applications/differential/herald/DifferentialRevisionTitleHeraldField.php',
|
||||||
'DifferentialRevisionTitleTransaction' => 'applications/differential/xaction/DifferentialRevisionTitleTransaction.php',
|
'DifferentialRevisionTitleTransaction' => 'applications/differential/xaction/DifferentialRevisionTitleTransaction.php',
|
||||||
@@ -702,6 +704,7 @@ phutil_register_library_map(array(
|
|||||||
'DiffusionCommitAcceptTransaction' => 'applications/diffusion/xaction/DiffusionCommitAcceptTransaction.php',
|
'DiffusionCommitAcceptTransaction' => 'applications/diffusion/xaction/DiffusionCommitAcceptTransaction.php',
|
||||||
'DiffusionCommitActionTransaction' => 'applications/diffusion/xaction/DiffusionCommitActionTransaction.php',
|
'DiffusionCommitActionTransaction' => 'applications/diffusion/xaction/DiffusionCommitActionTransaction.php',
|
||||||
'DiffusionCommitAffectedFilesHeraldField' => 'applications/diffusion/herald/DiffusionCommitAffectedFilesHeraldField.php',
|
'DiffusionCommitAffectedFilesHeraldField' => 'applications/diffusion/herald/DiffusionCommitAffectedFilesHeraldField.php',
|
||||||
|
'DiffusionCommitAuditStatus' => 'applications/diffusion/DiffusionCommitAuditStatus.php',
|
||||||
'DiffusionCommitAuditTransaction' => 'applications/diffusion/xaction/DiffusionCommitAuditTransaction.php',
|
'DiffusionCommitAuditTransaction' => 'applications/diffusion/xaction/DiffusionCommitAuditTransaction.php',
|
||||||
'DiffusionCommitAuditorsHeraldField' => 'applications/diffusion/herald/DiffusionCommitAuditorsHeraldField.php',
|
'DiffusionCommitAuditorsHeraldField' => 'applications/diffusion/herald/DiffusionCommitAuditorsHeraldField.php',
|
||||||
'DiffusionCommitAuditorsTransaction' => 'applications/diffusion/xaction/DiffusionCommitAuditorsTransaction.php',
|
'DiffusionCommitAuditorsTransaction' => 'applications/diffusion/xaction/DiffusionCommitAuditorsTransaction.php',
|
||||||
@@ -1165,6 +1168,7 @@ phutil_register_library_map(array(
|
|||||||
'DrydockManagementUpdateResourceWorkflow' => 'applications/drydock/management/DrydockManagementUpdateResourceWorkflow.php',
|
'DrydockManagementUpdateResourceWorkflow' => 'applications/drydock/management/DrydockManagementUpdateResourceWorkflow.php',
|
||||||
'DrydockManagementWorkflow' => 'applications/drydock/management/DrydockManagementWorkflow.php',
|
'DrydockManagementWorkflow' => 'applications/drydock/management/DrydockManagementWorkflow.php',
|
||||||
'DrydockObjectAuthorizationView' => 'applications/drydock/view/DrydockObjectAuthorizationView.php',
|
'DrydockObjectAuthorizationView' => 'applications/drydock/view/DrydockObjectAuthorizationView.php',
|
||||||
|
'DrydockOperationWorkLogType' => 'applications/drydock/logtype/DrydockOperationWorkLogType.php',
|
||||||
'DrydockQuery' => 'applications/drydock/query/DrydockQuery.php',
|
'DrydockQuery' => 'applications/drydock/query/DrydockQuery.php',
|
||||||
'DrydockRepositoryOperation' => 'applications/drydock/storage/DrydockRepositoryOperation.php',
|
'DrydockRepositoryOperation' => 'applications/drydock/storage/DrydockRepositoryOperation.php',
|
||||||
'DrydockRepositoryOperationController' => 'applications/drydock/controller/DrydockRepositoryOperationController.php',
|
'DrydockRepositoryOperationController' => 'applications/drydock/controller/DrydockRepositoryOperationController.php',
|
||||||
@@ -1202,6 +1206,7 @@ phutil_register_library_map(array(
|
|||||||
'DrydockSlotLockException' => 'applications/drydock/exception/DrydockSlotLockException.php',
|
'DrydockSlotLockException' => 'applications/drydock/exception/DrydockSlotLockException.php',
|
||||||
'DrydockSlotLockFailureLogType' => 'applications/drydock/logtype/DrydockSlotLockFailureLogType.php',
|
'DrydockSlotLockFailureLogType' => 'applications/drydock/logtype/DrydockSlotLockFailureLogType.php',
|
||||||
'DrydockTestRepositoryOperation' => 'applications/drydock/operation/DrydockTestRepositoryOperation.php',
|
'DrydockTestRepositoryOperation' => 'applications/drydock/operation/DrydockTestRepositoryOperation.php',
|
||||||
|
'DrydockTextLogType' => 'applications/drydock/logtype/DrydockTextLogType.php',
|
||||||
'DrydockWebrootInterface' => 'applications/drydock/interface/webroot/DrydockWebrootInterface.php',
|
'DrydockWebrootInterface' => 'applications/drydock/interface/webroot/DrydockWebrootInterface.php',
|
||||||
'DrydockWorker' => 'applications/drydock/worker/DrydockWorker.php',
|
'DrydockWorker' => 'applications/drydock/worker/DrydockWorker.php',
|
||||||
'DrydockWorkingCopyBlueprintImplementation' => 'applications/drydock/blueprint/DrydockWorkingCopyBlueprintImplementation.php',
|
'DrydockWorkingCopyBlueprintImplementation' => 'applications/drydock/blueprint/DrydockWorkingCopyBlueprintImplementation.php',
|
||||||
@@ -1646,13 +1651,8 @@ phutil_register_library_map(array(
|
|||||||
'ManiphestDAO' => 'applications/maniphest/storage/ManiphestDAO.php',
|
'ManiphestDAO' => 'applications/maniphest/storage/ManiphestDAO.php',
|
||||||
'ManiphestDefaultEditCapability' => 'applications/maniphest/capability/ManiphestDefaultEditCapability.php',
|
'ManiphestDefaultEditCapability' => 'applications/maniphest/capability/ManiphestDefaultEditCapability.php',
|
||||||
'ManiphestDefaultViewCapability' => 'applications/maniphest/capability/ManiphestDefaultViewCapability.php',
|
'ManiphestDefaultViewCapability' => 'applications/maniphest/capability/ManiphestDefaultViewCapability.php',
|
||||||
'ManiphestEditAssignCapability' => 'applications/maniphest/capability/ManiphestEditAssignCapability.php',
|
|
||||||
'ManiphestEditConduitAPIMethod' => 'applications/maniphest/conduit/ManiphestEditConduitAPIMethod.php',
|
'ManiphestEditConduitAPIMethod' => 'applications/maniphest/conduit/ManiphestEditConduitAPIMethod.php',
|
||||||
'ManiphestEditEngine' => 'applications/maniphest/editor/ManiphestEditEngine.php',
|
'ManiphestEditEngine' => 'applications/maniphest/editor/ManiphestEditEngine.php',
|
||||||
'ManiphestEditPoliciesCapability' => 'applications/maniphest/capability/ManiphestEditPoliciesCapability.php',
|
|
||||||
'ManiphestEditPriorityCapability' => 'applications/maniphest/capability/ManiphestEditPriorityCapability.php',
|
|
||||||
'ManiphestEditProjectsCapability' => 'applications/maniphest/capability/ManiphestEditProjectsCapability.php',
|
|
||||||
'ManiphestEditStatusCapability' => 'applications/maniphest/capability/ManiphestEditStatusCapability.php',
|
|
||||||
'ManiphestEmailCommand' => 'applications/maniphest/command/ManiphestEmailCommand.php',
|
'ManiphestEmailCommand' => 'applications/maniphest/command/ManiphestEmailCommand.php',
|
||||||
'ManiphestGetTaskTransactionsConduitAPIMethod' => 'applications/maniphest/conduit/ManiphestGetTaskTransactionsConduitAPIMethod.php',
|
'ManiphestGetTaskTransactionsConduitAPIMethod' => 'applications/maniphest/conduit/ManiphestGetTaskTransactionsConduitAPIMethod.php',
|
||||||
'ManiphestHovercardEngineExtension' => 'applications/maniphest/engineextension/ManiphestHovercardEngineExtension.php',
|
'ManiphestHovercardEngineExtension' => 'applications/maniphest/engineextension/ManiphestHovercardEngineExtension.php',
|
||||||
@@ -1918,7 +1918,7 @@ phutil_register_library_map(array(
|
|||||||
'PHUIDiffTableOfContentsListView' => 'infrastructure/diff/view/PHUIDiffTableOfContentsListView.php',
|
'PHUIDiffTableOfContentsListView' => 'infrastructure/diff/view/PHUIDiffTableOfContentsListView.php',
|
||||||
'PHUIDiffTwoUpInlineCommentRowScaffold' => 'infrastructure/diff/view/PHUIDiffTwoUpInlineCommentRowScaffold.php',
|
'PHUIDiffTwoUpInlineCommentRowScaffold' => 'infrastructure/diff/view/PHUIDiffTwoUpInlineCommentRowScaffold.php',
|
||||||
'PHUIDocumentSummaryView' => 'view/phui/PHUIDocumentSummaryView.php',
|
'PHUIDocumentSummaryView' => 'view/phui/PHUIDocumentSummaryView.php',
|
||||||
'PHUIDocumentViewPro' => 'view/phui/PHUIDocumentViewPro.php',
|
'PHUIDocumentView' => 'view/phui/PHUIDocumentView.php',
|
||||||
'PHUIFeedStoryExample' => 'applications/uiexample/examples/PHUIFeedStoryExample.php',
|
'PHUIFeedStoryExample' => 'applications/uiexample/examples/PHUIFeedStoryExample.php',
|
||||||
'PHUIFeedStoryView' => 'view/phui/PHUIFeedStoryView.php',
|
'PHUIFeedStoryView' => 'view/phui/PHUIFeedStoryView.php',
|
||||||
'PHUIFormDividerControl' => 'view/form/control/PHUIFormDividerControl.php',
|
'PHUIFormDividerControl' => 'view/form/control/PHUIFormDividerControl.php',
|
||||||
@@ -2048,6 +2048,7 @@ phutil_register_library_map(array(
|
|||||||
'PasteSearchConduitAPIMethod' => 'applications/paste/conduit/PasteSearchConduitAPIMethod.php',
|
'PasteSearchConduitAPIMethod' => 'applications/paste/conduit/PasteSearchConduitAPIMethod.php',
|
||||||
'PeopleBrowseUserDirectoryCapability' => 'applications/people/capability/PeopleBrowseUserDirectoryCapability.php',
|
'PeopleBrowseUserDirectoryCapability' => 'applications/people/capability/PeopleBrowseUserDirectoryCapability.php',
|
||||||
'PeopleCreateUsersCapability' => 'applications/people/capability/PeopleCreateUsersCapability.php',
|
'PeopleCreateUsersCapability' => 'applications/people/capability/PeopleCreateUsersCapability.php',
|
||||||
|
'PeopleDisableUsersCapability' => 'applications/people/capability/PeopleDisableUsersCapability.php',
|
||||||
'PeopleHovercardEngineExtension' => 'applications/people/engineextension/PeopleHovercardEngineExtension.php',
|
'PeopleHovercardEngineExtension' => 'applications/people/engineextension/PeopleHovercardEngineExtension.php',
|
||||||
'PeopleMainMenuBarExtension' => 'applications/people/engineextension/PeopleMainMenuBarExtension.php',
|
'PeopleMainMenuBarExtension' => 'applications/people/engineextension/PeopleMainMenuBarExtension.php',
|
||||||
'PeopleUserLogGarbageCollector' => 'applications/people/garbagecollector/PeopleUserLogGarbageCollector.php',
|
'PeopleUserLogGarbageCollector' => 'applications/people/garbagecollector/PeopleUserLogGarbageCollector.php',
|
||||||
@@ -2152,7 +2153,6 @@ phutil_register_library_map(array(
|
|||||||
'PhabricatorAuditActionConstants' => 'applications/audit/constants/PhabricatorAuditActionConstants.php',
|
'PhabricatorAuditActionConstants' => 'applications/audit/constants/PhabricatorAuditActionConstants.php',
|
||||||
'PhabricatorAuditApplication' => 'applications/audit/application/PhabricatorAuditApplication.php',
|
'PhabricatorAuditApplication' => 'applications/audit/application/PhabricatorAuditApplication.php',
|
||||||
'PhabricatorAuditCommentEditor' => 'applications/audit/editor/PhabricatorAuditCommentEditor.php',
|
'PhabricatorAuditCommentEditor' => 'applications/audit/editor/PhabricatorAuditCommentEditor.php',
|
||||||
'PhabricatorAuditCommitStatusConstants' => 'applications/audit/constants/PhabricatorAuditCommitStatusConstants.php',
|
|
||||||
'PhabricatorAuditController' => 'applications/audit/controller/PhabricatorAuditController.php',
|
'PhabricatorAuditController' => 'applications/audit/controller/PhabricatorAuditController.php',
|
||||||
'PhabricatorAuditEditor' => 'applications/audit/editor/PhabricatorAuditEditor.php',
|
'PhabricatorAuditEditor' => 'applications/audit/editor/PhabricatorAuditEditor.php',
|
||||||
'PhabricatorAuditInlineComment' => 'applications/audit/storage/PhabricatorAuditInlineComment.php',
|
'PhabricatorAuditInlineComment' => 'applications/audit/storage/PhabricatorAuditInlineComment.php',
|
||||||
@@ -4567,6 +4567,8 @@ phutil_register_library_map(array(
|
|||||||
'PhabricatorUserCustomFieldNumericIndex' => 'applications/people/storage/PhabricatorUserCustomFieldNumericIndex.php',
|
'PhabricatorUserCustomFieldNumericIndex' => 'applications/people/storage/PhabricatorUserCustomFieldNumericIndex.php',
|
||||||
'PhabricatorUserCustomFieldStringIndex' => 'applications/people/storage/PhabricatorUserCustomFieldStringIndex.php',
|
'PhabricatorUserCustomFieldStringIndex' => 'applications/people/storage/PhabricatorUserCustomFieldStringIndex.php',
|
||||||
'PhabricatorUserDAO' => 'applications/people/storage/PhabricatorUserDAO.php',
|
'PhabricatorUserDAO' => 'applications/people/storage/PhabricatorUserDAO.php',
|
||||||
|
'PhabricatorUserDisableTransaction' => 'applications/people/xaction/PhabricatorUserDisableTransaction.php',
|
||||||
|
'PhabricatorUserEditEngine' => 'applications/people/editor/PhabricatorUserEditEngine.php',
|
||||||
'PhabricatorUserEditor' => 'applications/people/editor/PhabricatorUserEditor.php',
|
'PhabricatorUserEditor' => 'applications/people/editor/PhabricatorUserEditor.php',
|
||||||
'PhabricatorUserEditorTestCase' => 'applications/people/editor/__tests__/PhabricatorUserEditorTestCase.php',
|
'PhabricatorUserEditorTestCase' => 'applications/people/editor/__tests__/PhabricatorUserEditorTestCase.php',
|
||||||
'PhabricatorUserEmail' => 'applications/people/storage/PhabricatorUserEmail.php',
|
'PhabricatorUserEmail' => 'applications/people/storage/PhabricatorUserEmail.php',
|
||||||
@@ -4588,7 +4590,6 @@ phutil_register_library_map(array(
|
|||||||
'PhabricatorUserPreferencesTransaction' => 'applications/settings/storage/PhabricatorUserPreferencesTransaction.php',
|
'PhabricatorUserPreferencesTransaction' => 'applications/settings/storage/PhabricatorUserPreferencesTransaction.php',
|
||||||
'PhabricatorUserPreferencesTransactionQuery' => 'applications/settings/query/PhabricatorUserPreferencesTransactionQuery.php',
|
'PhabricatorUserPreferencesTransactionQuery' => 'applications/settings/query/PhabricatorUserPreferencesTransactionQuery.php',
|
||||||
'PhabricatorUserProfile' => 'applications/people/storage/PhabricatorUserProfile.php',
|
'PhabricatorUserProfile' => 'applications/people/storage/PhabricatorUserProfile.php',
|
||||||
'PhabricatorUserProfileEditor' => 'applications/people/editor/PhabricatorUserProfileEditor.php',
|
|
||||||
'PhabricatorUserProfileImageCacheType' => 'applications/people/cache/PhabricatorUserProfileImageCacheType.php',
|
'PhabricatorUserProfileImageCacheType' => 'applications/people/cache/PhabricatorUserProfileImageCacheType.php',
|
||||||
'PhabricatorUserRealNameField' => 'applications/people/customfield/PhabricatorUserRealNameField.php',
|
'PhabricatorUserRealNameField' => 'applications/people/customfield/PhabricatorUserRealNameField.php',
|
||||||
'PhabricatorUserRolesField' => 'applications/people/customfield/PhabricatorUserRolesField.php',
|
'PhabricatorUserRolesField' => 'applications/people/customfield/PhabricatorUserRolesField.php',
|
||||||
@@ -4598,6 +4599,8 @@ phutil_register_library_map(array(
|
|||||||
'PhabricatorUserTestCase' => 'applications/people/storage/__tests__/PhabricatorUserTestCase.php',
|
'PhabricatorUserTestCase' => 'applications/people/storage/__tests__/PhabricatorUserTestCase.php',
|
||||||
'PhabricatorUserTitleField' => 'applications/people/customfield/PhabricatorUserTitleField.php',
|
'PhabricatorUserTitleField' => 'applications/people/customfield/PhabricatorUserTitleField.php',
|
||||||
'PhabricatorUserTransaction' => 'applications/people/storage/PhabricatorUserTransaction.php',
|
'PhabricatorUserTransaction' => 'applications/people/storage/PhabricatorUserTransaction.php',
|
||||||
|
'PhabricatorUserTransactionEditor' => 'applications/people/editor/PhabricatorUserTransactionEditor.php',
|
||||||
|
'PhabricatorUserTransactionType' => 'applications/people/xaction/PhabricatorUserTransactionType.php',
|
||||||
'PhabricatorUsersEditField' => 'applications/transactions/editfield/PhabricatorUsersEditField.php',
|
'PhabricatorUsersEditField' => 'applications/transactions/editfield/PhabricatorUsersEditField.php',
|
||||||
'PhabricatorUsersPolicyRule' => 'applications/people/policyrule/PhabricatorUsersPolicyRule.php',
|
'PhabricatorUsersPolicyRule' => 'applications/people/policyrule/PhabricatorUsersPolicyRule.php',
|
||||||
'PhabricatorUsersSearchField' => 'applications/people/searchfield/PhabricatorUsersSearchField.php',
|
'PhabricatorUsersSearchField' => 'applications/people/searchfield/PhabricatorUsersSearchField.php',
|
||||||
@@ -5025,6 +5028,9 @@ phutil_register_library_map(array(
|
|||||||
'PhrictionDocumentController' => 'applications/phriction/controller/PhrictionDocumentController.php',
|
'PhrictionDocumentController' => 'applications/phriction/controller/PhrictionDocumentController.php',
|
||||||
'PhrictionDocumentDatasource' => 'applications/phriction/typeahead/PhrictionDocumentDatasource.php',
|
'PhrictionDocumentDatasource' => 'applications/phriction/typeahead/PhrictionDocumentDatasource.php',
|
||||||
'PhrictionDocumentDeleteTransaction' => 'applications/phriction/xaction/PhrictionDocumentDeleteTransaction.php',
|
'PhrictionDocumentDeleteTransaction' => 'applications/phriction/xaction/PhrictionDocumentDeleteTransaction.php',
|
||||||
|
'PhrictionDocumentDraftTransaction' => 'applications/phriction/xaction/PhrictionDocumentDraftTransaction.php',
|
||||||
|
'PhrictionDocumentEditEngine' => 'applications/phriction/editor/PhrictionDocumentEditEngine.php',
|
||||||
|
'PhrictionDocumentEditTransaction' => 'applications/phriction/xaction/PhrictionDocumentEditTransaction.php',
|
||||||
'PhrictionDocumentFerretEngine' => 'applications/phriction/search/PhrictionDocumentFerretEngine.php',
|
'PhrictionDocumentFerretEngine' => 'applications/phriction/search/PhrictionDocumentFerretEngine.php',
|
||||||
'PhrictionDocumentFulltextEngine' => 'applications/phriction/search/PhrictionDocumentFulltextEngine.php',
|
'PhrictionDocumentFulltextEngine' => 'applications/phriction/search/PhrictionDocumentFulltextEngine.php',
|
||||||
'PhrictionDocumentHeraldAdapter' => 'applications/phriction/herald/PhrictionDocumentHeraldAdapter.php',
|
'PhrictionDocumentHeraldAdapter' => 'applications/phriction/herald/PhrictionDocumentHeraldAdapter.php',
|
||||||
@@ -5035,6 +5041,7 @@ phutil_register_library_map(array(
|
|||||||
'PhrictionDocumentPHIDType' => 'applications/phriction/phid/PhrictionDocumentPHIDType.php',
|
'PhrictionDocumentPHIDType' => 'applications/phriction/phid/PhrictionDocumentPHIDType.php',
|
||||||
'PhrictionDocumentPathHeraldField' => 'applications/phriction/herald/PhrictionDocumentPathHeraldField.php',
|
'PhrictionDocumentPathHeraldField' => 'applications/phriction/herald/PhrictionDocumentPathHeraldField.php',
|
||||||
'PhrictionDocumentPolicyCodex' => 'applications/phriction/codex/PhrictionDocumentPolicyCodex.php',
|
'PhrictionDocumentPolicyCodex' => 'applications/phriction/codex/PhrictionDocumentPolicyCodex.php',
|
||||||
|
'PhrictionDocumentPublishTransaction' => 'applications/phriction/xaction/PhrictionDocumentPublishTransaction.php',
|
||||||
'PhrictionDocumentQuery' => 'applications/phriction/query/PhrictionDocumentQuery.php',
|
'PhrictionDocumentQuery' => 'applications/phriction/query/PhrictionDocumentQuery.php',
|
||||||
'PhrictionDocumentSearchConduitAPIMethod' => 'applications/phriction/conduit/PhrictionDocumentSearchConduitAPIMethod.php',
|
'PhrictionDocumentSearchConduitAPIMethod' => 'applications/phriction/conduit/PhrictionDocumentSearchConduitAPIMethod.php',
|
||||||
'PhrictionDocumentSearchEngine' => 'applications/phriction/query/PhrictionDocumentSearchEngine.php',
|
'PhrictionDocumentSearchEngine' => 'applications/phriction/query/PhrictionDocumentSearchEngine.php',
|
||||||
@@ -5042,8 +5049,10 @@ phutil_register_library_map(array(
|
|||||||
'PhrictionDocumentTitleHeraldField' => 'applications/phriction/herald/PhrictionDocumentTitleHeraldField.php',
|
'PhrictionDocumentTitleHeraldField' => 'applications/phriction/herald/PhrictionDocumentTitleHeraldField.php',
|
||||||
'PhrictionDocumentTitleTransaction' => 'applications/phriction/xaction/PhrictionDocumentTitleTransaction.php',
|
'PhrictionDocumentTitleTransaction' => 'applications/phriction/xaction/PhrictionDocumentTitleTransaction.php',
|
||||||
'PhrictionDocumentTransactionType' => 'applications/phriction/xaction/PhrictionDocumentTransactionType.php',
|
'PhrictionDocumentTransactionType' => 'applications/phriction/xaction/PhrictionDocumentTransactionType.php',
|
||||||
|
'PhrictionDocumentVersionTransaction' => 'applications/phriction/xaction/PhrictionDocumentVersionTransaction.php',
|
||||||
'PhrictionEditConduitAPIMethod' => 'applications/phriction/conduit/PhrictionEditConduitAPIMethod.php',
|
'PhrictionEditConduitAPIMethod' => 'applications/phriction/conduit/PhrictionEditConduitAPIMethod.php',
|
||||||
'PhrictionEditController' => 'applications/phriction/controller/PhrictionEditController.php',
|
'PhrictionEditController' => 'applications/phriction/controller/PhrictionEditController.php',
|
||||||
|
'PhrictionEditEngineController' => 'applications/phriction/controller/PhrictionEditEngineController.php',
|
||||||
'PhrictionHistoryConduitAPIMethod' => 'applications/phriction/conduit/PhrictionHistoryConduitAPIMethod.php',
|
'PhrictionHistoryConduitAPIMethod' => 'applications/phriction/conduit/PhrictionHistoryConduitAPIMethod.php',
|
||||||
'PhrictionHistoryController' => 'applications/phriction/controller/PhrictionHistoryController.php',
|
'PhrictionHistoryController' => 'applications/phriction/controller/PhrictionHistoryController.php',
|
||||||
'PhrictionInfoConduitAPIMethod' => 'applications/phriction/conduit/PhrictionInfoConduitAPIMethod.php',
|
'PhrictionInfoConduitAPIMethod' => 'applications/phriction/conduit/PhrictionInfoConduitAPIMethod.php',
|
||||||
@@ -5051,6 +5060,7 @@ phutil_register_library_map(array(
|
|||||||
'PhrictionMarkupPreviewController' => 'applications/phriction/controller/PhrictionMarkupPreviewController.php',
|
'PhrictionMarkupPreviewController' => 'applications/phriction/controller/PhrictionMarkupPreviewController.php',
|
||||||
'PhrictionMoveController' => 'applications/phriction/controller/PhrictionMoveController.php',
|
'PhrictionMoveController' => 'applications/phriction/controller/PhrictionMoveController.php',
|
||||||
'PhrictionNewController' => 'applications/phriction/controller/PhrictionNewController.php',
|
'PhrictionNewController' => 'applications/phriction/controller/PhrictionNewController.php',
|
||||||
|
'PhrictionPublishController' => 'applications/phriction/controller/PhrictionPublishController.php',
|
||||||
'PhrictionRemarkupRule' => 'applications/phriction/markup/PhrictionRemarkupRule.php',
|
'PhrictionRemarkupRule' => 'applications/phriction/markup/PhrictionRemarkupRule.php',
|
||||||
'PhrictionReplyHandler' => 'applications/phriction/mail/PhrictionReplyHandler.php',
|
'PhrictionReplyHandler' => 'applications/phriction/mail/PhrictionReplyHandler.php',
|
||||||
'PhrictionSchemaSpec' => 'applications/phriction/storage/PhrictionSchemaSpec.php',
|
'PhrictionSchemaSpec' => 'applications/phriction/storage/PhrictionSchemaSpec.php',
|
||||||
@@ -5239,6 +5249,7 @@ phutil_register_library_map(array(
|
|||||||
'TransactionSearchConduitAPIMethod' => 'applications/transactions/conduit/TransactionSearchConduitAPIMethod.php',
|
'TransactionSearchConduitAPIMethod' => 'applications/transactions/conduit/TransactionSearchConduitAPIMethod.php',
|
||||||
'UserConduitAPIMethod' => 'applications/people/conduit/UserConduitAPIMethod.php',
|
'UserConduitAPIMethod' => 'applications/people/conduit/UserConduitAPIMethod.php',
|
||||||
'UserDisableConduitAPIMethod' => 'applications/people/conduit/UserDisableConduitAPIMethod.php',
|
'UserDisableConduitAPIMethod' => 'applications/people/conduit/UserDisableConduitAPIMethod.php',
|
||||||
|
'UserEditConduitAPIMethod' => 'applications/people/conduit/UserEditConduitAPIMethod.php',
|
||||||
'UserEnableConduitAPIMethod' => 'applications/people/conduit/UserEnableConduitAPIMethod.php',
|
'UserEnableConduitAPIMethod' => 'applications/people/conduit/UserEnableConduitAPIMethod.php',
|
||||||
'UserFindConduitAPIMethod' => 'applications/people/conduit/UserFindConduitAPIMethod.php',
|
'UserFindConduitAPIMethod' => 'applications/people/conduit/UserFindConduitAPIMethod.php',
|
||||||
'UserQueryConduitAPIMethod' => 'applications/people/conduit/UserQueryConduitAPIMethod.php',
|
'UserQueryConduitAPIMethod' => 'applications/people/conduit/UserQueryConduitAPIMethod.php',
|
||||||
@@ -5631,6 +5642,7 @@ phutil_register_library_map(array(
|
|||||||
'ConduitCallTestCase' => 'PhabricatorTestCase',
|
'ConduitCallTestCase' => 'PhabricatorTestCase',
|
||||||
'ConduitColumnsParameterType' => 'ConduitParameterType',
|
'ConduitColumnsParameterType' => 'ConduitParameterType',
|
||||||
'ConduitConnectConduitAPIMethod' => 'ConduitAPIMethod',
|
'ConduitConnectConduitAPIMethod' => 'ConduitAPIMethod',
|
||||||
|
'ConduitConstantDescription' => 'Phobject',
|
||||||
'ConduitEpochParameterType' => 'ConduitParameterType',
|
'ConduitEpochParameterType' => 'ConduitParameterType',
|
||||||
'ConduitException' => 'Exception',
|
'ConduitException' => 'Exception',
|
||||||
'ConduitGetCapabilitiesConduitAPIMethod' => 'ConduitAPIMethod',
|
'ConduitGetCapabilitiesConduitAPIMethod' => 'ConduitAPIMethod',
|
||||||
@@ -6008,6 +6020,7 @@ phutil_register_library_map(array(
|
|||||||
'DifferentialRevisionStatusTransaction' => 'DifferentialRevisionTransactionType',
|
'DifferentialRevisionStatusTransaction' => 'DifferentialRevisionTransactionType',
|
||||||
'DifferentialRevisionSummaryHeraldField' => 'DifferentialRevisionHeraldField',
|
'DifferentialRevisionSummaryHeraldField' => 'DifferentialRevisionHeraldField',
|
||||||
'DifferentialRevisionSummaryTransaction' => 'DifferentialRevisionTransactionType',
|
'DifferentialRevisionSummaryTransaction' => 'DifferentialRevisionTransactionType',
|
||||||
|
'DifferentialRevisionTestPlanHeraldField' => 'DifferentialRevisionHeraldField',
|
||||||
'DifferentialRevisionTestPlanTransaction' => 'DifferentialRevisionTransactionType',
|
'DifferentialRevisionTestPlanTransaction' => 'DifferentialRevisionTransactionType',
|
||||||
'DifferentialRevisionTitleHeraldField' => 'DifferentialRevisionHeraldField',
|
'DifferentialRevisionTitleHeraldField' => 'DifferentialRevisionHeraldField',
|
||||||
'DifferentialRevisionTitleTransaction' => 'DifferentialRevisionTransactionType',
|
'DifferentialRevisionTitleTransaction' => 'DifferentialRevisionTransactionType',
|
||||||
@@ -6066,6 +6079,7 @@ phutil_register_library_map(array(
|
|||||||
'DiffusionCommitAcceptTransaction' => 'DiffusionCommitAuditTransaction',
|
'DiffusionCommitAcceptTransaction' => 'DiffusionCommitAuditTransaction',
|
||||||
'DiffusionCommitActionTransaction' => 'DiffusionCommitTransactionType',
|
'DiffusionCommitActionTransaction' => 'DiffusionCommitTransactionType',
|
||||||
'DiffusionCommitAffectedFilesHeraldField' => 'DiffusionCommitHeraldField',
|
'DiffusionCommitAffectedFilesHeraldField' => 'DiffusionCommitHeraldField',
|
||||||
|
'DiffusionCommitAuditStatus' => 'Phobject',
|
||||||
'DiffusionCommitAuditTransaction' => 'DiffusionCommitActionTransaction',
|
'DiffusionCommitAuditTransaction' => 'DiffusionCommitActionTransaction',
|
||||||
'DiffusionCommitAuditorsHeraldField' => 'DiffusionCommitHeraldField',
|
'DiffusionCommitAuditorsHeraldField' => 'DiffusionCommitHeraldField',
|
||||||
'DiffusionCommitAuditorsTransaction' => 'DiffusionCommitTransactionType',
|
'DiffusionCommitAuditorsTransaction' => 'DiffusionCommitTransactionType',
|
||||||
@@ -6570,6 +6584,7 @@ phutil_register_library_map(array(
|
|||||||
'DrydockManagementUpdateResourceWorkflow' => 'DrydockManagementWorkflow',
|
'DrydockManagementUpdateResourceWorkflow' => 'DrydockManagementWorkflow',
|
||||||
'DrydockManagementWorkflow' => 'PhabricatorManagementWorkflow',
|
'DrydockManagementWorkflow' => 'PhabricatorManagementWorkflow',
|
||||||
'DrydockObjectAuthorizationView' => 'AphrontView',
|
'DrydockObjectAuthorizationView' => 'AphrontView',
|
||||||
|
'DrydockOperationWorkLogType' => 'DrydockLogType',
|
||||||
'DrydockQuery' => 'PhabricatorCursorPagedPolicyAwareQuery',
|
'DrydockQuery' => 'PhabricatorCursorPagedPolicyAwareQuery',
|
||||||
'DrydockRepositoryOperation' => array(
|
'DrydockRepositoryOperation' => array(
|
||||||
'DrydockDAO',
|
'DrydockDAO',
|
||||||
@@ -6613,6 +6628,7 @@ phutil_register_library_map(array(
|
|||||||
'DrydockSlotLockException' => 'Exception',
|
'DrydockSlotLockException' => 'Exception',
|
||||||
'DrydockSlotLockFailureLogType' => 'DrydockLogType',
|
'DrydockSlotLockFailureLogType' => 'DrydockLogType',
|
||||||
'DrydockTestRepositoryOperation' => 'DrydockRepositoryOperationType',
|
'DrydockTestRepositoryOperation' => 'DrydockRepositoryOperationType',
|
||||||
|
'DrydockTextLogType' => 'DrydockLogType',
|
||||||
'DrydockWebrootInterface' => 'DrydockInterface',
|
'DrydockWebrootInterface' => 'DrydockInterface',
|
||||||
'DrydockWorker' => 'PhabricatorWorker',
|
'DrydockWorker' => 'PhabricatorWorker',
|
||||||
'DrydockWorkingCopyBlueprintImplementation' => 'DrydockBlueprintImplementation',
|
'DrydockWorkingCopyBlueprintImplementation' => 'DrydockBlueprintImplementation',
|
||||||
@@ -7155,13 +7171,8 @@ phutil_register_library_map(array(
|
|||||||
'ManiphestDAO' => 'PhabricatorLiskDAO',
|
'ManiphestDAO' => 'PhabricatorLiskDAO',
|
||||||
'ManiphestDefaultEditCapability' => 'PhabricatorPolicyCapability',
|
'ManiphestDefaultEditCapability' => 'PhabricatorPolicyCapability',
|
||||||
'ManiphestDefaultViewCapability' => 'PhabricatorPolicyCapability',
|
'ManiphestDefaultViewCapability' => 'PhabricatorPolicyCapability',
|
||||||
'ManiphestEditAssignCapability' => 'PhabricatorPolicyCapability',
|
|
||||||
'ManiphestEditConduitAPIMethod' => 'PhabricatorEditEngineAPIMethod',
|
'ManiphestEditConduitAPIMethod' => 'PhabricatorEditEngineAPIMethod',
|
||||||
'ManiphestEditEngine' => 'PhabricatorEditEngine',
|
'ManiphestEditEngine' => 'PhabricatorEditEngine',
|
||||||
'ManiphestEditPoliciesCapability' => 'PhabricatorPolicyCapability',
|
|
||||||
'ManiphestEditPriorityCapability' => 'PhabricatorPolicyCapability',
|
|
||||||
'ManiphestEditProjectsCapability' => 'PhabricatorPolicyCapability',
|
|
||||||
'ManiphestEditStatusCapability' => 'PhabricatorPolicyCapability',
|
|
||||||
'ManiphestEmailCommand' => 'MetaMTAEmailTransactionCommand',
|
'ManiphestEmailCommand' => 'MetaMTAEmailTransactionCommand',
|
||||||
'ManiphestGetTaskTransactionsConduitAPIMethod' => 'ManiphestConduitAPIMethod',
|
'ManiphestGetTaskTransactionsConduitAPIMethod' => 'ManiphestConduitAPIMethod',
|
||||||
'ManiphestHovercardEngineExtension' => 'PhabricatorHovercardEngineExtension',
|
'ManiphestHovercardEngineExtension' => 'PhabricatorHovercardEngineExtension',
|
||||||
@@ -7466,7 +7477,7 @@ phutil_register_library_map(array(
|
|||||||
'PHUIDiffTableOfContentsListView' => 'AphrontView',
|
'PHUIDiffTableOfContentsListView' => 'AphrontView',
|
||||||
'PHUIDiffTwoUpInlineCommentRowScaffold' => 'PHUIDiffInlineCommentRowScaffold',
|
'PHUIDiffTwoUpInlineCommentRowScaffold' => 'PHUIDiffInlineCommentRowScaffold',
|
||||||
'PHUIDocumentSummaryView' => 'AphrontTagView',
|
'PHUIDocumentSummaryView' => 'AphrontTagView',
|
||||||
'PHUIDocumentViewPro' => 'AphrontTagView',
|
'PHUIDocumentView' => 'AphrontTagView',
|
||||||
'PHUIFeedStoryExample' => 'PhabricatorUIExample',
|
'PHUIFeedStoryExample' => 'PhabricatorUIExample',
|
||||||
'PHUIFeedStoryView' => 'AphrontView',
|
'PHUIFeedStoryView' => 'AphrontView',
|
||||||
'PHUIFormDividerControl' => 'AphrontFormControl',
|
'PHUIFormDividerControl' => 'AphrontFormControl',
|
||||||
@@ -7606,6 +7617,7 @@ phutil_register_library_map(array(
|
|||||||
'PasteSearchConduitAPIMethod' => 'PhabricatorSearchEngineAPIMethod',
|
'PasteSearchConduitAPIMethod' => 'PhabricatorSearchEngineAPIMethod',
|
||||||
'PeopleBrowseUserDirectoryCapability' => 'PhabricatorPolicyCapability',
|
'PeopleBrowseUserDirectoryCapability' => 'PhabricatorPolicyCapability',
|
||||||
'PeopleCreateUsersCapability' => 'PhabricatorPolicyCapability',
|
'PeopleCreateUsersCapability' => 'PhabricatorPolicyCapability',
|
||||||
|
'PeopleDisableUsersCapability' => 'PhabricatorPolicyCapability',
|
||||||
'PeopleHovercardEngineExtension' => 'PhabricatorHovercardEngineExtension',
|
'PeopleHovercardEngineExtension' => 'PhabricatorHovercardEngineExtension',
|
||||||
'PeopleMainMenuBarExtension' => 'PhabricatorMainMenuBarExtension',
|
'PeopleMainMenuBarExtension' => 'PhabricatorMainMenuBarExtension',
|
||||||
'PeopleUserLogGarbageCollector' => 'PhabricatorGarbageCollector',
|
'PeopleUserLogGarbageCollector' => 'PhabricatorGarbageCollector',
|
||||||
@@ -7722,7 +7734,6 @@ phutil_register_library_map(array(
|
|||||||
'PhabricatorAuditActionConstants' => 'Phobject',
|
'PhabricatorAuditActionConstants' => 'Phobject',
|
||||||
'PhabricatorAuditApplication' => 'PhabricatorApplication',
|
'PhabricatorAuditApplication' => 'PhabricatorApplication',
|
||||||
'PhabricatorAuditCommentEditor' => 'PhabricatorEditor',
|
'PhabricatorAuditCommentEditor' => 'PhabricatorEditor',
|
||||||
'PhabricatorAuditCommitStatusConstants' => 'Phobject',
|
|
||||||
'PhabricatorAuditController' => 'PhabricatorController',
|
'PhabricatorAuditController' => 'PhabricatorController',
|
||||||
'PhabricatorAuditEditor' => 'PhabricatorApplicationTransactionEditor',
|
'PhabricatorAuditEditor' => 'PhabricatorApplicationTransactionEditor',
|
||||||
'PhabricatorAuditInlineComment' => array(
|
'PhabricatorAuditInlineComment' => array(
|
||||||
@@ -8305,10 +8316,7 @@ phutil_register_library_map(array(
|
|||||||
'PhabricatorConfigManualActivity' => 'PhabricatorConfigEntryDAO',
|
'PhabricatorConfigManualActivity' => 'PhabricatorConfigEntryDAO',
|
||||||
'PhabricatorConfigModule' => 'Phobject',
|
'PhabricatorConfigModule' => 'Phobject',
|
||||||
'PhabricatorConfigModuleController' => 'PhabricatorConfigController',
|
'PhabricatorConfigModuleController' => 'PhabricatorConfigController',
|
||||||
'PhabricatorConfigOption' => array(
|
'PhabricatorConfigOption' => 'Phobject',
|
||||||
'Phobject',
|
|
||||||
'PhabricatorMarkupInterface',
|
|
||||||
),
|
|
||||||
'PhabricatorConfigOptionType' => 'Phobject',
|
'PhabricatorConfigOptionType' => 'Phobject',
|
||||||
'PhabricatorConfigPHIDModule' => 'PhabricatorConfigModule',
|
'PhabricatorConfigPHIDModule' => 'PhabricatorConfigModule',
|
||||||
'PhabricatorConfigProxySource' => 'PhabricatorConfigSource',
|
'PhabricatorConfigProxySource' => 'PhabricatorConfigSource',
|
||||||
@@ -10558,6 +10566,8 @@ phutil_register_library_map(array(
|
|||||||
'PhabricatorUserCustomFieldNumericIndex' => 'PhabricatorCustomFieldNumericIndexStorage',
|
'PhabricatorUserCustomFieldNumericIndex' => 'PhabricatorCustomFieldNumericIndexStorage',
|
||||||
'PhabricatorUserCustomFieldStringIndex' => 'PhabricatorCustomFieldStringIndexStorage',
|
'PhabricatorUserCustomFieldStringIndex' => 'PhabricatorCustomFieldStringIndexStorage',
|
||||||
'PhabricatorUserDAO' => 'PhabricatorLiskDAO',
|
'PhabricatorUserDAO' => 'PhabricatorLiskDAO',
|
||||||
|
'PhabricatorUserDisableTransaction' => 'PhabricatorUserTransactionType',
|
||||||
|
'PhabricatorUserEditEngine' => 'PhabricatorEditEngine',
|
||||||
'PhabricatorUserEditor' => 'PhabricatorEditor',
|
'PhabricatorUserEditor' => 'PhabricatorEditor',
|
||||||
'PhabricatorUserEditorTestCase' => 'PhabricatorTestCase',
|
'PhabricatorUserEditorTestCase' => 'PhabricatorTestCase',
|
||||||
'PhabricatorUserEmail' => 'PhabricatorUserDAO',
|
'PhabricatorUserEmail' => 'PhabricatorUserDAO',
|
||||||
@@ -10587,7 +10597,6 @@ phutil_register_library_map(array(
|
|||||||
'PhabricatorUserPreferencesTransaction' => 'PhabricatorApplicationTransaction',
|
'PhabricatorUserPreferencesTransaction' => 'PhabricatorApplicationTransaction',
|
||||||
'PhabricatorUserPreferencesTransactionQuery' => 'PhabricatorApplicationTransactionQuery',
|
'PhabricatorUserPreferencesTransactionQuery' => 'PhabricatorApplicationTransactionQuery',
|
||||||
'PhabricatorUserProfile' => 'PhabricatorUserDAO',
|
'PhabricatorUserProfile' => 'PhabricatorUserDAO',
|
||||||
'PhabricatorUserProfileEditor' => 'PhabricatorApplicationTransactionEditor',
|
|
||||||
'PhabricatorUserProfileImageCacheType' => 'PhabricatorUserCacheType',
|
'PhabricatorUserProfileImageCacheType' => 'PhabricatorUserCacheType',
|
||||||
'PhabricatorUserRealNameField' => 'PhabricatorUserCustomField',
|
'PhabricatorUserRealNameField' => 'PhabricatorUserCustomField',
|
||||||
'PhabricatorUserRolesField' => 'PhabricatorUserCustomField',
|
'PhabricatorUserRolesField' => 'PhabricatorUserCustomField',
|
||||||
@@ -10596,7 +10605,9 @@ phutil_register_library_map(array(
|
|||||||
'PhabricatorUserStatusField' => 'PhabricatorUserCustomField',
|
'PhabricatorUserStatusField' => 'PhabricatorUserCustomField',
|
||||||
'PhabricatorUserTestCase' => 'PhabricatorTestCase',
|
'PhabricatorUserTestCase' => 'PhabricatorTestCase',
|
||||||
'PhabricatorUserTitleField' => 'PhabricatorUserCustomField',
|
'PhabricatorUserTitleField' => 'PhabricatorUserCustomField',
|
||||||
'PhabricatorUserTransaction' => 'PhabricatorApplicationTransaction',
|
'PhabricatorUserTransaction' => 'PhabricatorModularTransaction',
|
||||||
|
'PhabricatorUserTransactionEditor' => 'PhabricatorApplicationTransactionEditor',
|
||||||
|
'PhabricatorUserTransactionType' => 'PhabricatorModularTransactionType',
|
||||||
'PhabricatorUsersEditField' => 'PhabricatorTokenizerEditField',
|
'PhabricatorUsersEditField' => 'PhabricatorTokenizerEditField',
|
||||||
'PhabricatorUsersPolicyRule' => 'PhabricatorPolicyRule',
|
'PhabricatorUsersPolicyRule' => 'PhabricatorPolicyRule',
|
||||||
'PhabricatorUsersSearchField' => 'PhabricatorSearchTokenizerField',
|
'PhabricatorUsersSearchField' => 'PhabricatorSearchTokenizerField',
|
||||||
@@ -11145,29 +11156,35 @@ phutil_register_library_map(array(
|
|||||||
),
|
),
|
||||||
'PhrictionDocumentAuthorHeraldField' => 'PhrictionDocumentHeraldField',
|
'PhrictionDocumentAuthorHeraldField' => 'PhrictionDocumentHeraldField',
|
||||||
'PhrictionDocumentContentHeraldField' => 'PhrictionDocumentHeraldField',
|
'PhrictionDocumentContentHeraldField' => 'PhrictionDocumentHeraldField',
|
||||||
'PhrictionDocumentContentTransaction' => 'PhrictionDocumentTransactionType',
|
'PhrictionDocumentContentTransaction' => 'PhrictionDocumentEditTransaction',
|
||||||
'PhrictionDocumentController' => 'PhrictionController',
|
'PhrictionDocumentController' => 'PhrictionController',
|
||||||
'PhrictionDocumentDatasource' => 'PhabricatorTypeaheadDatasource',
|
'PhrictionDocumentDatasource' => 'PhabricatorTypeaheadDatasource',
|
||||||
'PhrictionDocumentDeleteTransaction' => 'PhrictionDocumentTransactionType',
|
'PhrictionDocumentDeleteTransaction' => 'PhrictionDocumentVersionTransaction',
|
||||||
|
'PhrictionDocumentDraftTransaction' => 'PhrictionDocumentEditTransaction',
|
||||||
|
'PhrictionDocumentEditEngine' => 'PhabricatorEditEngine',
|
||||||
|
'PhrictionDocumentEditTransaction' => 'PhrictionDocumentVersionTransaction',
|
||||||
'PhrictionDocumentFerretEngine' => 'PhabricatorFerretEngine',
|
'PhrictionDocumentFerretEngine' => 'PhabricatorFerretEngine',
|
||||||
'PhrictionDocumentFulltextEngine' => 'PhabricatorFulltextEngine',
|
'PhrictionDocumentFulltextEngine' => 'PhabricatorFulltextEngine',
|
||||||
'PhrictionDocumentHeraldAdapter' => 'HeraldAdapter',
|
'PhrictionDocumentHeraldAdapter' => 'HeraldAdapter',
|
||||||
'PhrictionDocumentHeraldField' => 'HeraldField',
|
'PhrictionDocumentHeraldField' => 'HeraldField',
|
||||||
'PhrictionDocumentHeraldFieldGroup' => 'HeraldFieldGroup',
|
'PhrictionDocumentHeraldFieldGroup' => 'HeraldFieldGroup',
|
||||||
'PhrictionDocumentMoveAwayTransaction' => 'PhrictionDocumentTransactionType',
|
'PhrictionDocumentMoveAwayTransaction' => 'PhrictionDocumentVersionTransaction',
|
||||||
'PhrictionDocumentMoveToTransaction' => 'PhrictionDocumentTransactionType',
|
'PhrictionDocumentMoveToTransaction' => 'PhrictionDocumentVersionTransaction',
|
||||||
'PhrictionDocumentPHIDType' => 'PhabricatorPHIDType',
|
'PhrictionDocumentPHIDType' => 'PhabricatorPHIDType',
|
||||||
'PhrictionDocumentPathHeraldField' => 'PhrictionDocumentHeraldField',
|
'PhrictionDocumentPathHeraldField' => 'PhrictionDocumentHeraldField',
|
||||||
'PhrictionDocumentPolicyCodex' => 'PhabricatorPolicyCodex',
|
'PhrictionDocumentPolicyCodex' => 'PhabricatorPolicyCodex',
|
||||||
|
'PhrictionDocumentPublishTransaction' => 'PhrictionDocumentTransactionType',
|
||||||
'PhrictionDocumentQuery' => 'PhabricatorCursorPagedPolicyAwareQuery',
|
'PhrictionDocumentQuery' => 'PhabricatorCursorPagedPolicyAwareQuery',
|
||||||
'PhrictionDocumentSearchConduitAPIMethod' => 'PhabricatorSearchEngineAPIMethod',
|
'PhrictionDocumentSearchConduitAPIMethod' => 'PhabricatorSearchEngineAPIMethod',
|
||||||
'PhrictionDocumentSearchEngine' => 'PhabricatorApplicationSearchEngine',
|
'PhrictionDocumentSearchEngine' => 'PhabricatorApplicationSearchEngine',
|
||||||
'PhrictionDocumentStatus' => 'PhabricatorObjectStatus',
|
'PhrictionDocumentStatus' => 'PhabricatorObjectStatus',
|
||||||
'PhrictionDocumentTitleHeraldField' => 'PhrictionDocumentHeraldField',
|
'PhrictionDocumentTitleHeraldField' => 'PhrictionDocumentHeraldField',
|
||||||
'PhrictionDocumentTitleTransaction' => 'PhrictionDocumentTransactionType',
|
'PhrictionDocumentTitleTransaction' => 'PhrictionDocumentVersionTransaction',
|
||||||
'PhrictionDocumentTransactionType' => 'PhabricatorModularTransactionType',
|
'PhrictionDocumentTransactionType' => 'PhabricatorModularTransactionType',
|
||||||
|
'PhrictionDocumentVersionTransaction' => 'PhrictionDocumentTransactionType',
|
||||||
'PhrictionEditConduitAPIMethod' => 'PhrictionConduitAPIMethod',
|
'PhrictionEditConduitAPIMethod' => 'PhrictionConduitAPIMethod',
|
||||||
'PhrictionEditController' => 'PhrictionController',
|
'PhrictionEditController' => 'PhrictionController',
|
||||||
|
'PhrictionEditEngineController' => 'PhrictionController',
|
||||||
'PhrictionHistoryConduitAPIMethod' => 'PhrictionConduitAPIMethod',
|
'PhrictionHistoryConduitAPIMethod' => 'PhrictionConduitAPIMethod',
|
||||||
'PhrictionHistoryController' => 'PhrictionController',
|
'PhrictionHistoryController' => 'PhrictionController',
|
||||||
'PhrictionInfoConduitAPIMethod' => 'PhrictionConduitAPIMethod',
|
'PhrictionInfoConduitAPIMethod' => 'PhrictionConduitAPIMethod',
|
||||||
@@ -11175,6 +11192,7 @@ phutil_register_library_map(array(
|
|||||||
'PhrictionMarkupPreviewController' => 'PhabricatorController',
|
'PhrictionMarkupPreviewController' => 'PhabricatorController',
|
||||||
'PhrictionMoveController' => 'PhrictionController',
|
'PhrictionMoveController' => 'PhrictionController',
|
||||||
'PhrictionNewController' => 'PhrictionController',
|
'PhrictionNewController' => 'PhrictionController',
|
||||||
|
'PhrictionPublishController' => 'PhrictionController',
|
||||||
'PhrictionRemarkupRule' => 'PhutilRemarkupRule',
|
'PhrictionRemarkupRule' => 'PhutilRemarkupRule',
|
||||||
'PhrictionReplyHandler' => 'PhabricatorApplicationTransactionReplyHandler',
|
'PhrictionReplyHandler' => 'PhabricatorApplicationTransactionReplyHandler',
|
||||||
'PhrictionSchemaSpec' => 'PhabricatorConfigSchemaSpec',
|
'PhrictionSchemaSpec' => 'PhabricatorConfigSchemaSpec',
|
||||||
@@ -11400,6 +11418,7 @@ phutil_register_library_map(array(
|
|||||||
'TransactionSearchConduitAPIMethod' => 'ConduitAPIMethod',
|
'TransactionSearchConduitAPIMethod' => 'ConduitAPIMethod',
|
||||||
'UserConduitAPIMethod' => 'ConduitAPIMethod',
|
'UserConduitAPIMethod' => 'ConduitAPIMethod',
|
||||||
'UserDisableConduitAPIMethod' => 'UserConduitAPIMethod',
|
'UserDisableConduitAPIMethod' => 'UserConduitAPIMethod',
|
||||||
|
'UserEditConduitAPIMethod' => 'PhabricatorEditEngineAPIMethod',
|
||||||
'UserEnableConduitAPIMethod' => 'UserConduitAPIMethod',
|
'UserEnableConduitAPIMethod' => 'UserConduitAPIMethod',
|
||||||
'UserFindConduitAPIMethod' => 'UserConduitAPIMethod',
|
'UserFindConduitAPIMethod' => 'UserConduitAPIMethod',
|
||||||
'UserQueryConduitAPIMethod' => 'UserConduitAPIMethod',
|
'UserQueryConduitAPIMethod' => 'UserConduitAPIMethod',
|
||||||
|
|||||||
@@ -127,6 +127,9 @@ final class AlmanacInterfaceEditEngine
|
|||||||
}
|
}
|
||||||
|
|
||||||
protected function getObjectCreateCancelURI($object) {
|
protected function getObjectCreateCancelURI($object) {
|
||||||
|
if ($this->getDevice()) {
|
||||||
|
return $this->getDevice()->getURI();
|
||||||
|
}
|
||||||
return '/almanac/interface/';
|
return '/almanac/interface/';
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -68,17 +68,17 @@ final class AuditQueryConduitAPIMethod extends AuditConduitAPIMethod {
|
|||||||
|
|
||||||
$status_map = array(
|
$status_map = array(
|
||||||
self::AUDIT_LEGACYSTATUS_OPEN => array(
|
self::AUDIT_LEGACYSTATUS_OPEN => array(
|
||||||
PhabricatorAuditCommitStatusConstants::NEEDS_AUDIT,
|
DiffusionCommitAuditStatus::NEEDS_AUDIT,
|
||||||
PhabricatorAuditCommitStatusConstants::CONCERN_RAISED,
|
DiffusionCommitAuditStatus::CONCERN_RAISED,
|
||||||
),
|
),
|
||||||
self::AUDIT_LEGACYSTATUS_CONCERN => array(
|
self::AUDIT_LEGACYSTATUS_CONCERN => array(
|
||||||
PhabricatorAuditCommitStatusConstants::CONCERN_RAISED,
|
DiffusionCommitAuditStatus::CONCERN_RAISED,
|
||||||
),
|
),
|
||||||
self::AUDIT_LEGACYSTATUS_ACCEPTED => array(
|
self::AUDIT_LEGACYSTATUS_ACCEPTED => array(
|
||||||
PhabricatorAuditCommitStatusConstants::FULLY_AUDITED,
|
DiffusionCommitAuditStatus::AUDITED,
|
||||||
),
|
),
|
||||||
self::AUDIT_LEGACYSTATUS_PARTIAL => array(
|
self::AUDIT_LEGACYSTATUS_PARTIAL => array(
|
||||||
PhabricatorAuditCommitStatusConstants::PARTIALLY_AUDITED,
|
DiffusionCommitAuditStatus::PARTIALLY_AUDITED,
|
||||||
),
|
),
|
||||||
);
|
);
|
||||||
|
|
||||||
|
|||||||
@@ -1,92 +0,0 @@
|
|||||||
<?php
|
|
||||||
|
|
||||||
final class PhabricatorAuditCommitStatusConstants extends Phobject {
|
|
||||||
|
|
||||||
const NONE = 0;
|
|
||||||
const NEEDS_AUDIT = 1;
|
|
||||||
const CONCERN_RAISED = 2;
|
|
||||||
const PARTIALLY_AUDITED = 3;
|
|
||||||
const FULLY_AUDITED = 4;
|
|
||||||
const NEEDS_VERIFICATION = 5;
|
|
||||||
|
|
||||||
public static function getStatusNameMap() {
|
|
||||||
$map = array(
|
|
||||||
self::NONE => pht('No Audits'),
|
|
||||||
self::NEEDS_AUDIT => pht('Audit Required'),
|
|
||||||
self::CONCERN_RAISED => pht('Concern Raised'),
|
|
||||||
self::NEEDS_VERIFICATION => pht('Needs Verification'),
|
|
||||||
self::PARTIALLY_AUDITED => pht('Partially Audited'),
|
|
||||||
self::FULLY_AUDITED => pht('Audited'),
|
|
||||||
);
|
|
||||||
|
|
||||||
return $map;
|
|
||||||
}
|
|
||||||
|
|
||||||
public static function getStatusName($code) {
|
|
||||||
return idx(self::getStatusNameMap(), $code, pht('Unknown'));
|
|
||||||
}
|
|
||||||
|
|
||||||
public static function getOpenStatusConstants() {
|
|
||||||
return array(
|
|
||||||
self::CONCERN_RAISED,
|
|
||||||
self::NEEDS_AUDIT,
|
|
||||||
self::NEEDS_VERIFICATION,
|
|
||||||
self::PARTIALLY_AUDITED,
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
public static function getStatusColor($code) {
|
|
||||||
switch ($code) {
|
|
||||||
case self::CONCERN_RAISED:
|
|
||||||
$color = 'red';
|
|
||||||
break;
|
|
||||||
case self::NEEDS_AUDIT:
|
|
||||||
$color = 'orange';
|
|
||||||
break;
|
|
||||||
case self::PARTIALLY_AUDITED:
|
|
||||||
$color = 'yellow';
|
|
||||||
break;
|
|
||||||
case self::FULLY_AUDITED:
|
|
||||||
$color = 'green';
|
|
||||||
break;
|
|
||||||
case self::NONE:
|
|
||||||
$color = 'bluegrey';
|
|
||||||
break;
|
|
||||||
case self::NEEDS_VERIFICATION:
|
|
||||||
$color = 'indigo';
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
$color = null;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
return $color;
|
|
||||||
}
|
|
||||||
|
|
||||||
public static function getStatusIcon($code) {
|
|
||||||
switch ($code) {
|
|
||||||
case self::CONCERN_RAISED:
|
|
||||||
$icon = 'fa-times-circle';
|
|
||||||
break;
|
|
||||||
case self::NEEDS_AUDIT:
|
|
||||||
$icon = 'fa-exclamation-circle';
|
|
||||||
break;
|
|
||||||
case self::PARTIALLY_AUDITED:
|
|
||||||
$icon = 'fa-check-circle-o';
|
|
||||||
break;
|
|
||||||
case self::FULLY_AUDITED:
|
|
||||||
$icon = 'fa-check-circle';
|
|
||||||
break;
|
|
||||||
case self::NONE:
|
|
||||||
$icon = 'fa-check';
|
|
||||||
break;
|
|
||||||
case self::NEEDS_VERIFICATION:
|
|
||||||
$icon = 'fa-refresh';
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
$icon = null;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
return $icon;
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
@@ -206,12 +206,10 @@ final class PhabricatorAuditEditor
|
|||||||
$object->writeImportStatusFlag($import_status_flag);
|
$object->writeImportStatusFlag($import_status_flag);
|
||||||
}
|
}
|
||||||
|
|
||||||
$partial_status = PhabricatorAuditCommitStatusConstants::PARTIALLY_AUDITED;
|
|
||||||
|
|
||||||
// If the commit has changed state after this edit, add an informational
|
// If the commit has changed state after this edit, add an informational
|
||||||
// transaction about the state change.
|
// transaction about the state change.
|
||||||
if ($old_status != $new_status) {
|
if ($old_status != $new_status) {
|
||||||
if ($new_status == $partial_status) {
|
if ($object->isAuditStatusPartiallyAudited()) {
|
||||||
// This state isn't interesting enough to get a transaction. The
|
// This state isn't interesting enough to get a transaction. The
|
||||||
// best way we could lead the user forward is something like "This
|
// best way we could lead the user forward is something like "This
|
||||||
// commit still requires additional audits." but that's redundant and
|
// commit still requires additional audits." but that's redundant and
|
||||||
@@ -258,19 +256,31 @@ final class PhabricatorAuditEditor
|
|||||||
$this->didExpandInlineState = true;
|
$this->didExpandInlineState = true;
|
||||||
|
|
||||||
$actor_phid = $this->getActingAsPHID();
|
$actor_phid = $this->getActingAsPHID();
|
||||||
$actor_is_author = ($object->getAuthorPHID() == $actor_phid);
|
$author_phid = $object->getAuthorPHID();
|
||||||
if (!$actor_is_author) {
|
$actor_is_author = ($actor_phid == $author_phid);
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
$state_map = PhabricatorTransactions::getInlineStateMap();
|
$state_map = PhabricatorTransactions::getInlineStateMap();
|
||||||
|
|
||||||
$inlines = id(new DiffusionDiffInlineCommentQuery())
|
$query = id(new DiffusionDiffInlineCommentQuery())
|
||||||
->setViewer($this->getActor())
|
->setViewer($this->getActor())
|
||||||
->withCommitPHIDs(array($object->getPHID()))
|
->withCommitPHIDs(array($object->getPHID()))
|
||||||
->withFixedStates(array_keys($state_map))
|
->withFixedStates(array_keys($state_map));
|
||||||
|
|
||||||
|
$inlines = array();
|
||||||
|
|
||||||
|
$inlines[] = id(clone $query)
|
||||||
|
->withAuthorPHIDs(array($actor_phid))
|
||||||
|
->withHasTransaction(false)
|
||||||
->execute();
|
->execute();
|
||||||
|
|
||||||
|
if ($actor_is_author) {
|
||||||
|
$inlines[] = id(clone $query)
|
||||||
|
->withHasTransaction(true)
|
||||||
|
->execute();
|
||||||
|
}
|
||||||
|
|
||||||
|
$inlines = array_mergev($inlines);
|
||||||
|
|
||||||
if (!$inlines) {
|
if (!$inlines) {
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -30,11 +30,11 @@ final class PhabricatorAuditSynchronizeManagementWorkflow
|
|||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
$old_status = $commit->getAuditStatus();
|
$old_status = $commit->getAuditStatusObject();
|
||||||
$commit->updateAuditStatus($commit->getAudits());
|
$commit->updateAuditStatus($commit->getAudits());
|
||||||
$new_status = $commit->getAuditStatus();
|
$new_status = $commit->getAuditStatusObject();
|
||||||
|
|
||||||
if ($old_status == $new_status) {
|
if ($old_status->getKey() == $new_status->getKey()) {
|
||||||
echo tsprintf(
|
echo tsprintf(
|
||||||
"%s\n",
|
"%s\n",
|
||||||
pht(
|
pht(
|
||||||
@@ -46,10 +46,8 @@ final class PhabricatorAuditSynchronizeManagementWorkflow
|
|||||||
pht(
|
pht(
|
||||||
'Updating "%s": "%s" -> "%s".',
|
'Updating "%s": "%s" -> "%s".',
|
||||||
$commit->getDisplayName(),
|
$commit->getDisplayName(),
|
||||||
PhabricatorAuditCommitStatusConstants::getStatusName(
|
$old_status->getName(),
|
||||||
$old_status),
|
$new_status->getName()));
|
||||||
PhabricatorAuditCommitStatusConstants::getStatusName(
|
|
||||||
$new_status)));
|
|
||||||
|
|
||||||
$commit->save();
|
$commit->save();
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -15,6 +15,7 @@ final class PhabricatorCommitSearchEngine
|
|||||||
return id(new DiffusionCommitQuery())
|
return id(new DiffusionCommitQuery())
|
||||||
->needAuditRequests(true)
|
->needAuditRequests(true)
|
||||||
->needCommitData(true)
|
->needCommitData(true)
|
||||||
|
->needIdentities(true)
|
||||||
->needDrafts(true);
|
->needDrafts(true);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -67,35 +68,50 @@ final class PhabricatorCommitSearchEngine
|
|||||||
->setKey('responsiblePHIDs')
|
->setKey('responsiblePHIDs')
|
||||||
->setConduitKey('responsible')
|
->setConduitKey('responsible')
|
||||||
->setAliases(array('responsible', 'responsibles', 'responsiblePHID'))
|
->setAliases(array('responsible', 'responsibles', 'responsiblePHID'))
|
||||||
->setDatasource(new DifferentialResponsibleDatasource()),
|
->setDatasource(new DifferentialResponsibleDatasource())
|
||||||
|
->setDescription(
|
||||||
|
pht(
|
||||||
|
'Find commits where given users, projects, or packages are '.
|
||||||
|
'responsible for the next steps in the audit workflow.')),
|
||||||
id(new PhabricatorUsersSearchField())
|
id(new PhabricatorUsersSearchField())
|
||||||
->setLabel(pht('Authors'))
|
->setLabel(pht('Authors'))
|
||||||
->setKey('authorPHIDs')
|
->setKey('authorPHIDs')
|
||||||
->setConduitKey('authors')
|
->setConduitKey('authors')
|
||||||
->setAliases(array('author', 'authors', 'authorPHID')),
|
->setAliases(array('author', 'authors', 'authorPHID'))
|
||||||
|
->setDescription(pht('Find commits authored by particular users.')),
|
||||||
id(new PhabricatorSearchDatasourceField())
|
id(new PhabricatorSearchDatasourceField())
|
||||||
->setLabel(pht('Auditors'))
|
->setLabel(pht('Auditors'))
|
||||||
->setKey('auditorPHIDs')
|
->setKey('auditorPHIDs')
|
||||||
->setConduitKey('auditors')
|
->setConduitKey('auditors')
|
||||||
->setAliases(array('auditor', 'auditors', 'auditorPHID'))
|
->setAliases(array('auditor', 'auditors', 'auditorPHID'))
|
||||||
->setDatasource(new DiffusionAuditorFunctionDatasource()),
|
->setDatasource(new DiffusionAuditorFunctionDatasource())
|
||||||
|
->setDescription(
|
||||||
|
pht(
|
||||||
|
'Find commits where given users, projects, or packages are '.
|
||||||
|
'auditors.')),
|
||||||
id(new PhabricatorSearchCheckboxesField())
|
id(new PhabricatorSearchCheckboxesField())
|
||||||
->setLabel(pht('Audit Status'))
|
->setLabel(pht('Audit Status'))
|
||||||
->setKey('statuses')
|
->setKey('statuses')
|
||||||
->setAliases(array('status'))
|
->setAliases(array('status'))
|
||||||
->setOptions(PhabricatorAuditCommitStatusConstants::getStatusNameMap()),
|
->setOptions(DiffusionCommitAuditStatus::newOptions())
|
||||||
|
->setDeprecatedOptions(
|
||||||
|
DiffusionCommitAuditStatus::newDeprecatedOptions())
|
||||||
|
->setDescription(pht('Find commits with given audit statuses.')),
|
||||||
id(new PhabricatorSearchDatasourceField())
|
id(new PhabricatorSearchDatasourceField())
|
||||||
->setLabel(pht('Repositories'))
|
->setLabel(pht('Repositories'))
|
||||||
->setKey('repositoryPHIDs')
|
->setKey('repositoryPHIDs')
|
||||||
->setConduitKey('repositories')
|
->setConduitKey('repositories')
|
||||||
->setAliases(array('repository', 'repositories', 'repositoryPHID'))
|
->setAliases(array('repository', 'repositories', 'repositoryPHID'))
|
||||||
->setDatasource(new DiffusionRepositoryFunctionDatasource()),
|
->setDatasource(new DiffusionRepositoryFunctionDatasource())
|
||||||
|
->setDescription(pht('Find commits in particular repositories.')),
|
||||||
id(new PhabricatorSearchDatasourceField())
|
id(new PhabricatorSearchDatasourceField())
|
||||||
->setLabel(pht('Packages'))
|
->setLabel(pht('Packages'))
|
||||||
->setKey('packagePHIDs')
|
->setKey('packagePHIDs')
|
||||||
->setConduitKey('packages')
|
->setConduitKey('packages')
|
||||||
->setAliases(array('package', 'packages', 'packagePHID'))
|
->setAliases(array('package', 'packages', 'packagePHID'))
|
||||||
->setDatasource(new PhabricatorOwnersPackageDatasource()),
|
->setDatasource(new PhabricatorOwnersPackageDatasource())
|
||||||
|
->setDescription(
|
||||||
|
pht('Find commits which affect given packages.')),
|
||||||
id(new PhabricatorSearchThreeStateField())
|
id(new PhabricatorSearchThreeStateField())
|
||||||
->setLabel(pht('Unreachable'))
|
->setLabel(pht('Unreachable'))
|
||||||
->setKey('unreachable')
|
->setKey('unreachable')
|
||||||
@@ -147,7 +163,7 @@ final class PhabricatorCommitSearchEngine
|
|||||||
case 'active':
|
case 'active':
|
||||||
$bucket_key = DiffusionCommitRequiredActionResultBucket::BUCKETKEY;
|
$bucket_key = DiffusionCommitRequiredActionResultBucket::BUCKETKEY;
|
||||||
|
|
||||||
$open = PhabricatorAuditCommitStatusConstants::getOpenStatusConstants();
|
$open = DiffusionCommitAuditStatus::getOpenStatusConstants();
|
||||||
|
|
||||||
$query
|
$query
|
||||||
->setParameter('responsiblePHIDs', array($viewer_phid))
|
->setParameter('responsiblePHIDs', array($viewer_phid))
|
||||||
|
|||||||
@@ -120,14 +120,11 @@ final class PhabricatorAuditListView extends AphrontView {
|
|||||||
$commit_desc = $this->getCommitDescription($commit_phid);
|
$commit_desc = $this->getCommitDescription($commit_phid);
|
||||||
$committed = phabricator_datetime($commit->getEpoch(), $viewer);
|
$committed = phabricator_datetime($commit->getEpoch(), $viewer);
|
||||||
|
|
||||||
$status = $commit->getAuditStatus();
|
$status = $commit->getAuditStatusObject();
|
||||||
|
|
||||||
$status_text =
|
$status_text = $status->getName();
|
||||||
PhabricatorAuditCommitStatusConstants::getStatusName($status);
|
$status_color = $status->getColor();
|
||||||
$status_color =
|
$status_icon = $status->getIcon();
|
||||||
PhabricatorAuditCommitStatusConstants::getStatusColor($status);
|
|
||||||
$status_icon =
|
|
||||||
PhabricatorAuditCommitStatusConstants::getStatusIcon($status);
|
|
||||||
|
|
||||||
$author_phid = $commit->getAuthorPHID();
|
$author_phid = $commit->getAuthorPHID();
|
||||||
if ($author_phid) {
|
if ($author_phid) {
|
||||||
|
|||||||
@@ -490,8 +490,7 @@ final class PhabricatorAuthSessionEngine extends Phobject {
|
|||||||
PhabricatorAuthSession $session,
|
PhabricatorAuthSession $session,
|
||||||
$force = false) {
|
$force = false) {
|
||||||
|
|
||||||
$until = $session->getHighSecurityUntil();
|
if ($session->isHighSecuritySession() || $force) {
|
||||||
if ($until > time() || $force) {
|
|
||||||
return new PhabricatorAuthHighSecurityToken();
|
return new PhabricatorAuthHighSecurityToken();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -154,6 +154,7 @@ final class PhabricatorTOTPAuthFactor extends PhabricatorAuthFactor {
|
|||||||
id(new PHUIFormNumberControl())
|
id(new PHUIFormNumberControl())
|
||||||
->setName($this->getParameterName($config, 'totpcode'))
|
->setName($this->getParameterName($config, 'totpcode'))
|
||||||
->setLabel(pht('App Code'))
|
->setLabel(pht('App Code'))
|
||||||
|
->setDisableAutocomplete(true)
|
||||||
->setCaption(pht('Factor Name: %s', $config->getFactorName()))
|
->setCaption(pht('Factor Name: %s', $config->getFactorName()))
|
||||||
->setValue(idx($validation_result, 'value'))
|
->setValue(idx($validation_result, 'value'))
|
||||||
->setError(idx($validation_result, 'error', true)));
|
->setError(idx($validation_result, 'error', true)));
|
||||||
|
|||||||
@@ -3,7 +3,7 @@
|
|||||||
final class PhabricatorAuthSSHKeyQuery
|
final class PhabricatorAuthSSHKeyQuery
|
||||||
extends PhabricatorCursorPagedPolicyAwareQuery {
|
extends PhabricatorCursorPagedPolicyAwareQuery {
|
||||||
|
|
||||||
const AUTHFILE_CACHEKEY = 'ssh.authfile';
|
const AUTHSTRUCT_CACHEKEY = 'ssh.authstruct';
|
||||||
|
|
||||||
private $ids;
|
private $ids;
|
||||||
private $phids;
|
private $phids;
|
||||||
@@ -13,7 +13,7 @@ final class PhabricatorAuthSSHKeyQuery
|
|||||||
|
|
||||||
public static function deleteSSHKeyCache() {
|
public static function deleteSSHKeyCache() {
|
||||||
$cache = PhabricatorCaches::getMutableCache();
|
$cache = PhabricatorCaches::getMutableCache();
|
||||||
$authfile_key = self::AUTHFILE_CACHEKEY;
|
$authfile_key = self::AUTHSTRUCT_CACHEKEY;
|
||||||
$cache->deleteKey($authfile_key);
|
$cache->deleteKey($authfile_key);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -184,6 +184,7 @@ final class PhabricatorAuthPassword
|
|||||||
public function getCapabilities() {
|
public function getCapabilities() {
|
||||||
return array(
|
return array(
|
||||||
PhabricatorPolicyCapability::CAN_VIEW,
|
PhabricatorPolicyCapability::CAN_VIEW,
|
||||||
|
PhabricatorPolicyCapability::CAN_EDIT,
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -201,7 +202,7 @@ final class PhabricatorAuthPassword
|
|||||||
|
|
||||||
public function getExtendedPolicy($capability, PhabricatorUser $viewer) {
|
public function getExtendedPolicy($capability, PhabricatorUser $viewer) {
|
||||||
return array(
|
return array(
|
||||||
array($this->getObject(), PhabricatorPolicyCapability::CAN_VIEW),
|
array($this->getObject(), $capability),
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -74,6 +74,22 @@ final class PhabricatorAuthSession extends PhabricatorAuthDAO
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function isHighSecuritySession() {
|
||||||
|
$until = $this->getHighSecurityUntil();
|
||||||
|
|
||||||
|
if (!$until) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
$now = PhabricatorTime::getNow();
|
||||||
|
if ($until < $now) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/* -( PhabricatorPolicyInterface )----------------------------------------- */
|
/* -( PhabricatorPolicyInterface )----------------------------------------- */
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -106,8 +106,21 @@ final class PhabricatorDataCacheSpec extends PhabricatorCacheSpec {
|
|||||||
$cache = $info['cache_list'];
|
$cache = $info['cache_list'];
|
||||||
$state = array();
|
$state = array();
|
||||||
foreach ($cache as $item) {
|
foreach ($cache as $item) {
|
||||||
$info = idx($item, 'info', '<unknown-key>');
|
// Some older versions of APCu report the cachekey as "key", while
|
||||||
|
// newer APCu and APC report it as "info". Just check both indexes
|
||||||
|
// for commpatibility. See T13164 for details.
|
||||||
|
|
||||||
|
$info = idx($item, 'info');
|
||||||
|
if ($info === null) {
|
||||||
|
$info = idx($item, 'key');
|
||||||
|
}
|
||||||
|
|
||||||
|
if ($info === null) {
|
||||||
|
$key = '<unknown-key>';
|
||||||
|
} else {
|
||||||
$key = self::getKeyPattern($info);
|
$key = self::getKeyPattern($info);
|
||||||
|
}
|
||||||
|
|
||||||
if (empty($state[$key])) {
|
if (empty($state[$key])) {
|
||||||
$state[$key] = array(
|
$state[$key] = array(
|
||||||
'max' => 0,
|
'max' => 0,
|
||||||
|
|||||||
36
src/applications/conduit/data/ConduitConstantDescription.php
Normal file
36
src/applications/conduit/data/ConduitConstantDescription.php
Normal file
@@ -0,0 +1,36 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
final class ConduitConstantDescription extends Phobject {
|
||||||
|
|
||||||
|
private $key;
|
||||||
|
private $value;
|
||||||
|
private $isDeprecated;
|
||||||
|
|
||||||
|
public function setKey($key) {
|
||||||
|
$this->key = $key;
|
||||||
|
return $this;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getKey() {
|
||||||
|
return $this->key;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function setValue($value) {
|
||||||
|
$this->value = $value;
|
||||||
|
return $this;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getValue() {
|
||||||
|
return $this->value;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function setIsDeprecated($is_deprecated) {
|
||||||
|
$this->isDeprecated = $is_deprecated;
|
||||||
|
return $this;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getIsDeprecated() {
|
||||||
|
return $this->isDeprecated;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@@ -21,6 +21,13 @@ final class PhabricatorConduitCallManagementWorkflow
|
|||||||
'File to read parameters from, or "-" to read from '.
|
'File to read parameters from, or "-" to read from '.
|
||||||
'stdin.'),
|
'stdin.'),
|
||||||
),
|
),
|
||||||
|
array(
|
||||||
|
'name' => 'as',
|
||||||
|
'param' => 'username',
|
||||||
|
'help' => pht(
|
||||||
|
'Execute the call as the given user. (If omitted, the call will '.
|
||||||
|
'be executed as an omnipotent user.)'),
|
||||||
|
),
|
||||||
));
|
));
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -39,6 +46,22 @@ final class PhabricatorConduitCallManagementWorkflow
|
|||||||
pht('Specify a file to read parameters from with "--input".'));
|
pht('Specify a file to read parameters from with "--input".'));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
$as = $args->getArg('as');
|
||||||
|
if (strlen($as)) {
|
||||||
|
$actor = id(new PhabricatorPeopleQuery())
|
||||||
|
->setViewer($viewer)
|
||||||
|
->withUsernames(array($as))
|
||||||
|
->executeOne();
|
||||||
|
if (!$actor) {
|
||||||
|
throw new PhutilArgumentUsageException(
|
||||||
|
pht(
|
||||||
|
'No such user "%s" exists.',
|
||||||
|
$as));
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
$actor = $viewer;
|
||||||
|
}
|
||||||
|
|
||||||
if ($input === '-') {
|
if ($input === '-') {
|
||||||
fprintf(STDERR, tsprintf("%s\n", pht('Reading input from stdin...')));
|
fprintf(STDERR, tsprintf("%s\n", pht('Reading input from stdin...')));
|
||||||
$input_json = file_get_contents('php://stdin');
|
$input_json = file_get_contents('php://stdin');
|
||||||
@@ -49,7 +72,7 @@ final class PhabricatorConduitCallManagementWorkflow
|
|||||||
$params = phutil_json_decode($input_json);
|
$params = phutil_json_decode($input_json);
|
||||||
|
|
||||||
$result = id(new ConduitCall($method, $params))
|
$result = id(new ConduitCall($method, $params))
|
||||||
->setUser($viewer)
|
->setUser($actor)
|
||||||
->execute();
|
->execute();
|
||||||
|
|
||||||
$output = array(
|
$output = array(
|
||||||
|
|||||||
@@ -84,8 +84,6 @@ final class PhabricatorExtraConfigSetupCheck extends PhabricatorSetupCheck {
|
|||||||
$issue->addPhabricatorConfig($key);
|
$issue->addPhabricatorConfig($key);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
$this->executeManiphestFieldChecks();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -361,69 +359,4 @@ final class PhabricatorExtraConfigSetupCheck extends PhabricatorSetupCheck {
|
|||||||
return $ancient_config;
|
return $ancient_config;
|
||||||
}
|
}
|
||||||
|
|
||||||
private function executeManiphestFieldChecks() {
|
|
||||||
$maniphest_appclass = 'PhabricatorManiphestApplication';
|
|
||||||
if (!PhabricatorApplication::isClassInstalled($maniphest_appclass)) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
$capabilities = array(
|
|
||||||
ManiphestEditAssignCapability::CAPABILITY,
|
|
||||||
ManiphestEditPoliciesCapability::CAPABILITY,
|
|
||||||
ManiphestEditPriorityCapability::CAPABILITY,
|
|
||||||
ManiphestEditProjectsCapability::CAPABILITY,
|
|
||||||
ManiphestEditStatusCapability::CAPABILITY,
|
|
||||||
);
|
|
||||||
|
|
||||||
// Check for any of these capabilities set to anything other than
|
|
||||||
// "All Users".
|
|
||||||
|
|
||||||
$any_set = false;
|
|
||||||
$app = new PhabricatorManiphestApplication();
|
|
||||||
foreach ($capabilities as $capability) {
|
|
||||||
$setting = $app->getPolicy($capability);
|
|
||||||
if ($setting != PhabricatorPolicies::POLICY_USER) {
|
|
||||||
$any_set = true;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!$any_set) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
$issue_summary = pht(
|
|
||||||
'Maniphest is currently configured with deprecated policy settings '.
|
|
||||||
'which will be removed in a future version of Phabricator.');
|
|
||||||
|
|
||||||
|
|
||||||
$message = pht(
|
|
||||||
'Some policy settings in Maniphest are now deprecated and will be '.
|
|
||||||
'removed in a future version of Phabricator. You are currently using '.
|
|
||||||
'at least one of these settings.'.
|
|
||||||
"\n\n".
|
|
||||||
'The deprecated settings are "Can Assign Tasks", '.
|
|
||||||
'"Can Edit Task Policies", "Can Prioritize Tasks", '.
|
|
||||||
'"Can Edit Task Projects", and "Can Edit Task Status". You can '.
|
|
||||||
'find these settings in Applications, or follow the link below.'.
|
|
||||||
"\n\n".
|
|
||||||
'You can find discussion of this change (including rationale and '.
|
|
||||||
'recommendations on how to configure similar features) in the upstream, '.
|
|
||||||
'at the link below.'.
|
|
||||||
"\n\n".
|
|
||||||
'To resolve this issue, set all of these policies to "All Users" after '.
|
|
||||||
'making any necessary form customization changes.');
|
|
||||||
|
|
||||||
$more_href = 'https://secure.phabricator.com/T10003';
|
|
||||||
$edit_href = '/applications/view/PhabricatorManiphestApplication/';
|
|
||||||
|
|
||||||
$issue = $this->newIssue('maniphest.T10003-per-field-policies')
|
|
||||||
->setShortName(pht('Deprecated Policies'))
|
|
||||||
->setName(pht('Deprecated Maniphest Field Policies'))
|
|
||||||
->setSummary($issue_summary)
|
|
||||||
->setMessage($message)
|
|
||||||
->addLink($more_href, pht('Learn More: Upstream Discussion'))
|
|
||||||
->addLink($edit_href, pht('Edit These Settings'));
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -13,10 +13,21 @@ final class PhabricatorManualActivitySetupCheck
|
|||||||
foreach ($activities as $activity) {
|
foreach ($activities as $activity) {
|
||||||
$type = $activity->getActivityType();
|
$type = $activity->getActivityType();
|
||||||
|
|
||||||
// For now, there is only one type of manual activity. It's not clear
|
switch ($type) {
|
||||||
// if we're really going to have too much more of this stuff so this
|
case PhabricatorConfigManualActivity::TYPE_REINDEX:
|
||||||
// is a bit under-designed for now.
|
$this->raiseSearchReindexIssue();
|
||||||
|
break;
|
||||||
|
|
||||||
|
case PhabricatorConfigManualActivity::TYPE_IDENTITIES:
|
||||||
|
$this->raiseRebuildIdentitiesIssue();
|
||||||
|
break;
|
||||||
|
|
||||||
|
default:
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private function raiseSearchReindexIssue() {
|
||||||
$activity_name = pht('Rebuild Search Index');
|
$activity_name = pht('Rebuild Search Index');
|
||||||
$activity_summary = pht(
|
$activity_summary = pht(
|
||||||
'The search index algorithm has been updated and the index needs '.
|
'The search index algorithm has been updated and the index needs '.
|
||||||
@@ -60,16 +71,76 @@ final class PhabricatorManualActivitySetupCheck
|
|||||||
$message[] = phutil_tag(
|
$message[] = phutil_tag(
|
||||||
'pre',
|
'pre',
|
||||||
array(),
|
array(),
|
||||||
(string)csprintf('phabricator/ $ ./bin/config done %R', $type));
|
'phabricator/ $ ./bin/config done reindex');
|
||||||
|
|
||||||
$activity_message = phutil_implode_html("\n\n", $message);
|
$activity_message = phutil_implode_html("\n\n", $message);
|
||||||
|
|
||||||
$this->newIssue('manual.'.$type)
|
$this->newIssue('manual.reindex')
|
||||||
|
->setName($activity_name)
|
||||||
|
->setSummary($activity_summary)
|
||||||
|
->setMessage($activity_message);
|
||||||
|
}
|
||||||
|
|
||||||
|
private function raiseRebuildIdentitiesIssue() {
|
||||||
|
$activity_name = pht('Rebuild Repository Identities');
|
||||||
|
$activity_summary = pht(
|
||||||
|
'The mapping from VCS users to Phabricator users has changed '.
|
||||||
|
'and must be rebuilt.');
|
||||||
|
|
||||||
|
$message = array();
|
||||||
|
|
||||||
|
$message[] = pht(
|
||||||
|
'The way Phabricator attributes VCS activity to Phabricator users '.
|
||||||
|
'has changed. There is a new indirection layer between the strings '.
|
||||||
|
'that appear as VCS authors and committers (such as "John Developer '.
|
||||||
|
'<johnd@bigcorp.com>") and the Phabricator user that gets associated '.
|
||||||
|
'with VCS commits. This is to support situations where users '.
|
||||||
|
'are incorrectly associated with commits by Phabricator making bad '.
|
||||||
|
'guesses about the identity of the corresponding Phabricator user. '.
|
||||||
|
'This also helps with situations where existing repositories are '.
|
||||||
|
'imported without having created accounts for all the committers to '.
|
||||||
|
'that repository. Until you rebuild these repository identities, you '.
|
||||||
|
'are likely to encounter problems with future Phabricator features '.
|
||||||
|
'which will rely on the existence of these identities.');
|
||||||
|
|
||||||
|
$message[] = pht(
|
||||||
|
'You can rebuild repository identities while Phabricator is running.');
|
||||||
|
|
||||||
|
$message[] = pht(
|
||||||
|
'To rebuild identities, run this command:');
|
||||||
|
|
||||||
|
$message[] = phutil_tag(
|
||||||
|
'pre',
|
||||||
|
array(),
|
||||||
|
(string)csprintf(
|
||||||
|
'phabricator/ $ ./bin/repository rebuild-identities --all'));
|
||||||
|
|
||||||
|
$message[] = pht(
|
||||||
|
'You can find more information about this new identity mapping '.
|
||||||
|
'here: %s',
|
||||||
|
phutil_tag(
|
||||||
|
'a',
|
||||||
|
array(
|
||||||
|
'href' => 'https://phurl.io/u/repoIdentities',
|
||||||
|
'target' => '_blank',
|
||||||
|
),
|
||||||
|
'https://phurl.io/u/repoIdentities'));
|
||||||
|
|
||||||
|
$message[] = pht(
|
||||||
|
'After rebuilding repository identities, run this command to clear '.
|
||||||
|
'this setup warning:');
|
||||||
|
|
||||||
|
$message[] = phutil_tag(
|
||||||
|
'pre',
|
||||||
|
array(),
|
||||||
|
'phabricator/ $ ./bin/config done identities');
|
||||||
|
|
||||||
|
$activity_message = phutil_implode_html("\n\n", $message);
|
||||||
|
|
||||||
|
$this->newIssue('manual.identities')
|
||||||
->setName($activity_name)
|
->setName($activity_name)
|
||||||
->setSummary($activity_summary)
|
->setSummary($activity_summary)
|
||||||
->setMessage($activity_message);
|
->setMessage($activity_message);
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
|
||||||
|
|||||||
@@ -153,30 +153,16 @@ final class PhabricatorConfigEditController
|
|||||||
$e_value);
|
$e_value);
|
||||||
}
|
}
|
||||||
|
|
||||||
$engine = new PhabricatorMarkupEngine();
|
|
||||||
$engine->setViewer($viewer);
|
|
||||||
$engine->addObject($option, 'description');
|
|
||||||
$engine->process();
|
|
||||||
$description = phutil_tag(
|
|
||||||
'div',
|
|
||||||
array(
|
|
||||||
'class' => 'phabricator-remarkup',
|
|
||||||
),
|
|
||||||
$engine->getOutput($option, 'description'));
|
|
||||||
|
|
||||||
$form
|
$form
|
||||||
->setUser($viewer)
|
->setUser($viewer)
|
||||||
->addHiddenInput('issue', $request->getStr('issue'));
|
->addHiddenInput('issue', $request->getStr('issue'));
|
||||||
|
|
||||||
$description = $option->getDescription();
|
$description = $option->newDescriptionRemarkupView($viewer);
|
||||||
if (strlen($description)) {
|
if ($description) {
|
||||||
$description_view = new PHUIRemarkupView($viewer, $description);
|
$form->appendChild(
|
||||||
|
|
||||||
$form
|
|
||||||
->appendChild(
|
|
||||||
id(new AphrontFormMarkupControl())
|
id(new AphrontFormMarkupControl())
|
||||||
->setLabel(pht('Description'))
|
->setLabel(pht('Description'))
|
||||||
->setValue($description_view));
|
->setValue($description));
|
||||||
}
|
}
|
||||||
|
|
||||||
if ($group) {
|
if ($group) {
|
||||||
|
|||||||
@@ -60,17 +60,10 @@ final class PhabricatorConfigGroupController
|
|||||||
$db_values = mpull($db_values, null, 'getConfigKey');
|
$db_values = mpull($db_values, null, 'getConfigKey');
|
||||||
}
|
}
|
||||||
|
|
||||||
$engine = id(new PhabricatorMarkupEngine())
|
|
||||||
->setViewer($this->getRequest()->getUser());
|
|
||||||
foreach ($options as $option) {
|
|
||||||
$engine->addObject($option, 'summary');
|
|
||||||
}
|
|
||||||
$engine->process();
|
|
||||||
|
|
||||||
$list = new PHUIObjectItemListView();
|
$list = new PHUIObjectItemListView();
|
||||||
$list->setBig(true);
|
$list->setBig(true);
|
||||||
foreach ($options as $option) {
|
foreach ($options as $option) {
|
||||||
$summary = $engine->getOutput($option, 'summary');
|
$summary = $option->getSummary();
|
||||||
|
|
||||||
$item = id(new PHUIObjectItemView())
|
$item = id(new PHUIObjectItemView())
|
||||||
->setHeader($option->getKey())
|
->setHeader($option->getKey())
|
||||||
|
|||||||
@@ -33,18 +33,16 @@ final class PhabricatorConfigIssueListController
|
|||||||
PhabricatorSetupCheck::GROUP_OTHER,
|
PhabricatorSetupCheck::GROUP_OTHER,
|
||||||
'fa-question-circle');
|
'fa-question-circle');
|
||||||
|
|
||||||
$no_issues = null;
|
$title = pht('Setup Issues');
|
||||||
if (empty($issues)) {
|
$header = $this->buildHeaderView($title);
|
||||||
$no_issues = id(new PHUIInfoView())
|
|
||||||
|
if (!$issues) {
|
||||||
|
$issue_list = id(new PHUIInfoView())
|
||||||
->setTitle(pht('No Issues'))
|
->setTitle(pht('No Issues'))
|
||||||
->appendChild(
|
->appendChild(
|
||||||
pht('Your install has no current setup issues to resolve.'))
|
pht('Your install has no current setup issues to resolve.'))
|
||||||
->setSeverity(PHUIInfoView::SEVERITY_NOTICE);
|
->setSeverity(PHUIInfoView::SEVERITY_NOTICE);
|
||||||
}
|
} else {
|
||||||
|
|
||||||
$title = pht('Setup Issues');
|
|
||||||
$header = $this->buildHeaderView($title);
|
|
||||||
|
|
||||||
$issue_list = array(
|
$issue_list = array(
|
||||||
$important,
|
$important,
|
||||||
$php,
|
$php,
|
||||||
@@ -53,6 +51,7 @@ final class PhabricatorConfigIssueListController
|
|||||||
);
|
);
|
||||||
|
|
||||||
$issue_list = $this->buildConfigBoxView(pht('Issues'), $issue_list);
|
$issue_list = $this->buildConfigBoxView(pht('Issues'), $issue_list);
|
||||||
|
}
|
||||||
|
|
||||||
$crumbs = $this->buildApplicationCrumbs()
|
$crumbs = $this->buildApplicationCrumbs()
|
||||||
->addTextCrumb($title)
|
->addTextCrumb($title)
|
||||||
@@ -62,10 +61,7 @@ final class PhabricatorConfigIssueListController
|
|||||||
->setHeader($header)
|
->setHeader($header)
|
||||||
->setNavigation($nav)
|
->setNavigation($nav)
|
||||||
->setFixed(true)
|
->setFixed(true)
|
||||||
->setMainColumn(array(
|
->setMainColumn($issue_list);
|
||||||
$no_issues,
|
|
||||||
$issue_list,
|
|
||||||
));
|
|
||||||
|
|
||||||
return $this->newPage()
|
return $this->newPage()
|
||||||
->setTitle($title)
|
->setTitle($title)
|
||||||
|
|||||||
@@ -1,8 +1,7 @@
|
|||||||
<?php
|
<?php
|
||||||
|
|
||||||
final class PhabricatorConfigOption
|
final class PhabricatorConfigOption
|
||||||
extends Phobject
|
extends Phobject {
|
||||||
implements PhabricatorMarkupInterface {
|
|
||||||
|
|
||||||
private $key;
|
private $key;
|
||||||
private $default;
|
private $default;
|
||||||
@@ -204,43 +203,19 @@ final class PhabricatorConfigOption
|
|||||||
return $this;
|
return $this;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* -( PhabricatorMarkupInterface )----------------------------------------- */
|
public function newDescriptionRemarkupView(PhabricatorUser $viewer) {
|
||||||
|
$description = $this->getDescription();
|
||||||
public function getMarkupFieldKey($field) {
|
if (!strlen($description)) {
|
||||||
return $this->getKey().':'.$field;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
public function newMarkupEngine($field) {
|
// TODO: Some day, we should probably implement this as a real rule.
|
||||||
return PhabricatorMarkupEngine::newMarkupEngine(array());
|
$description = preg_replace(
|
||||||
}
|
|
||||||
|
|
||||||
public function getMarkupText($field) {
|
|
||||||
switch ($field) {
|
|
||||||
case 'description':
|
|
||||||
$text = $this->getDescription();
|
|
||||||
break;
|
|
||||||
case 'summary':
|
|
||||||
$text = $this->getSummary();
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
// TODO: We should probably implement this as a real Markup rule, but
|
|
||||||
// markup rules are a bit of a mess right now and it doesn't hurt us to
|
|
||||||
// fake this.
|
|
||||||
$text = preg_replace(
|
|
||||||
'/{{([^}]+)}}/',
|
'/{{([^}]+)}}/',
|
||||||
'[[/config/edit/\\1/ | \\1]]',
|
'[[/config/edit/\\1/ | \\1]]',
|
||||||
$text);
|
$description);
|
||||||
|
|
||||||
return $text;
|
return new PHUIRemarkupView($viewer, $description);
|
||||||
}
|
|
||||||
|
|
||||||
public function didMarkupText($field, $output, PhutilMarkupEngine $engine) {
|
|
||||||
return $output;
|
|
||||||
}
|
|
||||||
|
|
||||||
public function shouldUseMarkupCache($field) {
|
|
||||||
return false;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -34,9 +34,14 @@ final class PhabricatorPHDConfigOptions
|
|||||||
->setSummary(pht('Maximum taskmaster daemon pool size.'))
|
->setSummary(pht('Maximum taskmaster daemon pool size.'))
|
||||||
->setDescription(
|
->setDescription(
|
||||||
pht(
|
pht(
|
||||||
'Maximum number of taskmaster daemons to run at once. Raising '.
|
"Maximum number of taskmaster daemons to run at once. Raising ".
|
||||||
'this can increase the maximum throughput of the task queue. The '.
|
"this can increase the maximum throughput of the task queue. The ".
|
||||||
'pool will automatically scale down when unutilized.')),
|
"pool will automatically scale down when unutilized.".
|
||||||
|
"\n\n".
|
||||||
|
"If you are running a cluster, this limit applies separately ".
|
||||||
|
"to each instance of `phd`. For example, if this limit is set ".
|
||||||
|
"to `4` and you have three hosts running daemons, the effective ".
|
||||||
|
"global limit will be 12.")),
|
||||||
$this->newOption('phd.verbose', 'bool', false)
|
$this->newOption('phd.verbose', 'bool', false)
|
||||||
->setLocked(true)
|
->setLocked(true)
|
||||||
->setBoolOptions(
|
->setBoolOptions(
|
||||||
|
|||||||
@@ -7,6 +7,8 @@ final class PhabricatorConfigManualActivity
|
|||||||
protected $parameters = array();
|
protected $parameters = array();
|
||||||
|
|
||||||
const TYPE_REINDEX = 'reindex';
|
const TYPE_REINDEX = 'reindex';
|
||||||
|
const TYPE_IDENTITIES = 'identities';
|
||||||
|
|
||||||
|
|
||||||
protected function getConfiguration() {
|
protected function getConfiguration() {
|
||||||
return array(
|
return array(
|
||||||
|
|||||||
@@ -146,49 +146,6 @@ final class ConpherenceEditor extends PhabricatorApplicationTransactionEditor {
|
|||||||
return $xactions;
|
return $xactions;
|
||||||
}
|
}
|
||||||
|
|
||||||
protected function requireCapabilities(
|
|
||||||
PhabricatorLiskDAO $object,
|
|
||||||
PhabricatorApplicationTransaction $xaction) {
|
|
||||||
|
|
||||||
parent::requireCapabilities($object, $xaction);
|
|
||||||
|
|
||||||
switch ($xaction->getTransactionType()) {
|
|
||||||
case ConpherenceThreadParticipantsTransaction::TRANSACTIONTYPE:
|
|
||||||
$old_map = array_fuse($xaction->getOldValue());
|
|
||||||
$new_map = array_fuse($xaction->getNewValue());
|
|
||||||
|
|
||||||
$add = array_keys(array_diff_key($new_map, $old_map));
|
|
||||||
$rem = array_keys(array_diff_key($old_map, $new_map));
|
|
||||||
|
|
||||||
$actor_phid = $this->getActingAsPHID();
|
|
||||||
|
|
||||||
$is_join = (($add === array($actor_phid)) && !$rem);
|
|
||||||
$is_leave = (($rem === array($actor_phid)) && !$add);
|
|
||||||
|
|
||||||
if ($is_join) {
|
|
||||||
// Anyone can join a thread they can see.
|
|
||||||
} else if ($is_leave) {
|
|
||||||
// Anyone can leave a thread.
|
|
||||||
} else {
|
|
||||||
// You need CAN_EDIT to add or remove participants. For additional
|
|
||||||
// discussion, see D17696 and T4411.
|
|
||||||
PhabricatorPolicyFilter::requireCapability(
|
|
||||||
$this->requireActor(),
|
|
||||||
$object,
|
|
||||||
PhabricatorPolicyCapability::CAN_EDIT);
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
|
|
||||||
case ConpherenceThreadTitleTransaction::TRANSACTIONTYPE:
|
|
||||||
case ConpherenceThreadTopicTransaction::TRANSACTIONTYPE:
|
|
||||||
PhabricatorPolicyFilter::requireCapability(
|
|
||||||
$this->requireActor(),
|
|
||||||
$object,
|
|
||||||
PhabricatorPolicyCapability::CAN_EDIT);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
protected function shouldSendMail(
|
protected function shouldSendMail(
|
||||||
PhabricatorLiskDAO $object,
|
PhabricatorLiskDAO $object,
|
||||||
array $xactions) {
|
array $xactions) {
|
||||||
|
|||||||
@@ -114,4 +114,34 @@ final class ConpherenceThreadParticipantsTransaction
|
|||||||
return $errors;
|
return $errors;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function getRequiredCapabilities(
|
||||||
|
$object,
|
||||||
|
PhabricatorApplicationTransaction $xaction) {
|
||||||
|
|
||||||
|
$old_map = array_fuse($xaction->getOldValue());
|
||||||
|
$new_map = array_fuse($xaction->getNewValue());
|
||||||
|
|
||||||
|
$add = array_keys(array_diff_key($new_map, $old_map));
|
||||||
|
$rem = array_keys(array_diff_key($old_map, $new_map));
|
||||||
|
|
||||||
|
$actor_phid = $this->getActingAsPHID();
|
||||||
|
|
||||||
|
$is_join = (($add === array($actor_phid)) && !$rem);
|
||||||
|
$is_leave = (($rem === array($actor_phid)) && !$add);
|
||||||
|
|
||||||
|
if ($is_join) {
|
||||||
|
// Anyone can join a thread they can see.
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
if ($is_leave) {
|
||||||
|
// Anyone can leave a thread.
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
// You need CAN_EDIT to add or remove participants. For additional
|
||||||
|
// discussion, see D17696 and T4411.
|
||||||
|
return PhabricatorPolicyCapability::CAN_EDIT;
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,6 +1,7 @@
|
|||||||
<?php
|
<?php
|
||||||
|
|
||||||
final class PhabricatorDifferentialApplication extends PhabricatorApplication {
|
final class PhabricatorDifferentialApplication
|
||||||
|
extends PhabricatorApplication {
|
||||||
|
|
||||||
public function getBaseURI() {
|
public function getBaseURI() {
|
||||||
return '/differential/';
|
return '/differential/';
|
||||||
@@ -48,8 +49,7 @@ final class PhabricatorDifferentialApplication extends PhabricatorApplication {
|
|||||||
'/(?P<filter>new)/' => 'DifferentialRevisionViewController',
|
'/(?P<filter>new)/' => 'DifferentialRevisionViewController',
|
||||||
),
|
),
|
||||||
'/differential/' => array(
|
'/differential/' => array(
|
||||||
'(?:query/(?P<queryKey>[^/]+)/)?'
|
$this->getQueryRoutePattern() => 'DifferentialRevisionListController',
|
||||||
=> 'DifferentialRevisionListController',
|
|
||||||
'diff/' => array(
|
'diff/' => array(
|
||||||
'(?P<id>[1-9]\d*)/' => array(
|
'(?P<id>[1-9]\d*)/' => array(
|
||||||
'' => 'DifferentialDiffViewController',
|
'' => 'DifferentialDiffViewController',
|
||||||
|
|||||||
@@ -276,6 +276,7 @@ final class DifferentialChangesetViewController extends DifferentialController {
|
|||||||
->setDiff($diff)
|
->setDiff($diff)
|
||||||
->setTitle(pht('Standalone View'))
|
->setTitle(pht('Standalone View'))
|
||||||
->setBackground(PHUIObjectBoxView::BLUE_PROPERTY)
|
->setBackground(PHUIObjectBoxView::BLUE_PROPERTY)
|
||||||
|
->setIsStandalone(true)
|
||||||
->setParser($parser);
|
->setParser($parser);
|
||||||
|
|
||||||
if ($revision_id) {
|
if ($revision_id) {
|
||||||
|
|||||||
@@ -77,19 +77,17 @@ final class DifferentialInlineCommentEditController
|
|||||||
}
|
}
|
||||||
|
|
||||||
protected function loadCommentForEdit($id) {
|
protected function loadCommentForEdit($id) {
|
||||||
$request = $this->getRequest();
|
$viewer = $this->getViewer();
|
||||||
$user = $request->getUser();
|
|
||||||
|
|
||||||
$inline = $this->loadComment($id);
|
$inline = $this->loadComment($id);
|
||||||
if (!$this->canEditInlineComment($user, $inline)) {
|
if (!$this->canEditInlineComment($viewer, $inline)) {
|
||||||
throw new Exception(pht('That comment is not editable!'));
|
throw new Exception(pht('That comment is not editable!'));
|
||||||
}
|
}
|
||||||
return $inline;
|
return $inline;
|
||||||
}
|
}
|
||||||
|
|
||||||
protected function loadCommentForDone($id) {
|
protected function loadCommentForDone($id) {
|
||||||
$request = $this->getRequest();
|
$viewer = $this->getViewer();
|
||||||
$viewer = $request->getUser();
|
|
||||||
|
|
||||||
$inline = $this->loadComment($id);
|
$inline = $this->loadComment($id);
|
||||||
if (!$inline) {
|
if (!$inline) {
|
||||||
@@ -120,19 +118,32 @@ final class DifferentialInlineCommentEditController
|
|||||||
throw new Exception(pht('Unable to load revision.'));
|
throw new Exception(pht('Unable to load revision.'));
|
||||||
}
|
}
|
||||||
|
|
||||||
if ($revision->getAuthorPHID() !== $viewer->getPHID()) {
|
$viewer_phid = $viewer->getPHID();
|
||||||
throw new Exception(pht('You are not the revision owner.'));
|
$is_owner = ($viewer_phid == $revision->getAuthorPHID());
|
||||||
|
$is_author = ($viewer_phid == $inline->getAuthorPHID());
|
||||||
|
$is_draft = ($inline->isDraft());
|
||||||
|
|
||||||
|
if ($is_owner) {
|
||||||
|
// You own the revision, so you can mark the comment as "Done".
|
||||||
|
} else if ($is_author && $is_draft) {
|
||||||
|
// You made this comment and it's still a draft, so you can mark
|
||||||
|
// it as "Done".
|
||||||
|
} else {
|
||||||
|
throw new Exception(
|
||||||
|
pht(
|
||||||
|
'You are not the revision owner, and this is not a draft comment '.
|
||||||
|
'you authored.'));
|
||||||
}
|
}
|
||||||
|
|
||||||
return $inline;
|
return $inline;
|
||||||
}
|
}
|
||||||
|
|
||||||
private function canEditInlineComment(
|
private function canEditInlineComment(
|
||||||
PhabricatorUser $user,
|
PhabricatorUser $viewer,
|
||||||
DifferentialInlineComment $inline) {
|
DifferentialInlineComment $inline) {
|
||||||
|
|
||||||
// Only the author may edit a comment.
|
// Only the author may edit a comment.
|
||||||
if ($inline->getAuthorPHID() != $user->getPHID()) {
|
if ($inline->getAuthorPHID() != $viewer->getPHID()) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -463,7 +463,7 @@ final class DifferentialRevisionViewController
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
$tab_group = id(new PHUITabGroupView());
|
$tab_group = new PHUITabGroupView();
|
||||||
|
|
||||||
if ($toc_view) {
|
if ($toc_view) {
|
||||||
$tab_group->addTab(
|
$tab_group->addTab(
|
||||||
@@ -473,13 +473,26 @@ final class DifferentialRevisionViewController
|
|||||||
->appendChild($toc_view));
|
->appendChild($toc_view));
|
||||||
}
|
}
|
||||||
|
|
||||||
$tab_group
|
$tab_group->addTab(
|
||||||
->addTab(
|
|
||||||
id(new PHUITabView())
|
id(new PHUITabView())
|
||||||
->setName(pht('History'))
|
->setName(pht('History'))
|
||||||
->setKey('history')
|
->setKey('history')
|
||||||
->appendChild($history))
|
->appendChild($history));
|
||||||
->addTab(
|
|
||||||
|
$filetree_on = $viewer->compareUserSetting(
|
||||||
|
PhabricatorShowFiletreeSetting::SETTINGKEY,
|
||||||
|
PhabricatorShowFiletreeSetting::VALUE_ENABLE_FILETREE);
|
||||||
|
|
||||||
|
$collapsed_key = PhabricatorFiletreeVisibleSetting::SETTINGKEY;
|
||||||
|
$filetree_collapsed = (bool)$viewer->getUserSetting($collapsed_key);
|
||||||
|
|
||||||
|
// See PHI811. If the viewer has the file tree on, the files tab with the
|
||||||
|
// table of contents is redundant, so default to the "History" tab instead.
|
||||||
|
if ($filetree_on && !$filetree_collapsed) {
|
||||||
|
$tab_group->selectTab('history');
|
||||||
|
}
|
||||||
|
|
||||||
|
$tab_group->addTab(
|
||||||
id(new PHUITabView())
|
id(new PHUITabView())
|
||||||
->setName(pht('Commits'))
|
->setName(pht('Commits'))
|
||||||
->setKey('commits')
|
->setKey('commits')
|
||||||
@@ -601,22 +614,15 @@ final class DifferentialRevisionViewController
|
|||||||
$crumbs->addTextCrumb($monogram);
|
$crumbs->addTextCrumb($monogram);
|
||||||
$crumbs->setBorder(true);
|
$crumbs->setBorder(true);
|
||||||
|
|
||||||
$filetree_on = $viewer->compareUserSetting(
|
|
||||||
PhabricatorShowFiletreeSetting::SETTINGKEY,
|
|
||||||
PhabricatorShowFiletreeSetting::VALUE_ENABLE_FILETREE);
|
|
||||||
|
|
||||||
$nav = null;
|
$nav = null;
|
||||||
if ($filetree_on && !$this->isVeryLargeDiff()) {
|
if ($filetree_on && !$this->isVeryLargeDiff()) {
|
||||||
$collapsed_key = PhabricatorFiletreeVisibleSetting::SETTINGKEY;
|
|
||||||
$collapsed_value = $viewer->getUserSetting($collapsed_key);
|
|
||||||
|
|
||||||
$width_key = PhabricatorFiletreeWidthSetting::SETTINGKEY;
|
$width_key = PhabricatorFiletreeWidthSetting::SETTINGKEY;
|
||||||
$width_value = $viewer->getUserSetting($width_key);
|
$width_value = $viewer->getUserSetting($width_key);
|
||||||
|
|
||||||
$nav = id(new DifferentialChangesetFileTreeSideNavBuilder())
|
$nav = id(new DifferentialChangesetFileTreeSideNavBuilder())
|
||||||
->setTitle($monogram)
|
->setTitle($monogram)
|
||||||
->setBaseURI(new PhutilURI($revision->getURI()))
|
->setBaseURI(new PhutilURI($revision->getURI()))
|
||||||
->setCollapsed((bool)$collapsed_value)
|
->setCollapsed($filetree_collapsed)
|
||||||
->setWidth((int)$width_value)
|
->setWidth((int)$width_value)
|
||||||
->build($changesets);
|
->build($changesets);
|
||||||
}
|
}
|
||||||
@@ -1309,7 +1315,7 @@ final class DifferentialRevisionViewController
|
|||||||
}
|
}
|
||||||
|
|
||||||
return id(new HarbormasterUnitSummaryView())
|
return id(new HarbormasterUnitSummaryView())
|
||||||
->setUser($viewer)
|
->setViewer($viewer)
|
||||||
->setExcuse($excuse)
|
->setExcuse($excuse)
|
||||||
->setBuildable($diff->getBuildable())
|
->setBuildable($diff->getBuildable())
|
||||||
->setUnitMessages($diff->getUnitMessages())
|
->setUnitMessages($diff->getUnitMessages())
|
||||||
|
|||||||
@@ -248,19 +248,34 @@ final class DifferentialTransactionEditor
|
|||||||
$this->didExpandInlineState = true;
|
$this->didExpandInlineState = true;
|
||||||
|
|
||||||
$actor_phid = $this->getActingAsPHID();
|
$actor_phid = $this->getActingAsPHID();
|
||||||
$actor_is_author = ($object->getAuthorPHID() == $actor_phid);
|
$author_phid = $object->getAuthorPHID();
|
||||||
if (!$actor_is_author) {
|
$actor_is_author = ($actor_phid == $author_phid);
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
$state_map = PhabricatorTransactions::getInlineStateMap();
|
$state_map = PhabricatorTransactions::getInlineStateMap();
|
||||||
|
|
||||||
$inlines = id(new DifferentialDiffInlineCommentQuery())
|
$query = id(new DifferentialDiffInlineCommentQuery())
|
||||||
->setViewer($this->getActor())
|
->setViewer($this->getActor())
|
||||||
->withRevisionPHIDs(array($object->getPHID()))
|
->withRevisionPHIDs(array($object->getPHID()))
|
||||||
->withFixedStates(array_keys($state_map))
|
->withFixedStates(array_keys($state_map));
|
||||||
|
|
||||||
|
$inlines = array();
|
||||||
|
|
||||||
|
// We're going to undraft any "done" marks on your own inlines.
|
||||||
|
$inlines[] = id(clone $query)
|
||||||
|
->withAuthorPHIDs(array($actor_phid))
|
||||||
|
->withHasTransaction(false)
|
||||||
->execute();
|
->execute();
|
||||||
|
|
||||||
|
// If you're the author, we also undraft any "done" marks on other
|
||||||
|
// inlines.
|
||||||
|
if ($actor_is_author) {
|
||||||
|
$inlines[] = id(clone $query)
|
||||||
|
->withHasTransaction(true)
|
||||||
|
->execute();
|
||||||
|
}
|
||||||
|
|
||||||
|
$inlines = array_mergev($inlines);
|
||||||
|
|
||||||
if (!$inlines) {
|
if (!$inlines) {
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@@ -621,8 +636,8 @@ final class DifferentialTransactionEditor
|
|||||||
|
|
||||||
$viewer = $this->requireActor();
|
$viewer = $this->requireActor();
|
||||||
|
|
||||||
$body = new PhabricatorMetaMTAMailBody();
|
$body = id(new PhabricatorMetaMTAMailBody())
|
||||||
$body->setViewer($this->requireActor());
|
->setViewer($viewer);
|
||||||
|
|
||||||
$revision_uri = $object->getURI();
|
$revision_uri = $object->getURI();
|
||||||
$revision_uri = PhabricatorEnv::getProductionURI($revision_uri);
|
$revision_uri = PhabricatorEnv::getProductionURI($revision_uri);
|
||||||
@@ -671,7 +686,7 @@ final class DifferentialTransactionEditor
|
|||||||
|
|
||||||
$this->addCustomFieldsToMailBody($body, $object, $xactions);
|
$this->addCustomFieldsToMailBody($body, $object, $xactions);
|
||||||
|
|
||||||
if (!$this->getIsNewObject()) {
|
if (!$this->isFirstBroadcast()) {
|
||||||
$body->addLinkSection(pht('CHANGES SINCE LAST ACTION'), $new_uri);
|
$body->addLinkSection(pht('CHANGES SINCE LAST ACTION'), $new_uri);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -892,6 +907,17 @@ final class DifferentialTransactionEditor
|
|||||||
array $inlines,
|
array $inlines,
|
||||||
PhabricatorMetaMTAMailBody $body) {
|
PhabricatorMetaMTAMailBody $body) {
|
||||||
|
|
||||||
|
$limit = 100;
|
||||||
|
$limit_note = null;
|
||||||
|
if (count($inlines) > $limit) {
|
||||||
|
$limit_note = pht(
|
||||||
|
'(Showing first %s of %s inline comments.)',
|
||||||
|
new PhutilNumber($limit),
|
||||||
|
phutil_count($inlines));
|
||||||
|
|
||||||
|
$inlines = array_slice($inlines, 0, $limit, true);
|
||||||
|
}
|
||||||
|
|
||||||
$section = id(new DifferentialInlineCommentMailView())
|
$section = id(new DifferentialInlineCommentMailView())
|
||||||
->setViewer($this->getActor())
|
->setViewer($this->getActor())
|
||||||
->setInlines($inlines)
|
->setInlines($inlines)
|
||||||
@@ -900,6 +926,9 @@ final class DifferentialTransactionEditor
|
|||||||
$header = pht('INLINE COMMENTS');
|
$header = pht('INLINE COMMENTS');
|
||||||
|
|
||||||
$section_text = "\n".$section->getPlaintext();
|
$section_text = "\n".$section->getPlaintext();
|
||||||
|
if ($limit_note) {
|
||||||
|
$section_text = $limit_note."\n".$section_text;
|
||||||
|
}
|
||||||
|
|
||||||
$style = array(
|
$style = array(
|
||||||
'margin: 6px 0 12px 0;',
|
'margin: 6px 0 12px 0;',
|
||||||
@@ -912,6 +941,16 @@ final class DifferentialTransactionEditor
|
|||||||
),
|
),
|
||||||
$section->getHTML());
|
$section->getHTML());
|
||||||
|
|
||||||
|
if ($limit_note) {
|
||||||
|
$section_html = array(
|
||||||
|
phutil_tag(
|
||||||
|
'em',
|
||||||
|
array(),
|
||||||
|
$limit_note),
|
||||||
|
$section_html,
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
$body->addPlaintextSection($header, $section_text, false);
|
$body->addPlaintextSection($header, $section_text, false);
|
||||||
$body->addHTMLSection($header, $section_html);
|
$body->addHTMLSection($header, $section_html);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -88,6 +88,20 @@ final class DifferentialChangesetEngine extends Phobject {
|
|||||||
|
|
||||||
|
|
||||||
private function detectCopiedCode(array $changesets) {
|
private function detectCopiedCode(array $changesets) {
|
||||||
|
// See PHI944. If the total number of changed lines is excessively large,
|
||||||
|
// don't bother with copied code detection. This can take a lot of time and
|
||||||
|
// memory and it's not generally of any use for very large changes.
|
||||||
|
$max_size = 65535;
|
||||||
|
|
||||||
|
$total_size = 0;
|
||||||
|
foreach ($changesets as $changeset) {
|
||||||
|
$total_size += ($changeset->getAddLines() + $changeset->getDelLines());
|
||||||
|
}
|
||||||
|
|
||||||
|
if ($total_size > $max_size) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
$min_width = 30;
|
$min_width = 30;
|
||||||
$min_lines = 3;
|
$min_lines = 3;
|
||||||
|
|
||||||
|
|||||||
@@ -54,4 +54,28 @@ final class DifferentialBuildableEngine
|
|||||||
$this->applyTransactions(array($xaction));
|
$this->applyTransactions(array($xaction));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function getAuthorIdentity() {
|
||||||
|
$object = $this->getObject();
|
||||||
|
|
||||||
|
if ($object instanceof DifferentialRevision) {
|
||||||
|
$object = $object->loadActiveDiff();
|
||||||
|
}
|
||||||
|
|
||||||
|
$authorship = $object->getDiffAuthorshipDict();
|
||||||
|
if (!isset($authorship['authorName'])) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
$name = $authorship['authorName'];
|
||||||
|
$address = idx($authorship, 'authorEmail');
|
||||||
|
|
||||||
|
$full = id(new PhutilEmailAddress())
|
||||||
|
->setDisplayName($name)
|
||||||
|
->setAddress($address);
|
||||||
|
|
||||||
|
return id(new PhabricatorRepositoryIdentity())
|
||||||
|
->setIdentityName((string)$full)
|
||||||
|
->makeEphemeral();
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -10,10 +10,7 @@ final class DifferentialRevisionSummaryHeraldField
|
|||||||
}
|
}
|
||||||
|
|
||||||
public function getHeraldFieldValue($object) {
|
public function getHeraldFieldValue($object) {
|
||||||
// NOTE: For historical reasons, this field includes the test plan. We
|
return $object->getSummary();
|
||||||
// could maybe try to fix this some day, but it probably aligns reasonably
|
|
||||||
// well with user expectation without harming anything.
|
|
||||||
return $object->getSummary()."\n\n".$object->getTestPlan();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
protected function getHeraldFieldStandardType() {
|
protected function getHeraldFieldStandardType() {
|
||||||
|
|||||||
@@ -0,0 +1,20 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
final class DifferentialRevisionTestPlanHeraldField
|
||||||
|
extends DifferentialRevisionHeraldField {
|
||||||
|
|
||||||
|
const FIELDCONST = 'differential.revision.test-plan';
|
||||||
|
|
||||||
|
public function getHeraldFieldName() {
|
||||||
|
return pht('Revision test plan');
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getHeraldFieldValue($object) {
|
||||||
|
return $object->getTestPlan();
|
||||||
|
}
|
||||||
|
|
||||||
|
protected function getHeraldFieldStandardType() {
|
||||||
|
return self::STANDARD_TEXT;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@@ -345,7 +345,13 @@ final class DifferentialInlineCommentMailView
|
|||||||
$offset_mode = 'old';
|
$offset_mode = 'old';
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// See PHI894. Use the parse cache since we can end up with a large
|
||||||
|
// rendering cost otherwise when users or bots leave hundreds of inline
|
||||||
|
// comments on diffs with long recipient lists.
|
||||||
|
$cache_key = $changeset->getID();
|
||||||
|
|
||||||
$parser = id(new DifferentialChangesetParser())
|
$parser = id(new DifferentialChangesetParser())
|
||||||
|
->setRenderCacheKey($cache_key)
|
||||||
->setUser($viewer)
|
->setUser($viewer)
|
||||||
->setChangeset($changeset)
|
->setChangeset($changeset)
|
||||||
->setOffsetMode($offset_mode)
|
->setOffsetMode($offset_mode)
|
||||||
@@ -440,7 +446,18 @@ final class DifferentialInlineCommentMailView
|
|||||||
'style' => implode(' ', $link_style),
|
'style' => implode(' ', $link_style),
|
||||||
'href' => $link_href,
|
'href' => $link_href,
|
||||||
),
|
),
|
||||||
pht('View Inline'));
|
array(
|
||||||
|
pht('View Inline'),
|
||||||
|
|
||||||
|
// See PHI920. Add a space after the link so we render this into
|
||||||
|
// the document:
|
||||||
|
//
|
||||||
|
// View Inline filename.txt
|
||||||
|
//
|
||||||
|
// Otherwise, we render "Inlinefilename.txt" and double-clicking
|
||||||
|
// the file name selects the word "Inline" as well.
|
||||||
|
' ',
|
||||||
|
));
|
||||||
} else {
|
} else {
|
||||||
$link = null;
|
$link = null;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -25,6 +25,8 @@ final class DifferentialRevisionQuery
|
|||||||
private $updatedEpochMax;
|
private $updatedEpochMax;
|
||||||
private $statuses;
|
private $statuses;
|
||||||
private $isOpen;
|
private $isOpen;
|
||||||
|
private $createdEpochMin;
|
||||||
|
private $createdEpochMax;
|
||||||
|
|
||||||
const ORDER_MODIFIED = 'order-modified';
|
const ORDER_MODIFIED = 'order-modified';
|
||||||
const ORDER_CREATED = 'order-created';
|
const ORDER_CREATED = 'order-created';
|
||||||
@@ -206,6 +208,12 @@ final class DifferentialRevisionQuery
|
|||||||
return $this;
|
return $this;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function withCreatedEpochBetween($min, $max) {
|
||||||
|
$this->createdEpochMin = $min;
|
||||||
|
$this->createdEpochMax = $max;
|
||||||
|
return $this;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Set whether or not the query should load the active diff for each
|
* Set whether or not the query should load the active diff for each
|
||||||
@@ -687,6 +695,20 @@ final class DifferentialRevisionQuery
|
|||||||
$this->updatedEpochMax);
|
$this->updatedEpochMax);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if ($this->createdEpochMin !== null) {
|
||||||
|
$where[] = qsprintf(
|
||||||
|
$conn_r,
|
||||||
|
'r.dateCreated >= %d',
|
||||||
|
$this->createdEpochMin);
|
||||||
|
}
|
||||||
|
|
||||||
|
if ($this->createdEpochMax !== null) {
|
||||||
|
$where[] = qsprintf(
|
||||||
|
$conn_r,
|
||||||
|
'r.dateCreated <= %d',
|
||||||
|
$this->createdEpochMax);
|
||||||
|
}
|
||||||
|
|
||||||
if ($this->statuses !== null) {
|
if ($this->statuses !== null) {
|
||||||
$where[] = qsprintf(
|
$where[] = qsprintf(
|
||||||
$conn_r,
|
$conn_r,
|
||||||
|
|||||||
@@ -45,6 +45,12 @@ final class DifferentialRevisionSearchEngine
|
|||||||
$query->withStatuses($map['statuses']);
|
$query->withStatuses($map['statuses']);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if ($map['createdStart'] || $map['createdEnd']) {
|
||||||
|
$query->withCreatedEpochBetween(
|
||||||
|
$map['createdStart'],
|
||||||
|
$map['createdEnd']);
|
||||||
|
}
|
||||||
|
|
||||||
return $query;
|
return $query;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -84,6 +90,16 @@ final class DifferentialRevisionSearchEngine
|
|||||||
->setDatasource(new DifferentialRevisionStatusFunctionDatasource())
|
->setDatasource(new DifferentialRevisionStatusFunctionDatasource())
|
||||||
->setDescription(
|
->setDescription(
|
||||||
pht('Find revisions with particular statuses.')),
|
pht('Find revisions with particular statuses.')),
|
||||||
|
id(new PhabricatorSearchDateField())
|
||||||
|
->setLabel(pht('Created After'))
|
||||||
|
->setKey('createdStart')
|
||||||
|
->setDescription(
|
||||||
|
pht('Find revisions created at or after a particular time.')),
|
||||||
|
id(new PhabricatorSearchDateField())
|
||||||
|
->setLabel(pht('Created Before'))
|
||||||
|
->setKey('createdEnd')
|
||||||
|
->setDescription(
|
||||||
|
pht('Find revisions created at or before a particular time.')),
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -277,4 +293,77 @@ final class DifferentialRevisionSearchEngine
|
|||||||
return $result;
|
return $result;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
protected function newExportFields() {
|
||||||
|
$fields = array(
|
||||||
|
id(new PhabricatorStringExportField())
|
||||||
|
->setKey('monogram')
|
||||||
|
->setLabel(pht('Monogram')),
|
||||||
|
id(new PhabricatorPHIDExportField())
|
||||||
|
->setKey('authorPHID')
|
||||||
|
->setLabel(pht('Author PHID')),
|
||||||
|
id(new PhabricatorStringExportField())
|
||||||
|
->setKey('author')
|
||||||
|
->setLabel(pht('Author')),
|
||||||
|
id(new PhabricatorStringExportField())
|
||||||
|
->setKey('status')
|
||||||
|
->setLabel(pht('Status')),
|
||||||
|
id(new PhabricatorStringExportField())
|
||||||
|
->setKey('statusName')
|
||||||
|
->setLabel(pht('Status Name')),
|
||||||
|
id(new PhabricatorURIExportField())
|
||||||
|
->setKey('uri')
|
||||||
|
->setLabel(pht('URI')),
|
||||||
|
id(new PhabricatorStringExportField())
|
||||||
|
->setKey('title')
|
||||||
|
->setLabel(pht('Title')),
|
||||||
|
id(new PhabricatorStringExportField())
|
||||||
|
->setKey('summary')
|
||||||
|
->setLabel(pht('Summary')),
|
||||||
|
id(new PhabricatorStringExportField())
|
||||||
|
->setKey('testPlan')
|
||||||
|
->setLabel(pht('Test Plan')),
|
||||||
|
);
|
||||||
|
|
||||||
|
return $fields;
|
||||||
|
}
|
||||||
|
|
||||||
|
protected function newExportData(array $revisions) {
|
||||||
|
$viewer = $this->requireViewer();
|
||||||
|
|
||||||
|
$phids = array();
|
||||||
|
foreach ($revisions as $revision) {
|
||||||
|
$phids[] = $revision->getAuthorPHID();
|
||||||
|
}
|
||||||
|
$handles = $viewer->loadHandles($phids);
|
||||||
|
|
||||||
|
$export = array();
|
||||||
|
foreach ($revisions as $revision) {
|
||||||
|
|
||||||
|
$author_phid = $revision->getAuthorPHID();
|
||||||
|
if ($author_phid) {
|
||||||
|
$author_name = $handles[$author_phid]->getName();
|
||||||
|
} else {
|
||||||
|
$author_name = null;
|
||||||
|
}
|
||||||
|
|
||||||
|
$status = $revision->getStatusObject();
|
||||||
|
$status_name = $status->getDisplayName();
|
||||||
|
$status_value = $status->getKey();
|
||||||
|
|
||||||
|
$export[] = array(
|
||||||
|
'monogram' => $revision->getMonogram(),
|
||||||
|
'authorPHID' => $author_phid,
|
||||||
|
'author' => $author_name,
|
||||||
|
'status' => $status_value,
|
||||||
|
'statusName' => $status_name,
|
||||||
|
'uri' => PhabricatorEnv::getProductionURI($revision->getURI()),
|
||||||
|
'title' => (string)$revision->getTitle(),
|
||||||
|
'summary' => (string)$revision->getSummary(),
|
||||||
|
'testPlan' => (string)$revision->getTestPlan(),
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
return $export;
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1152,6 +1152,20 @@ final class DifferentialRevision extends DifferentialDAO
|
|||||||
->setKey('testPlan')
|
->setKey('testPlan')
|
||||||
->setType('string')
|
->setType('string')
|
||||||
->setDescription(pht('Revision test plan.')),
|
->setDescription(pht('Revision test plan.')),
|
||||||
|
id(new PhabricatorConduitSearchFieldSpecification())
|
||||||
|
->setKey('isDraft')
|
||||||
|
->setType('bool')
|
||||||
|
->setDescription(
|
||||||
|
pht(
|
||||||
|
'True if this revision is in any draft state, and thus not '.
|
||||||
|
'notifying reviewers and subscribers about changes.')),
|
||||||
|
id(new PhabricatorConduitSearchFieldSpecification())
|
||||||
|
->setKey('holdAsDraft')
|
||||||
|
->setType('bool')
|
||||||
|
->setDescription(
|
||||||
|
pht(
|
||||||
|
'True if this revision is being held as a draft. It will not be '.
|
||||||
|
'automatically submitted for review even if tests pass.')),
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1172,6 +1186,8 @@ final class DifferentialRevision extends DifferentialDAO
|
|||||||
'diffPHID' => $this->getActiveDiffPHID(),
|
'diffPHID' => $this->getActiveDiffPHID(),
|
||||||
'summary' => $this->getSummary(),
|
'summary' => $this->getSummary(),
|
||||||
'testPlan' => $this->getTestPlan(),
|
'testPlan' => $this->getTestPlan(),
|
||||||
|
'isDraft' => !$this->getShouldBroadcast(),
|
||||||
|
'holdAsDraft' => (bool)$this->getHoldAsDraft(),
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -10,6 +10,7 @@ final class DifferentialChangesetListView extends AphrontView {
|
|||||||
private $whitespace;
|
private $whitespace;
|
||||||
private $background;
|
private $background;
|
||||||
private $header;
|
private $header;
|
||||||
|
private $isStandalone;
|
||||||
|
|
||||||
private $standaloneURI;
|
private $standaloneURI;
|
||||||
private $leftRawFileURI;
|
private $leftRawFileURI;
|
||||||
@@ -124,6 +125,15 @@ final class DifferentialChangesetListView extends AphrontView {
|
|||||||
return $this;
|
return $this;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function setIsStandalone($is_standalone) {
|
||||||
|
$this->isStandalone = $is_standalone;
|
||||||
|
return $this;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getIsStandalone() {
|
||||||
|
return $this->isStandalone;
|
||||||
|
}
|
||||||
|
|
||||||
public function setBackground($background) {
|
public function setBackground($background) {
|
||||||
$this->background = $background;
|
$this->background = $background;
|
||||||
return $this;
|
return $this;
|
||||||
@@ -219,6 +229,7 @@ final class DifferentialChangesetListView extends AphrontView {
|
|||||||
'changesetViewIDs' => $ids,
|
'changesetViewIDs' => $ids,
|
||||||
'inlineURI' => $this->inlineURI,
|
'inlineURI' => $this->inlineURI,
|
||||||
'inlineListURI' => $this->inlineListURI,
|
'inlineListURI' => $this->inlineListURI,
|
||||||
|
'isStandalone' => $this->getIsStandalone(),
|
||||||
'pht' => array(
|
'pht' => array(
|
||||||
'Open in Editor' => pht('Open in Editor'),
|
'Open in Editor' => pht('Open in Editor'),
|
||||||
'Show All Context' => pht('Show All Context'),
|
'Show All Context' => pht('Show All Context'),
|
||||||
@@ -298,6 +309,7 @@ final class DifferentialChangesetListView extends AphrontView {
|
|||||||
'Show All Inlines' => pht('Show All Inlines'),
|
'Show All Inlines' => pht('Show All Inlines'),
|
||||||
|
|
||||||
'List Inline Comments' => pht('List Inline Comments'),
|
'List Inline Comments' => pht('List Inline Comments'),
|
||||||
|
'Display Options' => pht('Display Options'),
|
||||||
|
|
||||||
'Hide or show all inline comments.' =>
|
'Hide or show all inline comments.' =>
|
||||||
pht('Hide or show all inline comments.'),
|
pht('Hide or show all inline comments.'),
|
||||||
|
|||||||
173
src/applications/diffusion/DiffusionCommitAuditStatus.php
Normal file
173
src/applications/diffusion/DiffusionCommitAuditStatus.php
Normal file
@@ -0,0 +1,173 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
final class DiffusionCommitAuditStatus extends Phobject {
|
||||||
|
|
||||||
|
private $key;
|
||||||
|
private $spec = array();
|
||||||
|
|
||||||
|
const NONE = 'none';
|
||||||
|
const NEEDS_AUDIT = 'needs-audit';
|
||||||
|
const CONCERN_RAISED = 'concern-raised';
|
||||||
|
const PARTIALLY_AUDITED = 'partially-audited';
|
||||||
|
const AUDITED = 'audited';
|
||||||
|
const NEEDS_VERIFICATION = 'needs-verification';
|
||||||
|
|
||||||
|
public static function newModernKeys(array $values) {
|
||||||
|
$map = self::getMap();
|
||||||
|
|
||||||
|
$modern = array();
|
||||||
|
foreach ($map as $key => $spec) {
|
||||||
|
if (isset($spec['legacy'])) {
|
||||||
|
$modern[$spec['legacy']] = $key;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
foreach ($values as $key => $value) {
|
||||||
|
$values[$key] = idx($modern, $value, $value);
|
||||||
|
}
|
||||||
|
|
||||||
|
return $values;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static function newForStatus($status) {
|
||||||
|
$result = new self();
|
||||||
|
|
||||||
|
$result->key = $status;
|
||||||
|
|
||||||
|
$map = self::getMap();
|
||||||
|
if (isset($map[$status])) {
|
||||||
|
$result->spec = $map[$status];
|
||||||
|
}
|
||||||
|
|
||||||
|
return $result;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getKey() {
|
||||||
|
return $this->key;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getIcon() {
|
||||||
|
return idx($this->spec, 'icon');
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getColor() {
|
||||||
|
return idx($this->spec, 'color');
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getAnsiColor() {
|
||||||
|
return idx($this->spec, 'color.ansi');
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getName() {
|
||||||
|
return idx($this->spec, 'name', pht('Unknown ("%s")', $this->key));
|
||||||
|
}
|
||||||
|
|
||||||
|
public function isNoAudit() {
|
||||||
|
return ($this->key == self::NONE);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function isNeedsAudit() {
|
||||||
|
return ($this->key == self::NEEDS_AUDIT);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function isConcernRaised() {
|
||||||
|
return ($this->key == self::CONCERN_RAISED);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function isNeedsVerification() {
|
||||||
|
return ($this->key == self::NEEDS_VERIFICATION);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function isPartiallyAudited() {
|
||||||
|
return ($this->key == self::PARTIALLY_AUDITED);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function isAudited() {
|
||||||
|
return ($this->key == self::AUDITED);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getIsClosed() {
|
||||||
|
return idx($this->spec, 'closed');
|
||||||
|
}
|
||||||
|
|
||||||
|
public static function getOpenStatusConstants() {
|
||||||
|
$constants = array();
|
||||||
|
foreach (self::getMap() as $key => $map) {
|
||||||
|
if (!$map['closed']) {
|
||||||
|
$constants[] = $key;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return $constants;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static function newOptions() {
|
||||||
|
$map = self::getMap();
|
||||||
|
return ipull($map, 'name');
|
||||||
|
}
|
||||||
|
|
||||||
|
public static function newDeprecatedOptions() {
|
||||||
|
$map = self::getMap();
|
||||||
|
|
||||||
|
$results = array();
|
||||||
|
foreach ($map as $key => $spec) {
|
||||||
|
if (isset($spec['legacy'])) {
|
||||||
|
$results[$spec['legacy']] = $key;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return $results;
|
||||||
|
}
|
||||||
|
|
||||||
|
private static function getMap() {
|
||||||
|
return array(
|
||||||
|
self::NONE => array(
|
||||||
|
'name' => pht('No Audits'),
|
||||||
|
'legacy' => 0,
|
||||||
|
'icon' => 'fa-check',
|
||||||
|
'color' => 'bluegrey',
|
||||||
|
'closed' => true,
|
||||||
|
'color.ansi' => null,
|
||||||
|
),
|
||||||
|
self::NEEDS_AUDIT => array(
|
||||||
|
'name' => pht('Audit Required'),
|
||||||
|
'legacy' => 1,
|
||||||
|
'icon' => 'fa-exclamation-circle',
|
||||||
|
'color' => 'orange',
|
||||||
|
'closed' => false,
|
||||||
|
'color.ansi' => 'magenta',
|
||||||
|
),
|
||||||
|
self::CONCERN_RAISED => array(
|
||||||
|
'name' => pht('Concern Raised'),
|
||||||
|
'legacy' => 2,
|
||||||
|
'icon' => 'fa-times-circle',
|
||||||
|
'color' => 'red',
|
||||||
|
'closed' => false,
|
||||||
|
'color.ansi' => 'red',
|
||||||
|
),
|
||||||
|
self::PARTIALLY_AUDITED => array(
|
||||||
|
'name' => pht('Partially Audited'),
|
||||||
|
'legacy' => 3,
|
||||||
|
'icon' => 'fa-check-circle-o',
|
||||||
|
'color' => 'yellow',
|
||||||
|
'closed' => false,
|
||||||
|
'color.ansi' => 'yellow',
|
||||||
|
),
|
||||||
|
self::AUDITED => array(
|
||||||
|
'name' => pht('Audited'),
|
||||||
|
'legacy' => 4,
|
||||||
|
'icon' => 'fa-check-circle',
|
||||||
|
'color' => 'green',
|
||||||
|
'closed' => true,
|
||||||
|
'color.ansi' => 'green',
|
||||||
|
),
|
||||||
|
self::NEEDS_VERIFICATION => array(
|
||||||
|
'name' => pht('Needs Verification'),
|
||||||
|
'legacy' => 5,
|
||||||
|
'icon' => 'fa-refresh',
|
||||||
|
'color' => 'indigo',
|
||||||
|
'closed' => false,
|
||||||
|
'color.ansi' => 'magenta',
|
||||||
|
),
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -9,6 +9,14 @@ final class DiffusionGetRecentCommitsByPathConduitAPIMethod
|
|||||||
return 'diffusion.getrecentcommitsbypath';
|
return 'diffusion.getrecentcommitsbypath';
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function getMethodStatus() {
|
||||||
|
return self::METHOD_STATUS_DEPRECATED;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getMethodStatusDescription() {
|
||||||
|
return pht('Obsoleted by "diffusion.historyquery".');
|
||||||
|
}
|
||||||
|
|
||||||
public function getMethodDescription() {
|
public function getMethodDescription() {
|
||||||
return pht(
|
return pht(
|
||||||
'Get commit identifiers for recent commits affecting a given path.');
|
'Get commit identifiers for recent commits affecting a given path.');
|
||||||
@@ -23,6 +31,12 @@ final class DiffusionGetRecentCommitsByPathConduitAPIMethod
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
protected function defineErrorTypes() {
|
||||||
|
return array(
|
||||||
|
'ERR_NOT_FOUND' => pht('Repository was not found.'),
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
protected function defineReturnType() {
|
protected function defineReturnType() {
|
||||||
return 'nonempty list<string>';
|
return 'nonempty list<string>';
|
||||||
}
|
}
|
||||||
@@ -36,6 +50,10 @@ final class DiffusionGetRecentCommitsByPathConduitAPIMethod
|
|||||||
'branch' => $request->getValue('branch'),
|
'branch' => $request->getValue('branch'),
|
||||||
));
|
));
|
||||||
|
|
||||||
|
if ($drequest === null) {
|
||||||
|
throw new ConduitException('ERR_NOT_FOUND');
|
||||||
|
}
|
||||||
|
|
||||||
$limit = nonempty(
|
$limit = nonempty(
|
||||||
$request->getValue('limit'),
|
$request->getValue('limit'),
|
||||||
self::DEFAULT_LIMIT);
|
self::DEFAULT_LIMIT);
|
||||||
|
|||||||
@@ -24,6 +24,7 @@ final class DiffusionBlameController extends DiffusionController {
|
|||||||
->setViewer($viewer)
|
->setViewer($viewer)
|
||||||
->withRepository($repository)
|
->withRepository($repository)
|
||||||
->withIdentifiers($identifiers)
|
->withIdentifiers($identifiers)
|
||||||
|
->needIdentities(true)
|
||||||
->execute();
|
->execute();
|
||||||
$commits = mpull($commits, null, 'getCommitIdentifier');
|
$commits = mpull($commits, null, 'getCommitIdentifier');
|
||||||
} else {
|
} else {
|
||||||
@@ -68,10 +69,7 @@ final class DiffusionBlameController extends DiffusionController {
|
|||||||
|
|
||||||
$handle_phids = array();
|
$handle_phids = array();
|
||||||
foreach ($commits as $commit) {
|
foreach ($commits as $commit) {
|
||||||
$author_phid = $commit->getAuthorPHID();
|
$handle_phids[] = $commit->getAuthorDisplayPHID();
|
||||||
if ($author_phid) {
|
|
||||||
$handle_phids[] = $author_phid;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
foreach ($revisions as $revision) {
|
foreach ($revisions as $revision) {
|
||||||
@@ -117,11 +115,7 @@ final class DiffusionBlameController extends DiffusionController {
|
|||||||
$author_phid = null;
|
$author_phid = null;
|
||||||
|
|
||||||
if ($commit) {
|
if ($commit) {
|
||||||
$author_phid = $commit->getAuthorPHID();
|
$author_phid = $commit->getAuthorDisplayPHID();
|
||||||
}
|
|
||||||
|
|
||||||
if (!$author_phid && $revision) {
|
|
||||||
$author_phid = $revision->getAuthorPHID();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!$author_phid) {
|
if (!$author_phid) {
|
||||||
@@ -139,6 +133,7 @@ final class DiffusionBlameController extends DiffusionController {
|
|||||||
$author_meta = array(
|
$author_meta = array(
|
||||||
'tip' => $handles[$author_phid]->getName(),
|
'tip' => $handles[$author_phid]->getName(),
|
||||||
'align' => 'E',
|
'align' => 'E',
|
||||||
|
'size' => 'auto',
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -46,6 +46,7 @@ final class DiffusionCommitController extends DiffusionController {
|
|||||||
->needCommitData(true)
|
->needCommitData(true)
|
||||||
->needAuditRequests(true)
|
->needAuditRequests(true)
|
||||||
->setLimit(100)
|
->setLimit(100)
|
||||||
|
->needIdentities(true)
|
||||||
->execute();
|
->execute();
|
||||||
|
|
||||||
$multiple_results = count($commits) > 1;
|
$multiple_results = count($commits) > 1;
|
||||||
@@ -170,13 +171,12 @@ final class DiffusionCommitController extends DiffusionController {
|
|||||||
->setHeaderIcon('fa-code-fork')
|
->setHeaderIcon('fa-code-fork')
|
||||||
->addTag($commit_tag);
|
->addTag($commit_tag);
|
||||||
|
|
||||||
if ($commit->getAuditStatus()) {
|
if (!$commit->isAuditStatusNoAudit()) {
|
||||||
$icon = PhabricatorAuditCommitStatusConstants::getStatusIcon(
|
$status = $commit->getAuditStatusObject();
|
||||||
$commit->getAuditStatus());
|
|
||||||
$color = PhabricatorAuditCommitStatusConstants::getStatusColor(
|
$icon = $status->getIcon();
|
||||||
$commit->getAuditStatus());
|
$color = $status->getColor();
|
||||||
$status = PhabricatorAuditCommitStatusConstants::getStatusName(
|
$status = $status->getName();
|
||||||
$commit->getAuditStatus());
|
|
||||||
|
|
||||||
$header->setStatus($icon, $color, $status);
|
$header->setStatus($icon, $color, $status);
|
||||||
}
|
}
|
||||||
@@ -504,15 +504,13 @@ final class DiffusionCommitController extends DiffusionController {
|
|||||||
|
|
||||||
$phids = $edge_query->getDestinationPHIDs(array($commit_phid));
|
$phids = $edge_query->getDestinationPHIDs(array($commit_phid));
|
||||||
|
|
||||||
if ($data->getCommitDetail('authorPHID')) {
|
|
||||||
$phids[] = $data->getCommitDetail('authorPHID');
|
|
||||||
}
|
|
||||||
if ($data->getCommitDetail('reviewerPHID')) {
|
if ($data->getCommitDetail('reviewerPHID')) {
|
||||||
$phids[] = $data->getCommitDetail('reviewerPHID');
|
$phids[] = $data->getCommitDetail('reviewerPHID');
|
||||||
}
|
}
|
||||||
if ($data->getCommitDetail('committerPHID')) {
|
|
||||||
$phids[] = $data->getCommitDetail('committerPHID');
|
$phids[] = $commit->getCommitterDisplayPHID();
|
||||||
}
|
$phids[] = $commit->getAuthorDisplayPHID();
|
||||||
|
|
||||||
// NOTE: We should never normally have more than a single push log, but
|
// NOTE: We should never normally have more than a single push log, but
|
||||||
// it can occur naturally if a commit is pushed, then the branch it was
|
// it can occur naturally if a commit is pushed, then the branch it was
|
||||||
@@ -573,24 +571,11 @@ final class DiffusionCommitController extends DiffusionController {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
$author_phid = $data->getCommitDetail('authorPHID');
|
|
||||||
$author_name = $data->getAuthorName();
|
|
||||||
$author_epoch = $data->getCommitDetail('authorEpoch');
|
$author_epoch = $data->getCommitDetail('authorEpoch');
|
||||||
|
|
||||||
$committed_info = id(new PHUIStatusItemView())
|
$committed_info = id(new PHUIStatusItemView())
|
||||||
->setNote(phabricator_datetime($commit->getEpoch(), $viewer));
|
->setNote(phabricator_datetime($commit->getEpoch(), $viewer))
|
||||||
|
->setTarget($commit->renderAnyCommitter($viewer, $handles));
|
||||||
$committer_phid = $data->getCommitDetail('committerPHID');
|
|
||||||
$committer_name = $data->getCommitDetail('committer');
|
|
||||||
if ($committer_phid) {
|
|
||||||
$committed_info->setTarget($handles[$committer_phid]->renderLink());
|
|
||||||
} else if (strlen($committer_name)) {
|
|
||||||
$committed_info->setTarget($committer_name);
|
|
||||||
} else if ($author_phid) {
|
|
||||||
$committed_info->setTarget($handles[$author_phid]->renderLink());
|
|
||||||
} else if (strlen($author_name)) {
|
|
||||||
$committed_info->setTarget($author_name);
|
|
||||||
}
|
|
||||||
|
|
||||||
$committed_list = new PHUIStatusListView();
|
$committed_list = new PHUIStatusListView();
|
||||||
$committed_list->addItem($committed_info);
|
$committed_list->addItem($committed_info);
|
||||||
@@ -716,7 +701,7 @@ final class DiffusionCommitController extends DiffusionController {
|
|||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
$author_phid = $data->getCommitDetail('authorPHID');
|
$author_phid = $commit->getAuthorDisplayPHID();
|
||||||
$author_name = $data->getAuthorName();
|
$author_name = $data->getAuthorName();
|
||||||
$author_epoch = $data->getCommitDetail('authorEpoch');
|
$author_epoch = $data->getCommitDetail('authorEpoch');
|
||||||
$date = null;
|
$date = null;
|
||||||
@@ -748,10 +733,8 @@ final class DiffusionCommitController extends DiffusionController {
|
|||||||
->setImage($image_uri)
|
->setImage($image_uri)
|
||||||
->setImageHref($image_href)
|
->setImageHref($image_href)
|
||||||
->setContent($content);
|
->setContent($content);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
private function buildComments(PhabricatorRepositoryCommit $commit) {
|
private function buildComments(PhabricatorRepositoryCommit $commit) {
|
||||||
$timeline = $this->buildTransactionTimeline(
|
$timeline = $this->buildTransactionTimeline(
|
||||||
$commit,
|
$commit,
|
||||||
|
|||||||
@@ -50,19 +50,17 @@ final class DiffusionInlineCommentController
|
|||||||
}
|
}
|
||||||
|
|
||||||
protected function loadCommentForEdit($id) {
|
protected function loadCommentForEdit($id) {
|
||||||
$request = $this->getRequest();
|
$viewer = $this->getViewer();
|
||||||
$user = $request->getUser();
|
|
||||||
|
|
||||||
$inline = $this->loadComment($id);
|
$inline = $this->loadComment($id);
|
||||||
if (!$this->canEditInlineComment($user, $inline)) {
|
if (!$this->canEditInlineComment($viewer, $inline)) {
|
||||||
throw new Exception(pht('That comment is not editable!'));
|
throw new Exception(pht('That comment is not editable!'));
|
||||||
}
|
}
|
||||||
return $inline;
|
return $inline;
|
||||||
}
|
}
|
||||||
|
|
||||||
protected function loadCommentForDone($id) {
|
protected function loadCommentForDone($id) {
|
||||||
$request = $this->getRequest();
|
$viewer = $this->getViewer();
|
||||||
$viewer = $request->getUser();
|
|
||||||
|
|
||||||
$inline = $this->loadComment($id);
|
$inline = $this->loadComment($id);
|
||||||
if (!$inline) {
|
if (!$inline) {
|
||||||
@@ -77,20 +75,32 @@ final class DiffusionInlineCommentController
|
|||||||
throw new Exception(pht('Failed to load commit.'));
|
throw new Exception(pht('Failed to load commit.'));
|
||||||
}
|
}
|
||||||
|
|
||||||
if ((!$commit->getAuthorPHID()) ||
|
$owner_phid = $commit->getAuthorPHID();
|
||||||
($commit->getAuthorPHID() != $viewer->getPHID())) {
|
$viewer_phid = $viewer->getPHID();
|
||||||
throw new Exception(pht('You can not mark this comment as complete.'));
|
$viewer_is_owner = ($owner_phid && ($owner_phid == $viewer_phid));
|
||||||
|
$viewer_is_author = ($viewer_phid == $inline->getAuthorPHID());
|
||||||
|
$is_draft = $inline->isDraft();
|
||||||
|
|
||||||
|
if ($viewer_is_owner) {
|
||||||
|
// You can mark inlines on your own commits as "Done".
|
||||||
|
} else if ($viewer_is_author && $is_draft) {
|
||||||
|
// You can mark your own unsubmitted inlines as "Done".
|
||||||
|
} else {
|
||||||
|
throw new Exception(
|
||||||
|
pht(
|
||||||
|
'You can not mark this comment as complete: you did not author '.
|
||||||
|
'the commit and the comment is not a draft you wrote.'));
|
||||||
}
|
}
|
||||||
|
|
||||||
return $inline;
|
return $inline;
|
||||||
}
|
}
|
||||||
|
|
||||||
private function canEditInlineComment(
|
private function canEditInlineComment(
|
||||||
PhabricatorUser $user,
|
PhabricatorUser $viewer,
|
||||||
PhabricatorAuditInlineComment $inline) {
|
PhabricatorAuditInlineComment $inline) {
|
||||||
|
|
||||||
// Only the author may edit a comment.
|
// Only the author may edit a comment.
|
||||||
if ($inline->getAuthorPHID() != $user->getPHID()) {
|
if ($inline->getAuthorPHID() != $viewer->getPHID()) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -35,6 +35,7 @@ final class DiffusionLastModifiedController extends DiffusionController {
|
|||||||
->withRepository($drequest->getRepository())
|
->withRepository($drequest->getRepository())
|
||||||
->withIdentifiers(array_values($modified_map))
|
->withIdentifiers(array_values($modified_map))
|
||||||
->needCommitData(true)
|
->needCommitData(true)
|
||||||
|
->needIdentities(true)
|
||||||
->execute();
|
->execute();
|
||||||
$commit_map = mpull($commit_map, null, 'getCommitIdentifier');
|
$commit_map = mpull($commit_map, null, 'getCommitIdentifier');
|
||||||
} else {
|
} else {
|
||||||
@@ -54,9 +55,8 @@ final class DiffusionLastModifiedController extends DiffusionController {
|
|||||||
|
|
||||||
$phids = array();
|
$phids = array();
|
||||||
foreach ($commits as $commit) {
|
foreach ($commits as $commit) {
|
||||||
$data = $commit->getCommitData();
|
$phids[] = $commit->getCommitterDisplayPHID();
|
||||||
$phids[] = $data->getCommitDetail('authorPHID');
|
$phids[] = $commit->getAuthorDisplayPHID();
|
||||||
$phids[] = $data->getCommitDetail('committerPHID');
|
|
||||||
}
|
}
|
||||||
$phids = array_filter($phids);
|
$phids = array_filter($phids);
|
||||||
$handles = $this->loadViewerHandles($phids);
|
$handles = $this->loadViewerHandles($phids);
|
||||||
@@ -110,37 +110,20 @@ final class DiffusionLastModifiedController extends DiffusionController {
|
|||||||
$date = '';
|
$date = '';
|
||||||
}
|
}
|
||||||
|
|
||||||
$data = $commit->getCommitData();
|
$author = $commit->renderAuthor($viewer, $handles);
|
||||||
if ($data) {
|
$committer = $commit->renderCommitter($viewer, $handles);
|
||||||
$author_phid = $data->getCommitDetail('authorPHID');
|
|
||||||
if ($author_phid && isset($handles[$author_phid])) {
|
|
||||||
$author = $handles[$author_phid]->renderLink();
|
|
||||||
} else {
|
|
||||||
$author = DiffusionView::renderName($data->getAuthorName());
|
|
||||||
}
|
|
||||||
|
|
||||||
$committer = $data->getCommitDetail('committer');
|
|
||||||
if ($committer) {
|
|
||||||
$committer_phid = $data->getCommitDetail('committerPHID');
|
|
||||||
if ($committer_phid && isset($handles[$committer_phid])) {
|
|
||||||
$committer = $handles[$committer_phid]->renderLink();
|
|
||||||
} else {
|
|
||||||
$committer = DiffusionView::renderName($committer);
|
|
||||||
}
|
|
||||||
if ($author != $committer) {
|
if ($author != $committer) {
|
||||||
$author = hsprintf('%s/%s', $author, $committer);
|
$author = hsprintf('%s/%s', $author, $committer);
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
|
$data = $commit->getCommitData();
|
||||||
$details = DiffusionView::linkDetail(
|
$details = DiffusionView::linkDetail(
|
||||||
$drequest->getRepository(),
|
$drequest->getRepository(),
|
||||||
$commit->getCommitIdentifier(),
|
$commit->getCommitIdentifier(),
|
||||||
$data->getSummary());
|
$data->getSummary());
|
||||||
$details = AphrontTableView::renderSingleDisplayLine($details);
|
$details = AphrontTableView::renderSingleDisplayLine($details);
|
||||||
} else {
|
|
||||||
$author = '';
|
|
||||||
$details = '';
|
|
||||||
}
|
|
||||||
|
|
||||||
$return = array(
|
$return = array(
|
||||||
'commit' => $modified,
|
'commit' => $modified,
|
||||||
|
|||||||
@@ -31,8 +31,6 @@ final class DiffusionDoorkeeperCommitFeedStoryPublisher
|
|||||||
// After ApplicationTransactions, we could annotate feed stories more
|
// After ApplicationTransactions, we could annotate feed stories more
|
||||||
// explicitly.
|
// explicitly.
|
||||||
|
|
||||||
$fully_audited = PhabricatorAuditCommitStatusConstants::FULLY_AUDITED;
|
|
||||||
|
|
||||||
$story = $this->getFeedStory();
|
$story = $this->getFeedStory();
|
||||||
$xaction = $story->getPrimaryTransaction();
|
$xaction = $story->getPrimaryTransaction();
|
||||||
switch ($xaction->getTransactionType()) {
|
switch ($xaction->getTransactionType()) {
|
||||||
@@ -41,7 +39,7 @@ final class DiffusionDoorkeeperCommitFeedStoryPublisher
|
|||||||
case PhabricatorAuditActionConstants::CLOSE:
|
case PhabricatorAuditActionConstants::CLOSE:
|
||||||
return true;
|
return true;
|
||||||
case PhabricatorAuditActionConstants::ACCEPT:
|
case PhabricatorAuditActionConstants::ACCEPT:
|
||||||
if ($object->getAuditStatus() == $fully_audited) {
|
if ($object->isAuditStatusAudited()) {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
@@ -165,14 +163,7 @@ final class DiffusionDoorkeeperCommitFeedStoryPublisher
|
|||||||
}
|
}
|
||||||
|
|
||||||
public function isObjectClosed($object) {
|
public function isObjectClosed($object) {
|
||||||
switch ($object->getAuditStatus()) {
|
return $object->getAuditStatusObject()->getIsClosed();
|
||||||
case PhabricatorAuditCommitStatusConstants::NEEDS_AUDIT:
|
|
||||||
case PhabricatorAuditCommitStatusConstants::CONCERN_RAISED:
|
|
||||||
case PhabricatorAuditCommitStatusConstants::PARTIALLY_AUDITED:
|
|
||||||
return false;
|
|
||||||
default:
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public function getResponsibilityTitle($object) {
|
public function getResponsibilityTitle($object) {
|
||||||
|
|||||||
@@ -41,12 +41,12 @@ final class DiffusionHovercardEngineExtension
|
|||||||
$hovercard->addField(pht('Date'),
|
$hovercard->addField(pht('Date'),
|
||||||
phabricator_date($commit->getEpoch(), $viewer));
|
phabricator_date($commit->getEpoch(), $viewer));
|
||||||
|
|
||||||
if ($commit->getAuditStatus() !=
|
if (!$commit->isAuditStatusNoAudit()) {
|
||||||
PhabricatorAuditCommitStatusConstants::NONE) {
|
$status = $commit->getAuditStatusObject();
|
||||||
|
|
||||||
$hovercard->addField(pht('Audit Status'),
|
$hovercard->addField(
|
||||||
PhabricatorAuditCommitStatusConstants::getStatusName(
|
pht('Audit Status'),
|
||||||
$commit->getAuditStatus()));
|
$status->getName());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -34,4 +34,10 @@ final class DiffusionBuildableEngine
|
|||||||
$this->applyTransactions(array($xaction));
|
$this->applyTransactions(array($xaction));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function getAuthorIdentity() {
|
||||||
|
return $this->getObject()
|
||||||
|
->loadIdentities($this->getViewer())
|
||||||
|
->getAuthorIdentity();
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -23,12 +23,16 @@ final class DiffusionMercurialWireProtocol extends Phobject {
|
|||||||
'listkeys' => array('namespace'),
|
'listkeys' => array('namespace'),
|
||||||
'lookup' => array('key'),
|
'lookup' => array('key'),
|
||||||
'pushkey' => array('namespace', 'key', 'old', 'new'),
|
'pushkey' => array('namespace', 'key', 'old', 'new'),
|
||||||
|
'protocaps' => array('caps'),
|
||||||
'stream_out' => array(''),
|
'stream_out' => array(''),
|
||||||
'unbundle' => array('heads'),
|
'unbundle' => array('heads'),
|
||||||
);
|
);
|
||||||
|
|
||||||
if (!isset($commands[$command])) {
|
if (!isset($commands[$command])) {
|
||||||
throw new Exception(pht("Unknown Mercurial command '%s!", $command));
|
throw new Exception(
|
||||||
|
pht(
|
||||||
|
'Unknown Mercurial command "%s"!',
|
||||||
|
$command));
|
||||||
}
|
}
|
||||||
|
|
||||||
return $commands[$command];
|
return $commands[$command];
|
||||||
@@ -49,6 +53,7 @@ final class DiffusionMercurialWireProtocol extends Phobject {
|
|||||||
'known' => true,
|
'known' => true,
|
||||||
'listkeys' => true,
|
'listkeys' => true,
|
||||||
'lookup' => true,
|
'lookup' => true,
|
||||||
|
'protocaps' => true,
|
||||||
'stream_out' => true,
|
'stream_out' => true,
|
||||||
);
|
);
|
||||||
|
|
||||||
|
|||||||
@@ -170,12 +170,13 @@ final class DiffusionRepositoryClusterEngine extends Phobject {
|
|||||||
pht(
|
pht(
|
||||||
'Acquired read lock immediately.'));
|
'Acquired read lock immediately.'));
|
||||||
}
|
}
|
||||||
} catch (Exception $ex) {
|
} catch (PhutilLockException $ex) {
|
||||||
throw new PhutilProxyException(
|
throw new PhutilProxyException(
|
||||||
pht(
|
pht(
|
||||||
'Failed to acquire read lock after waiting %s second(s). You '.
|
'Failed to acquire read lock after waiting %s second(s). You '.
|
||||||
'may be able to retry later.',
|
'may be able to retry later. (%s)',
|
||||||
new PhutilNumber($lock_wait)),
|
new PhutilNumber($lock_wait),
|
||||||
|
$ex->getHint()),
|
||||||
$ex);
|
$ex);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -207,7 +208,7 @@ final class DiffusionRepositoryClusterEngine extends Phobject {
|
|||||||
|
|
||||||
$this->synchronizeWorkingCopyFromDevices($fetchable);
|
$this->synchronizeWorkingCopyFromDevices($fetchable);
|
||||||
} else {
|
} else {
|
||||||
$this->synchornizeWorkingCopyFromRemote();
|
$this->synchronizeWorkingCopyFromRemote();
|
||||||
}
|
}
|
||||||
|
|
||||||
PhabricatorRepositoryWorkingCopyVersion::updateVersion(
|
PhabricatorRepositoryWorkingCopyVersion::updateVersion(
|
||||||
@@ -349,12 +350,13 @@ final class DiffusionRepositoryClusterEngine extends Phobject {
|
|||||||
pht(
|
pht(
|
||||||
'Acquired write lock immediately.'));
|
'Acquired write lock immediately.'));
|
||||||
}
|
}
|
||||||
} catch (Exception $ex) {
|
} catch (PhutilLockException $ex) {
|
||||||
throw new PhutilProxyException(
|
throw new PhutilProxyException(
|
||||||
pht(
|
pht(
|
||||||
'Failed to acquire write lock after waiting %s second(s). You '.
|
'Failed to acquire write lock after waiting %s second(s). You '.
|
||||||
'may be able to retry later.',
|
'may be able to retry later. (%s)',
|
||||||
new PhutilNumber($lock_wait)),
|
new PhutilNumber($lock_wait),
|
||||||
|
$ex->getHint()),
|
||||||
$ex);
|
$ex);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -607,7 +609,7 @@ final class DiffusionRepositoryClusterEngine extends Phobject {
|
|||||||
/**
|
/**
|
||||||
* @task internal
|
* @task internal
|
||||||
*/
|
*/
|
||||||
private function synchornizeWorkingCopyFromRemote() {
|
private function synchronizeWorkingCopyFromRemote() {
|
||||||
$repository = $this->getRepository();
|
$repository = $this->getRepository();
|
||||||
$device = AlmanacKeys::getLiveDevice();
|
$device = AlmanacKeys::getLiveDevice();
|
||||||
|
|
||||||
@@ -686,6 +688,9 @@ final class DiffusionRepositoryClusterEngine extends Phobject {
|
|||||||
'fetchable.'));
|
'fetchable.'));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// If we can synchronize from multiple sources, choose one at random.
|
||||||
|
shuffle($fetchable);
|
||||||
|
|
||||||
$caught = null;
|
$caught = null;
|
||||||
foreach ($fetchable as $binding) {
|
foreach ($fetchable as $binding) {
|
||||||
try {
|
try {
|
||||||
|
|||||||
@@ -714,10 +714,13 @@ final class DiffusionCommitQuery
|
|||||||
}
|
}
|
||||||
|
|
||||||
if ($this->statuses !== null) {
|
if ($this->statuses !== null) {
|
||||||
|
$statuses = DiffusionCommitAuditStatus::newModernKeys(
|
||||||
|
$this->statuses);
|
||||||
|
|
||||||
$where[] = qsprintf(
|
$where[] = qsprintf(
|
||||||
$conn,
|
$conn,
|
||||||
'commit.auditStatus IN (%Ld)',
|
'commit.auditStatus IN (%Ls)',
|
||||||
$this->statuses);
|
$statuses);
|
||||||
}
|
}
|
||||||
|
|
||||||
if ($this->packagePHIDs !== null) {
|
if ($this->packagePHIDs !== null) {
|
||||||
|
|||||||
@@ -69,14 +69,12 @@ final class DiffusionCommitRequiredActionResultBucket
|
|||||||
$results = array();
|
$results = array();
|
||||||
$objects = $this->objects;
|
$objects = $this->objects;
|
||||||
|
|
||||||
$status_concern = PhabricatorAuditCommitStatusConstants::CONCERN_RAISED;
|
|
||||||
|
|
||||||
foreach ($objects as $key => $object) {
|
foreach ($objects as $key => $object) {
|
||||||
if (empty($phids[$object->getAuthorPHID()])) {
|
if (empty($phids[$object->getAuthorPHID()])) {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
if ($object->getAuditStatus() != $status_concern) {
|
if (!$object->isAuditStatusConcernRaised()) {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -91,7 +89,6 @@ final class DiffusionCommitRequiredActionResultBucket
|
|||||||
$results = array();
|
$results = array();
|
||||||
$objects = $this->objects;
|
$objects = $this->objects;
|
||||||
|
|
||||||
$status_verify = PhabricatorAuditCommitStatusConstants::NEEDS_VERIFICATION;
|
|
||||||
$has_concern = array(
|
$has_concern = array(
|
||||||
PhabricatorAuditStatusConstants::CONCERNED,
|
PhabricatorAuditStatusConstants::CONCERNED,
|
||||||
);
|
);
|
||||||
@@ -102,7 +99,7 @@ final class DiffusionCommitRequiredActionResultBucket
|
|||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
if ($object->getAuditStatus() != $status_verify) {
|
if (!$object->isAuditStatusNeedsVerification()) {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -147,10 +144,8 @@ final class DiffusionCommitRequiredActionResultBucket
|
|||||||
$results = array();
|
$results = array();
|
||||||
$objects = $this->objects;
|
$objects = $this->objects;
|
||||||
|
|
||||||
$status_concern = PhabricatorAuditCommitStatusConstants::CONCERN_RAISED;
|
|
||||||
|
|
||||||
foreach ($objects as $key => $object) {
|
foreach ($objects as $key => $object) {
|
||||||
if ($object->getAuditStatus() != $status_concern) {
|
if (!$object->isAuditStatusConcernRaised()) {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -169,15 +164,13 @@ final class DiffusionCommitRequiredActionResultBucket
|
|||||||
$results = array();
|
$results = array();
|
||||||
$objects = $this->objects;
|
$objects = $this->objects;
|
||||||
|
|
||||||
$status_waiting = array(
|
|
||||||
PhabricatorAuditCommitStatusConstants::NEEDS_AUDIT,
|
|
||||||
PhabricatorAuditCommitStatusConstants::NEEDS_VERIFICATION,
|
|
||||||
PhabricatorAuditCommitStatusConstants::PARTIALLY_AUDITED,
|
|
||||||
);
|
|
||||||
$status_waiting = array_fuse($status_waiting);
|
|
||||||
|
|
||||||
foreach ($objects as $key => $object) {
|
foreach ($objects as $key => $object) {
|
||||||
if (empty($status_waiting[$object->getAuditStatus()])) {
|
$any_waiting =
|
||||||
|
$object->isAuditStatusNeedsAudit() ||
|
||||||
|
$object->isAuditStatusNeedsVerification() ||
|
||||||
|
$object->isAuditStatusPartiallyAudited();
|
||||||
|
|
||||||
|
if (!$any_waiting) {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -114,10 +114,10 @@ final class DiffusionHistoryTableView extends DiffusionHistoryView {
|
|||||||
'type' => $history->getFileType(),
|
'type' => $history->getFileType(),
|
||||||
));
|
));
|
||||||
|
|
||||||
$status = $commit->getAuditStatus();
|
$status = $commit->getAuditStatusObject();
|
||||||
$icon = PhabricatorAuditCommitStatusConstants::getStatusIcon($status);
|
$icon = $status->getIcon();
|
||||||
$color = PhabricatorAuditCommitStatusConstants::getStatusColor($status);
|
$color = $status->getColor();
|
||||||
$name = PhabricatorAuditCommitStatusConstants::getStatusName($status);
|
$name = $status->getName();
|
||||||
|
|
||||||
$audit_view = id(new PHUIIconView())
|
$audit_view = id(new PHUIIconView())
|
||||||
->setIcon($icon, $color)
|
->setIcon($icon, $color)
|
||||||
|
|||||||
@@ -94,7 +94,7 @@ final class DiffusionReadmeView extends DiffusionView {
|
|||||||
}
|
}
|
||||||
|
|
||||||
$readme_content = phutil_tag_div($class, $readme_content);
|
$readme_content = phutil_tag_div($class, $readme_content);
|
||||||
$document = id(new PHUIDocumentViewPro())
|
$document = id(new PHUIDocumentView())
|
||||||
->setFluid(true)
|
->setFluid(true)
|
||||||
->appendChild($readme_content);
|
->appendChild($readme_content);
|
||||||
|
|
||||||
|
|||||||
@@ -33,8 +33,7 @@ final class DiffusionCommitConcernTransaction
|
|||||||
public function applyInternalEffects($object, $value) {
|
public function applyInternalEffects($object, $value) {
|
||||||
// NOTE: We force the commit directly into "Concern Raised" so that we
|
// NOTE: We force the commit directly into "Concern Raised" so that we
|
||||||
// override a possible "Needs Verification" state.
|
// override a possible "Needs Verification" state.
|
||||||
$object->setAuditStatus(
|
$object->setAuditStatus(DiffusionCommitAuditStatus::CONCERN_RAISED);
|
||||||
PhabricatorAuditCommitStatusConstants::CONCERN_RAISED);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public function applyExternalEffects($object, $value) {
|
public function applyExternalEffects($object, $value) {
|
||||||
@@ -54,10 +53,8 @@ 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 requested you verify.
|
// as the author requested you verify.
|
||||||
$state_verify = PhabricatorAuditCommitStatusConstants::NEEDS_VERIFICATION;
|
|
||||||
|
|
||||||
if ($this->isViewerFullyRejected($object, $viewer)) {
|
if ($this->isViewerFullyRejected($object, $viewer)) {
|
||||||
if ($object->getAuditStatus() != $state_verify) {
|
if (!$object->isAuditStatusNeedsVerification()) {
|
||||||
throw new Exception(
|
throw new Exception(
|
||||||
pht(
|
pht(
|
||||||
'You can not raise a concern with this commit because you have '.
|
'You can not raise a concern with this commit because you have '.
|
||||||
|
|||||||
@@ -11,29 +11,32 @@ final class DiffusionCommitStateTransaction
|
|||||||
throw new PhutilMethodNotImplementedException();
|
throw new PhutilMethodNotImplementedException();
|
||||||
}
|
}
|
||||||
|
|
||||||
public function getIcon() {
|
private function getAuditStatusObject() {
|
||||||
$new = $this->getNewValue();
|
$new = $this->getNewValue();
|
||||||
return PhabricatorAuditCommitStatusConstants::getStatusIcon($new);
|
return DiffusionCommitAuditStatus::newForStatus($new);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getIcon() {
|
||||||
|
return $this->getAuditStatusObject()->getIcon();
|
||||||
}
|
}
|
||||||
|
|
||||||
public function getColor() {
|
public function getColor() {
|
||||||
$new = $this->getNewValue();
|
return $this->getAuditStatusObject()->getColor();
|
||||||
return PhabricatorAuditCommitStatusConstants::getStatusColor($new);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public function getTitle() {
|
public function getTitle() {
|
||||||
$new = $this->getNewValue();
|
$status = $this->getAuditStatusObject();
|
||||||
|
|
||||||
switch ($new) {
|
switch ($status->getKey()) {
|
||||||
case PhabricatorAuditCommitStatusConstants::NONE:
|
case DiffusionCommitAuditStatus::NONE:
|
||||||
return pht('This commit no longer requires audit.');
|
return pht('This commit no longer requires audit.');
|
||||||
case PhabricatorAuditCommitStatusConstants::NEEDS_AUDIT:
|
case DiffusionCommitAuditStatus::NEEDS_AUDIT:
|
||||||
return pht('This commit now requires audit.');
|
return pht('This commit now requires audit.');
|
||||||
case PhabricatorAuditCommitStatusConstants::CONCERN_RAISED:
|
case DiffusionCommitAuditStatus::CONCERN_RAISED:
|
||||||
return pht('This commit now has outstanding concerns.');
|
return pht('This commit now has outstanding concerns.');
|
||||||
case PhabricatorAuditCommitStatusConstants::NEEDS_VERIFICATION:
|
case DiffusionCommitAuditStatus::NEEDS_VERIFICATION:
|
||||||
return pht('This commit now requires verification by auditors.');
|
return pht('This commit now requires verification by auditors.');
|
||||||
case PhabricatorAuditCommitStatusConstants::FULLY_AUDITED:
|
case DiffusionCommitAuditStatus::AUDITED:
|
||||||
return pht('All concerns with this commit have now been addressed.');
|
return pht('All concerns with this commit have now been addressed.');
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -41,26 +44,26 @@ final class DiffusionCommitStateTransaction
|
|||||||
}
|
}
|
||||||
|
|
||||||
public function getTitleForFeed() {
|
public function getTitleForFeed() {
|
||||||
$new = $this->getNewValue();
|
$status = $this->getAuditStatusObject();
|
||||||
|
|
||||||
switch ($new) {
|
switch ($status->getKey()) {
|
||||||
case PhabricatorAuditCommitStatusConstants::NONE:
|
case DiffusionCommitAuditStatus::NONE:
|
||||||
return pht(
|
return pht(
|
||||||
'%s no longer requires audit.',
|
'%s no longer requires audit.',
|
||||||
$this->renderObject());
|
$this->renderObject());
|
||||||
case PhabricatorAuditCommitStatusConstants::NEEDS_AUDIT:
|
case DiffusionCommitAuditStatus::NEEDS_AUDIT:
|
||||||
return pht(
|
return pht(
|
||||||
'%s now requires audit.',
|
'%s now requires audit.',
|
||||||
$this->renderObject());
|
$this->renderObject());
|
||||||
case PhabricatorAuditCommitStatusConstants::CONCERN_RAISED:
|
case DiffusionCommitAuditStatus::CONCERN_RAISED:
|
||||||
return pht(
|
return pht(
|
||||||
'%s now has outstanding concerns.',
|
'%s now has outstanding concerns.',
|
||||||
$this->renderObject());
|
$this->renderObject());
|
||||||
case PhabricatorAuditCommitStatusConstants::NEEDS_VERIFICATION:
|
case DiffusionCommitAuditStatus::NEEDS_VERIFICATION:
|
||||||
return pht(
|
return pht(
|
||||||
'%s now requires verification by auditors.',
|
'%s now requires verification by auditors.',
|
||||||
$this->renderObject());
|
$this->renderObject());
|
||||||
case PhabricatorAuditCommitStatusConstants::FULLY_AUDITED:
|
case DiffusionCommitAuditStatus::AUDITED:
|
||||||
return pht(
|
return pht(
|
||||||
'All concerns with %s have now been addressed.',
|
'All concerns with %s have now been addressed.',
|
||||||
$this->renderObject());
|
$this->renderObject());
|
||||||
|
|||||||
@@ -36,8 +36,7 @@ final class DiffusionCommitVerifyTransaction
|
|||||||
}
|
}
|
||||||
|
|
||||||
public function applyInternalEffects($object, $value) {
|
public function applyInternalEffects($object, $value) {
|
||||||
$object->setAuditStatus(
|
$object->setAuditStatus(DiffusionCommitAuditStatus::NEEDS_VERIFICATION);
|
||||||
PhabricatorAuditCommitStatusConstants::NEEDS_VERIFICATION);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
protected function validateAction($object, PhabricatorUser $viewer) {
|
protected function validateAction($object, PhabricatorUser $viewer) {
|
||||||
@@ -48,8 +47,7 @@ final class DiffusionCommitVerifyTransaction
|
|||||||
'are not the author.'));
|
'are not the author.'));
|
||||||
}
|
}
|
||||||
|
|
||||||
$status = $object->getAuditStatus();
|
if (!$object->isAuditStatusConcernRaised()) {
|
||||||
if ($status != PhabricatorAuditCommitStatusConstants::CONCERN_RAISED) {
|
|
||||||
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 '.
|
||||||
|
|||||||
@@ -72,7 +72,7 @@ final class DivinerAtomController extends DivinerController {
|
|||||||
$prop_list = new PHUIPropertyGroupView();
|
$prop_list = new PHUIPropertyGroupView();
|
||||||
$prop_list->addPropertyList($properties);
|
$prop_list->addPropertyList($properties);
|
||||||
|
|
||||||
$document = id(new PHUIDocumentViewPro())
|
$document = id(new PHUIDocumentView())
|
||||||
->setBook($book->getTitle(), $group_name)
|
->setBook($book->getTitle(), $group_name)
|
||||||
->setHeader($header)
|
->setHeader($header)
|
||||||
->addClass('diviner-view');
|
->addClass('diviner-view');
|
||||||
|
|||||||
@@ -45,7 +45,7 @@ final class DivinerBookController extends DivinerController {
|
|||||||
->setName($book->getRepository()->getMonogram()));
|
->setName($book->getRepository()->getMonogram()));
|
||||||
}
|
}
|
||||||
|
|
||||||
$document = new PHUIDocumentViewPro();
|
$document = new PHUIDocumentView();
|
||||||
$document->setHeader($header);
|
$document->setHeader($header);
|
||||||
$document->addClass('diviner-view');
|
$document->addClass('diviner-view');
|
||||||
|
|
||||||
|
|||||||
@@ -27,7 +27,7 @@ final class DivinerMainController extends DivinerController {
|
|||||||
->setHeader(pht('Documentation Books'))
|
->setHeader(pht('Documentation Books'))
|
||||||
->addActionLink($query_button);
|
->addActionLink($query_button);
|
||||||
|
|
||||||
$document = new PHUIDocumentViewPro();
|
$document = new PHUIDocumentView();
|
||||||
$document->setHeader($header);
|
$document->setHeader($header);
|
||||||
$document->addClass('diviner-view');
|
$document->addClass('diviner-view');
|
||||||
|
|
||||||
|
|||||||
@@ -93,6 +93,8 @@ final class PhabricatorDrydockApplication extends PhabricatorApplication {
|
|||||||
'' => 'DrydockRepositoryOperationViewController',
|
'' => 'DrydockRepositoryOperationViewController',
|
||||||
'status/' => 'DrydockRepositoryOperationStatusController',
|
'status/' => 'DrydockRepositoryOperationStatusController',
|
||||||
'dismiss/' => 'DrydockRepositoryOperationDismissController',
|
'dismiss/' => 'DrydockRepositoryOperationDismissController',
|
||||||
|
'logs/(?:query/(?P<queryKey>[^/]+)/)?' =>
|
||||||
|
'DrydockLogListController',
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
|
|||||||
@@ -58,8 +58,11 @@ final class DrydockBlueprintViewController extends DrydockBlueprintController {
|
|||||||
$log_query = id(new DrydockLogQuery())
|
$log_query = id(new DrydockLogQuery())
|
||||||
->withBlueprintPHIDs(array($blueprint->getPHID()));
|
->withBlueprintPHIDs(array($blueprint->getPHID()));
|
||||||
|
|
||||||
|
$log_table = $this->buildLogTable($log_query)
|
||||||
|
->setHideBlueprints(true);
|
||||||
|
|
||||||
$logs = $this->buildLogBox(
|
$logs = $this->buildLogBox(
|
||||||
$log_query,
|
$log_table,
|
||||||
$this->getApplicationURI("blueprint/{$id}/logs/query/all/"));
|
$this->getApplicationURI("blueprint/{$id}/logs/query/all/"));
|
||||||
|
|
||||||
$view = id(new PHUITwoColumnView())
|
$view = id(new PHUITwoColumnView())
|
||||||
|
|||||||
@@ -79,7 +79,7 @@ abstract class DrydockController extends PhabricatorController {
|
|||||||
->addRawContent($table);
|
->addRawContent($table);
|
||||||
}
|
}
|
||||||
|
|
||||||
protected function buildLogBox(DrydockLogQuery $query, $all_uri) {
|
protected function buildLogTable(DrydockLogQuery $query) {
|
||||||
$viewer = $this->getViewer();
|
$viewer = $this->getViewer();
|
||||||
|
|
||||||
$logs = $query
|
$logs = $query
|
||||||
@@ -89,9 +89,12 @@ abstract class DrydockController extends PhabricatorController {
|
|||||||
|
|
||||||
$log_table = id(new DrydockLogListView())
|
$log_table = id(new DrydockLogListView())
|
||||||
->setUser($viewer)
|
->setUser($viewer)
|
||||||
->setLogs($logs)
|
->setLogs($logs);
|
||||||
->render();
|
|
||||||
|
|
||||||
|
return $log_table;
|
||||||
|
}
|
||||||
|
|
||||||
|
protected function buildLogBox(DrydockLogListView $log_table, $all_uri) {
|
||||||
$log_header = id(new PHUIHeaderView())
|
$log_header = id(new PHUIHeaderView())
|
||||||
->setHeader(pht('Logs'))
|
->setHeader(pht('Logs'))
|
||||||
->addActionLink(
|
->addActionLink(
|
||||||
|
|||||||
@@ -43,8 +43,11 @@ final class DrydockLeaseViewController extends DrydockLeaseController {
|
|||||||
$log_query = id(new DrydockLogQuery())
|
$log_query = id(new DrydockLogQuery())
|
||||||
->withLeasePHIDs(array($lease->getPHID()));
|
->withLeasePHIDs(array($lease->getPHID()));
|
||||||
|
|
||||||
|
$log_table = $this->buildLogTable($log_query)
|
||||||
|
->setHideLeases(true);
|
||||||
|
|
||||||
$logs = $this->buildLogBox(
|
$logs = $this->buildLogBox(
|
||||||
$log_query,
|
$log_table,
|
||||||
$this->getApplicationURI("lease/{$id}/logs/query/all/"));
|
$this->getApplicationURI("lease/{$id}/logs/query/all/"));
|
||||||
|
|
||||||
$crumbs = $this->buildApplicationCrumbs();
|
$crumbs = $this->buildApplicationCrumbs();
|
||||||
@@ -163,6 +166,30 @@ final class DrydockLeaseViewController extends DrydockLeaseController {
|
|||||||
}
|
}
|
||||||
$view->addProperty(pht('Expires'), $until_display);
|
$view->addProperty(pht('Expires'), $until_display);
|
||||||
|
|
||||||
|
$acquired_epoch = $lease->getAcquiredEpoch();
|
||||||
|
$activated_epoch = $lease->getActivatedEpoch();
|
||||||
|
|
||||||
|
if ($acquired_epoch) {
|
||||||
|
$acquired_display = phabricator_datetime($acquired_epoch, $viewer);
|
||||||
|
} else {
|
||||||
|
if ($activated_epoch) {
|
||||||
|
$acquired_display = phutil_tag(
|
||||||
|
'em',
|
||||||
|
array(),
|
||||||
|
pht('Activated on Acquisition'));
|
||||||
|
} else {
|
||||||
|
$acquired_display = phutil_tag('em', array(), pht('Not Acquired'));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
$view->addProperty(pht('Acquired'), $acquired_display);
|
||||||
|
|
||||||
|
if ($activated_epoch) {
|
||||||
|
$activated_display = phabricator_datetime($activated_epoch, $viewer);
|
||||||
|
} else {
|
||||||
|
$activated_display = phutil_tag('em', array(), pht('Not Activated'));
|
||||||
|
}
|
||||||
|
$view->addProperty(pht('Activated'), $activated_display);
|
||||||
|
|
||||||
$attributes = $lease->getAttributes();
|
$attributes = $lease->getAttributes();
|
||||||
if ($attributes) {
|
if ($attributes) {
|
||||||
$view->addSectionHeader(
|
$view->addSectionHeader(
|
||||||
|
|||||||
@@ -6,6 +6,7 @@ abstract class DrydockLogController
|
|||||||
private $blueprint;
|
private $blueprint;
|
||||||
private $resource;
|
private $resource;
|
||||||
private $lease;
|
private $lease;
|
||||||
|
private $operation;
|
||||||
|
|
||||||
public function setBlueprint(DrydockBlueprint $blueprint) {
|
public function setBlueprint(DrydockBlueprint $blueprint) {
|
||||||
$this->blueprint = $blueprint;
|
$this->blueprint = $blueprint;
|
||||||
@@ -34,6 +35,15 @@ abstract class DrydockLogController
|
|||||||
return $this->lease;
|
return $this->lease;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function setOperation(DrydockRepositoryOperation $operation) {
|
||||||
|
$this->operation = $operation;
|
||||||
|
return $this;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getOperation() {
|
||||||
|
return $this->operation;
|
||||||
|
}
|
||||||
|
|
||||||
public function buildSideNavView() {
|
public function buildSideNavView() {
|
||||||
$nav = new AphrontSideNavFilterView();
|
$nav = new AphrontSideNavFilterView();
|
||||||
$nav->setBaseURI(new PhutilURI($this->getApplicationURI()));
|
$nav->setBaseURI(new PhutilURI($this->getApplicationURI()));
|
||||||
@@ -56,6 +66,11 @@ abstract class DrydockLogController
|
|||||||
$engine->setLease($lease);
|
$engine->setLease($lease);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
$operation = $this->getOperation();
|
||||||
|
if ($operation) {
|
||||||
|
$engine->setOperation($operation);
|
||||||
|
}
|
||||||
|
|
||||||
$engine->addNavigationItems($nav->getMenu());
|
$engine->addNavigationItems($nav->getMenu());
|
||||||
|
|
||||||
$nav->selectFilter(null);
|
$nav->selectFilter(null);
|
||||||
@@ -66,9 +81,12 @@ abstract class DrydockLogController
|
|||||||
protected function buildApplicationCrumbs() {
|
protected function buildApplicationCrumbs() {
|
||||||
$crumbs = parent::buildApplicationCrumbs();
|
$crumbs = parent::buildApplicationCrumbs();
|
||||||
|
|
||||||
|
$viewer = $this->getViewer();
|
||||||
|
|
||||||
$blueprint = $this->getBlueprint();
|
$blueprint = $this->getBlueprint();
|
||||||
$resource = $this->getResource();
|
$resource = $this->getResource();
|
||||||
$lease = $this->getLease();
|
$lease = $this->getLease();
|
||||||
|
$operation = $this->getOperation();
|
||||||
if ($blueprint) {
|
if ($blueprint) {
|
||||||
$id = $blueprint->getID();
|
$id = $blueprint->getID();
|
||||||
|
|
||||||
@@ -111,6 +129,20 @@ abstract class DrydockLogController
|
|||||||
$crumbs->addTextCrumb(
|
$crumbs->addTextCrumb(
|
||||||
pht('Logs'),
|
pht('Logs'),
|
||||||
$this->getApplicationURI("lease/{$id}/logs/"));
|
$this->getApplicationURI("lease/{$id}/logs/"));
|
||||||
|
} else if ($operation) {
|
||||||
|
$id = $operation->getID();
|
||||||
|
|
||||||
|
$crumbs->addTextCrumb(
|
||||||
|
pht('Operations'),
|
||||||
|
$this->getApplicationURI('operation/'));
|
||||||
|
|
||||||
|
$crumbs->addTextCrumb(
|
||||||
|
pht('Repository Operation %d', $id),
|
||||||
|
$this->getApplicationURI("operation/{$id}/"));
|
||||||
|
|
||||||
|
$crumbs->addTextCrumb(
|
||||||
|
pht('Logs'),
|
||||||
|
$this->getApplicationURI("operation/{$id}/logs/"));
|
||||||
}
|
}
|
||||||
|
|
||||||
return $crumbs;
|
return $crumbs;
|
||||||
|
|||||||
@@ -46,6 +46,17 @@ final class DrydockLogListController extends DrydockLogController {
|
|||||||
$engine->setLease($lease);
|
$engine->setLease($lease);
|
||||||
$this->setLease($lease);
|
$this->setLease($lease);
|
||||||
break;
|
break;
|
||||||
|
case 'operation':
|
||||||
|
$operation = id(new DrydockRepositoryOperationQuery())
|
||||||
|
->setViewer($viewer)
|
||||||
|
->withIDs(array($id))
|
||||||
|
->executeOne();
|
||||||
|
if (!$operation) {
|
||||||
|
return new Aphront404Response();
|
||||||
|
}
|
||||||
|
$engine->setOperation($operation);
|
||||||
|
$this->setOperation($operation);
|
||||||
|
break;
|
||||||
default:
|
default:
|
||||||
return new Aphront404Response();
|
return new Aphront404Response();
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -47,12 +47,24 @@ final class DrydockRepositoryOperationViewController
|
|||||||
->setUser($viewer)
|
->setUser($viewer)
|
||||||
->setOperation($operation);
|
->setOperation($operation);
|
||||||
|
|
||||||
|
$log_query = id(new DrydockLogQuery())
|
||||||
|
->withOperationPHIDs(array($operation->getPHID()));
|
||||||
|
|
||||||
|
$log_table = $this->buildLogTable($log_query)
|
||||||
|
->setHideOperations(true);
|
||||||
|
|
||||||
|
$logs = $this->buildLogBox(
|
||||||
|
$log_table,
|
||||||
|
$this->getApplicationURI("operation/{$id}/logs/query/all/"));
|
||||||
|
|
||||||
$view = id(new PHUITwoColumnView())
|
$view = id(new PHUITwoColumnView())
|
||||||
->setHeader($header)
|
->setHeader($header)
|
||||||
->setCurtain($curtain)
|
->setCurtain($curtain)
|
||||||
->addPropertySection(pht('Properties'), $properties)
|
->addPropertySection(pht('Properties'), $properties)
|
||||||
->setMainColumn(array(
|
->setMainColumn(
|
||||||
|
array(
|
||||||
$status_view,
|
$status_view,
|
||||||
|
$logs,
|
||||||
));
|
));
|
||||||
|
|
||||||
return $this->newPage()
|
return $this->newPage()
|
||||||
|
|||||||
@@ -48,8 +48,11 @@ final class DrydockResourceViewController extends DrydockResourceController {
|
|||||||
$log_query = id(new DrydockLogQuery())
|
$log_query = id(new DrydockLogQuery())
|
||||||
->withResourcePHIDs(array($resource->getPHID()));
|
->withResourcePHIDs(array($resource->getPHID()));
|
||||||
|
|
||||||
$log_box = $this->buildLogBox(
|
$log_table = $this->buildLogTable($log_query)
|
||||||
$log_query,
|
->setHideResources(true);
|
||||||
|
|
||||||
|
$logs = $this->buildLogBox(
|
||||||
|
$log_table,
|
||||||
$this->getApplicationURI("resource/{$id}/logs/query/all/"));
|
$this->getApplicationURI("resource/{$id}/logs/query/all/"));
|
||||||
|
|
||||||
$crumbs = $this->buildApplicationCrumbs();
|
$crumbs = $this->buildApplicationCrumbs();
|
||||||
@@ -86,10 +89,11 @@ final class DrydockResourceViewController extends DrydockResourceController {
|
|||||||
$view = id(new PHUITwoColumnView())
|
$view = id(new PHUITwoColumnView())
|
||||||
->setHeader($header)
|
->setHeader($header)
|
||||||
->setCurtain($curtain)
|
->setCurtain($curtain)
|
||||||
->setMainColumn(array(
|
->setMainColumn(
|
||||||
|
array(
|
||||||
$object_box,
|
$object_box,
|
||||||
$lease_box,
|
$lease_box,
|
||||||
$log_box,
|
$logs,
|
||||||
));
|
));
|
||||||
|
|
||||||
return $this->newPage()
|
return $this->newPage()
|
||||||
|
|||||||
@@ -0,0 +1,19 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
final class DrydockOperationWorkLogType extends DrydockLogType {
|
||||||
|
|
||||||
|
const LOGCONST = 'core.operation.work';
|
||||||
|
|
||||||
|
public function getLogTypeName() {
|
||||||
|
return pht('Started Work');
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getLogTypeIcon(array $data) {
|
||||||
|
return 'fa-check green';
|
||||||
|
}
|
||||||
|
|
||||||
|
public function renderLog(array $data) {
|
||||||
|
return pht('Started this operation in a working copy.');
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
27
src/applications/drydock/logtype/DrydockTextLogType.php
Normal file
27
src/applications/drydock/logtype/DrydockTextLogType.php
Normal file
@@ -0,0 +1,27 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Simple convenience log type for logging arbitrary text.
|
||||||
|
*
|
||||||
|
* Drydock logs can be given formal types, which allows them to be translated
|
||||||
|
* and filtered. If you don't particularly care about fancy logging features,
|
||||||
|
* you can use this log type to just dump some text into the log. Maybe you
|
||||||
|
* could upgrade to more formal logging later.
|
||||||
|
*/
|
||||||
|
final class DrydockTextLogType extends DrydockLogType {
|
||||||
|
|
||||||
|
const LOGCONST = 'core.text';
|
||||||
|
|
||||||
|
public function getLogTypeName() {
|
||||||
|
return pht('Text');
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getLogTypeIcon(array $data) {
|
||||||
|
return 'fa-file-text-o grey';
|
||||||
|
}
|
||||||
|
|
||||||
|
public function renderLog(array $data) {
|
||||||
|
return idx($data, 'text');
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user