diff --git a/resources/celerity/map.php b/resources/celerity/map.php index 911442ff70..5c4096f26e 100644 --- a/resources/celerity/map.php +++ b/resources/celerity/map.php @@ -7,7 +7,7 @@ */ return array( 'names' => array( - 'core.pkg.css' => '44623ac2', + 'core.pkg.css' => '4e2c8d53', 'core.pkg.js' => '23d653bb', 'darkconsole.pkg.js' => '8ab24e01', 'differential.pkg.css' => '14f0fa92', @@ -38,14 +38,13 @@ return array( 'rsrc/css/application/base/main-menu-view.css' => 'f9f5cd1b', 'rsrc/css/application/base/notification-menu.css' => '6aa0a74b', 'rsrc/css/application/base/phabricator-application-launch-view.css' => '16ca323f', - 'rsrc/css/application/base/standard-page-view.css' => 'df338a4b', + 'rsrc/css/application/base/standard-page-view.css' => '60d0df9a', 'rsrc/css/application/chatlog/chatlog.css' => '852140ff', 'rsrc/css/application/config/config-options.css' => '7fedf08b', 'rsrc/css/application/config/config-template.css' => '8e6c6fcd', 'rsrc/css/application/config/config-welcome.css' => 'b0d16200', 'rsrc/css/application/config/setup-issue.css' => '22270af2', 'rsrc/css/application/config/unhandled-exception.css' => '37d4f9a2', - 'rsrc/css/application/conpherence/durable-column.css' => '12846d25', 'rsrc/css/application/conpherence/menu.css' => '73774137', 'rsrc/css/application/conpherence/message-pane.css' => '17a9517f', 'rsrc/css/application/conpherence/notification.css' => '04a6e10a', @@ -78,7 +77,7 @@ return array( 'rsrc/css/application/maniphest/task-summary.css' => 'ab2fc691', 'rsrc/css/application/objectselector/object-selector.css' => '029a133d', 'rsrc/css/application/owners/owners-path-editor.css' => '2f00933b', - 'rsrc/css/application/paste/paste.css' => 'eb997ddd', + 'rsrc/css/application/paste/paste.css' => 'aa1767d1', 'rsrc/css/application/people/people-profile.css' => '25970776', 'rsrc/css/application/phame/phame.css' => 'db5682e3', 'rsrc/css/application/pholio/pholio-edit.css' => '3ad9d1ee', @@ -87,7 +86,7 @@ return array( 'rsrc/css/application/phortune/phortune-credit-card-form.css' => 'b25b4beb', 'rsrc/css/application/phortune/phortune.css' => '9149f103', 'rsrc/css/application/phrequent/phrequent.css' => 'ffc185ad', - 'rsrc/css/application/phriction/phriction-document-css.css' => '0d16bc9a', + 'rsrc/css/application/phriction/phriction-document-css.css' => '7d7f0071', 'rsrc/css/application/policy/policy-edit.css' => '815c66f7', 'rsrc/css/application/policy/policy-transaction-detail.css' => '82100a43', 'rsrc/css/application/policy/policy.css' => '957ea14c', @@ -116,7 +115,7 @@ return array( 'rsrc/css/layout/phabricator-filetree-view.css' => 'fccf9f82', 'rsrc/css/layout/phabricator-hovercard-view.css' => '893f4783', 'rsrc/css/layout/phabricator-side-menu-view.css' => '7e8c6341', - 'rsrc/css/layout/phabricator-source-code-view.css' => '2ceee894', + 'rsrc/css/layout/phabricator-source-code-view.css' => '7d346aa4', 'rsrc/css/phui/calendar/phui-calendar-day.css' => 'de035c8a', 'rsrc/css/phui/calendar/phui-calendar-list.css' => 'c1d0ca59', 'rsrc/css/phui/calendar/phui-calendar-month.css' => 'a92e47d2', @@ -516,7 +515,6 @@ return array( 'changeset-view-manager' => '5eb5b98c', 'config-options-css' => '7fedf08b', 'config-welcome-css' => 'b0d16200', - 'conpherence-durable-column-view' => '12846d25', 'conpherence-menu-css' => '73774137', 'conpherence-message-pane-css' => '17a9517f', 'conpherence-notification-css' => '04a6e10a', @@ -709,7 +707,7 @@ return array( 'multirow-row-manager' => 'b5d57730', 'owners-path-editor' => 'aa1733d0', 'owners-path-editor-css' => '2f00933b', - 'paste-css' => 'eb997ddd', + 'paste-css' => 'aa1767d1', 'path-typeahead' => 'f7fc67ec', 'people-profile-css' => '25970776', 'phabricator-action-list-view-css' => '9ee9910a', @@ -745,8 +743,8 @@ return array( 'phabricator-shaped-request' => '7cbe244b', 'phabricator-side-menu-view-css' => '7e8c6341', 'phabricator-slowvote-css' => '266df6a1', - 'phabricator-source-code-view-css' => '2ceee894', - 'phabricator-standard-page-view' => 'df338a4b', + 'phabricator-source-code-view-css' => '7d346aa4', + 'phabricator-standard-page-view' => '60d0df9a', 'phabricator-textareautils' => '5c93c52c', 'phabricator-title' => '5c1c758c', 'phabricator-tooltip' => '1d298e3a', @@ -771,7 +769,7 @@ return array( 'phortune-credit-card-form-css' => 'b25b4beb', 'phortune-css' => '9149f103', 'phrequent-css' => 'ffc185ad', - 'phriction-document-css' => '0d16bc9a', + 'phriction-document-css' => '7d7f0071', 'phui-action-header-view-css' => '89c497e7', 'phui-action-panel-css' => '3ee9afd5', 'phui-box-css' => '7b3a2eed', diff --git a/src/__phutil_library_map__.php b/src/__phutil_library_map__.php index 3267b1b506..7e6e23abdc 100644 --- a/src/__phutil_library_map__.php +++ b/src/__phutil_library_map__.php @@ -1614,6 +1614,7 @@ phutil_register_library_map(array( 'PhabricatorDaemonManagementLaunchWorkflow' => 'applications/daemon/management/PhabricatorDaemonManagementLaunchWorkflow.php', 'PhabricatorDaemonManagementListWorkflow' => 'applications/daemon/management/PhabricatorDaemonManagementListWorkflow.php', 'PhabricatorDaemonManagementLogWorkflow' => 'applications/daemon/management/PhabricatorDaemonManagementLogWorkflow.php', + 'PhabricatorDaemonManagementReloadWorkflow' => 'applications/daemon/management/PhabricatorDaemonManagementReloadWorkflow.php', 'PhabricatorDaemonManagementRestartWorkflow' => 'applications/daemon/management/PhabricatorDaemonManagementRestartWorkflow.php', 'PhabricatorDaemonManagementStartWorkflow' => 'applications/daemon/management/PhabricatorDaemonManagementStartWorkflow.php', 'PhabricatorDaemonManagementStatusWorkflow' => 'applications/daemon/management/PhabricatorDaemonManagementStatusWorkflow.php', @@ -4877,6 +4878,7 @@ phutil_register_library_map(array( 'PhabricatorDaemonManagementLaunchWorkflow' => 'PhabricatorDaemonManagementWorkflow', 'PhabricatorDaemonManagementListWorkflow' => 'PhabricatorDaemonManagementWorkflow', 'PhabricatorDaemonManagementLogWorkflow' => 'PhabricatorDaemonManagementWorkflow', + 'PhabricatorDaemonManagementReloadWorkflow' => 'PhabricatorDaemonManagementWorkflow', 'PhabricatorDaemonManagementRestartWorkflow' => 'PhabricatorDaemonManagementWorkflow', 'PhabricatorDaemonManagementStartWorkflow' => 'PhabricatorDaemonManagementWorkflow', 'PhabricatorDaemonManagementStatusWorkflow' => 'PhabricatorDaemonManagementWorkflow', diff --git a/src/applications/daemon/management/PhabricatorDaemonManagementReloadWorkflow.php b/src/applications/daemon/management/PhabricatorDaemonManagementReloadWorkflow.php new file mode 100644 index 0000000000..4a7d9a764d --- /dev/null +++ b/src/applications/daemon/management/PhabricatorDaemonManagementReloadWorkflow.php @@ -0,0 +1,27 @@ +setName('reload') + ->setSynopsis( + pht( + 'Gracefully restart daemon processes in-place to pick up changes '. + 'to source. This will not disrupt running jobs. This is an '. + 'advanced workflow; most installs should use __phd restart__.')) + ->setArguments( + array( + array( + 'name' => 'pids', + 'wildcard' => true, + ), + )); + } + + public function execute(PhutilArgumentParser $args) { + return $this->executeReloadCommand($args->getArg('pids')); + } + +} diff --git a/src/applications/daemon/management/PhabricatorDaemonManagementWorkflow.php b/src/applications/daemon/management/PhabricatorDaemonManagementWorkflow.php index c21275b1df..d922b7cbf0 100644 --- a/src/applications/daemon/management/PhabricatorDaemonManagementWorkflow.php +++ b/src/applications/daemon/management/PhabricatorDaemonManagementWorkflow.php @@ -389,28 +389,7 @@ abstract class PhabricatorDaemonManagementWorkflow return 0; } - $running_pids = array_fuse(mpull($daemons, 'getPID')); - if (!$pids) { - $stop_pids = $running_pids; - } else { - // We were given a PID or set of PIDs to kill. - $stop_pids = array(); - foreach ($pids as $key => $pid) { - if (!preg_match('/^\d+$/', $pid)) { - $console->writeErr(pht("PID '%s' is not a valid PID.", $pid)."\n"); - continue; - } else if (empty($running_pids[$pid])) { - $console->writeErr( - pht( - 'PID "%d" is not a known Phabricator daemon PID. It will not '. - 'be killed.', - $pid)."\n"); - continue; - } else { - $stop_pids[$pid] = $pid; - } - } - } + $stop_pids = $this->selectDaemonPIDs($daemons, $pids); if (!$stop_pids) { $console->writeErr(pht('No daemons to kill.')."\n"); @@ -452,6 +431,35 @@ abstract class PhabricatorDaemonManagementWorkflow return 0; } + protected final function executeReloadCommand(array $pids) { + $console = PhutilConsole::getConsole(); + + $daemons = $this->loadRunningDaemons(); + if (!$daemons) { + $console->writeErr( + "%s\n", + pht('There are no running daemons to reload.')); + return 0; + } + + $reload_pids = $this->selectDaemonPIDs($daemons, $pids); + if (!$reload_pids) { + $console->writeErr( + "%s\n", + pht('No daemons to reload.')); + return 0; + } + + foreach ($reload_pids as $pid) { + $console->writeOut( + "%s\n", + pht('Reloading process %d...', $pid)); + posix_kill($pid, SIGHUP); + } + + return 0; + } + private function processRogueDaemons($grace_period, $warn, $force_stop) { $console = PhutilConsole::getConsole(); @@ -615,4 +623,33 @@ abstract class PhabricatorDaemonManagementWorkflow ); } + private function selectDaemonPIDs(array $daemons, array $pids) { + $console = PhutilConsole::getConsole(); + + $running_pids = array_fuse(mpull($daemons, 'getPID')); + if (!$pids) { + $select_pids = $running_pids; + } else { + // We were given a PID or set of PIDs to kill. + $select_pids = array(); + foreach ($pids as $key => $pid) { + if (!preg_match('/^\d+$/', $pid)) { + $console->writeErr(pht("PID '%s' is not a valid PID.", $pid)."\n"); + continue; + } else if (empty($running_pids[$pid])) { + $console->writeErr( + "%s\n", + pht( + 'PID "%d" is not a known Phabricator daemon PID.', + $pid)); + continue; + } else { + $select_pids[$pid] = $pid; + } + } + } + + return $select_pids; + } + }