Merge pull request #266 from oh-my-fish/safe-exec

Implement safe shell reloading inside omf plugin
This commit is contained in:
Justin Hileman 2016-03-24 23:26:00 -07:00
commit 2526efd9fd
6 changed files with 45 additions and 0 deletions

View File

@ -64,6 +64,12 @@ Remove a theme or package.
> Packages subscribed to `uninstall_<pkg>` events are notified before the package is removed, so custom cleanup of resources can be done. See [Uninstall](/docs/en-US/Packages.md#uninstall) for more information.
#### `omf reload`
Reload Oh My Fish and all plugins by using `exec` to replace current shell process with a brand new.
> This command try to be as safe as possible, mitigating side-effects caused by `exec` and preventing the reload in case of background processes.
#### `omf new pkg | theme` _`<name>`_
Scaffold out a new package or theme.

View File

@ -0,0 +1,18 @@
function omf.cli.reload
if not contains -- --force $argv
if count (jobs) >/dev/null ^&1
__omf.cli.reload.job_warning
return 1
end
end
omf.reload
end
function __omf.cli.reload.job_warning
echo (set_color -u)"Reload aborted. There are background jobs:"(set_color normal)
echo
jobs
echo
echo "For your safety, finish all background jobs before reloading Oh My Fish."
echo "If you are absolutely sure of what you are doing, you can bypass this check using --force."
end

View File

@ -7,6 +7,9 @@ function omf.cli.remove -a name
switch $code
case 0
echo (omf::em)"$name successfully removed."(omf::off)
# Opt-in flag for testing
set -q OMF_AUTO_RELOAD
and omf.cli.reload
case 1
echo (omf::err)"$name could not be removed."(omf::off) 1^&2
case 2

View File

@ -23,4 +23,8 @@ function omf.cli.update
for package in $packages
omf.packages.update $package
end
# Opt-in flag for testing
set -q OMF_AUTO_RELOAD
and omf.cli.reload
end

View File

@ -0,0 +1,11 @@
function omf.reload -d "Reload fish process via exec, keeping some context"
set -q CI; and return 0
history --save
set -gx dirprev $dirprev
set -gx dirnext $dirnext
set -gx dirstack $dirstack
set -gx fish_greeting ''
exec fish
end

View File

@ -40,6 +40,9 @@ function omf -d "Oh My Fish"
case "doctor"
omf.cli.doctor
case "reload"
omf.cli.reload $arguments
case "i" "install" "get"
omf.cli.install $arguments