From 2277967ecf7656fa2fc03b8ae5f23a3cf92beb33 Mon Sep 17 00:00:00 2001 From: Aleksey Ivanov Date: Sun, 21 Aug 2016 19:50:44 +0200 Subject: [PATCH 1/4] Fix _tasks_changed algorithm in rake-fast plugin --- plugins/rake-fast/rake-fast.plugin.zsh | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/plugins/rake-fast/rake-fast.plugin.zsh b/plugins/rake-fast/rake-fast.plugin.zsh index 57d699abc..411d25726 100644 --- a/plugins/rake-fast/rake-fast.plugin.zsh +++ b/plugins/rake-fast/rake-fast.plugin.zsh @@ -16,11 +16,16 @@ _is_rails_app () { } _tasks_changed () { - local is_changed=1 - for file in lib/tasks/**/*.rake; do - if [[ $file -nt .rake_tasks ]]; then is_changed=0; fi + local -a paths + paths=(lib/tasks lib/tasks/**/*(N)) + + for path in $paths; do + if [[ "$path" -nt .rake_tasks ]]; then + return 0 + fi done - return is_changed + + return 1 } _rake_generate () { From 81ca3182a126025638d61d590df2f58cb6c5dc37 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marc=20Cornell=C3=A0?= Date: Sun, 21 Aug 2016 19:51:08 +0200 Subject: [PATCH 2/4] Fix syntax and formatting of rake-fast plugin --- plugins/rake-fast/rake-fast.plugin.zsh | 29 ++++++++++++-------------- 1 file changed, 13 insertions(+), 16 deletions(-) diff --git a/plugins/rake-fast/rake-fast.plugin.zsh b/plugins/rake-fast/rake-fast.plugin.zsh index 411d25726..a594ca923 100644 --- a/plugins/rake-fast/rake-fast.plugin.zsh +++ b/plugins/rake-fast/rake-fast.plugin.zsh @@ -1,18 +1,9 @@ -_rake_refresh () { - if [ -f .rake_tasks ]; then - rm .rake_tasks - fi - echo "Generating .rake_tasks..." > /dev/stderr - _rake_generate - cat .rake_tasks -} - _rake_does_task_list_need_generating () { - [[ ! -f .rake_tasks ]] || [[ Rakefile -nt .rake_tasks ]] || (_is_rails_app && _tasks_changed) + [[ ! -f .rake_tasks ]] || [[ Rakefile -nt .rake_tasks ]] || { _is_rails_app && _tasks_changed } } _is_rails_app () { - [[ -e "bin/rails" ]] || [ -e "script/rails" ] + [[ -e "bin/rails" ]] || [[ -e "script/rails" ]] } _tasks_changed () { @@ -33,14 +24,20 @@ _rake_generate () { } _rake () { - if [ -f Rakefile ]; then + if [[ -f Rakefile ]]; then if _rake_does_task_list_need_generating; then - echo "\nGenerating .rake_tasks..." > /dev/stderr + echo "\nGenerating .rake_tasks..." >&2 _rake_generate fi - compadd `cat .rake_tasks` + compadd $(cat .rake_tasks) fi } - compdef _rake rake -alias rake_refresh='_rake_refresh' + +rake_refresh () { + [[ -f .rake_tasks ]] && rm -f .rake_tasks + + echo "Generating .rake_tasks..." >&2 + _rake_generate + cat .rake_tasks +} From 59fdb2b505bc415738dc92f6188453e54bf0c45c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marc=20Cornell=C3=A0?= Date: Sun, 21 Aug 2016 20:02:55 +0200 Subject: [PATCH 3/4] Reword rake-fast README, add `lib/tasks` information --- plugins/rake-fast/README.md | 22 +++++++++++++++++----- 1 file changed, 17 insertions(+), 5 deletions(-) diff --git a/plugins/rake-fast/README.md b/plugins/rake-fast/README.md index f56142f69..1417befa1 100644 --- a/plugins/rake-fast/README.md +++ b/plugins/rake-fast/README.md @@ -2,22 +2,34 @@ Fast rake autocompletion plugin. -This script caches the output for later usage and significantly speeds it up. It generates a .rake_tasks cache file in parallel to the Rakefile. It also checks the file modification dates to see if it needs to regenerate the cache file. +This plugin caches the output for later usage and significantly speeds it up. +It generates a `.rake_tasks` cache file in parallel to the Rakefile. It also +checks the file modification time to see if it needs to regenerate the cache +file. -This is entirely based on [this pull request by Ullrich Schäfer](https://github.com/robb/.dotfiles/pull/10/), which is inspired by [this Ruby on Rails trick from 2006](http://weblog.rubyonrails.org/2006/3/9/fast-rake-task-completion-for-zsh/). +This is entirely based on [this pull request by Ullrich Schäfer](https://github.com/robb/.dotfiles/pull/10/), +which is inspired by [this Ruby on Rails trick from 2006](http://weblog.rubyonrails.org/2006/3/9/fast-rake-task-completion-for-zsh/). Think about that. 2006. +---------- + +Since August of 2016, it also checks if it's in a Rails project and looks at +rake files inside `lib/tasks` and their modification time to know if the +cache file needs to be regenerated. + ## Installation Just add the plugin to your `.zshrc`: -```bash -plugins=(foo bar rake-fast) +```zsh +plugins=(... rake-fast) ``` You might consider adding `.rake_tasks` to your [global .gitignore](https://help.github.com/articles/ignoring-files#global-gitignore) ## Usage -`rake`, then press tab +Type `rake`, then press tab. + +If you want to force the regeneration of the `.rake_tasks` file, run `rake_refresh`. From abf73bb626cbe645e23f205583631330c9fbabd4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marc=20Cornell=C3=A0?= Date: Mon, 29 Aug 2016 08:37:09 +0200 Subject: [PATCH 4/4] rake-fast: change variable name from `$path' to `$file' This solves a problem of using the variable name `$path' which then smashes the environment variable `$PATH' and messes up the session. See https://github.com/robbyrussell/oh-my-zsh/pull/5343#issuecomment-243043098 --- plugins/rake-fast/rake-fast.plugin.zsh | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/plugins/rake-fast/rake-fast.plugin.zsh b/plugins/rake-fast/rake-fast.plugin.zsh index a594ca923..ca80d86e1 100644 --- a/plugins/rake-fast/rake-fast.plugin.zsh +++ b/plugins/rake-fast/rake-fast.plugin.zsh @@ -7,11 +7,11 @@ _is_rails_app () { } _tasks_changed () { - local -a paths - paths=(lib/tasks lib/tasks/**/*(N)) + local -a files + files=(lib/tasks lib/tasks/**/*(N)) - for path in $paths; do - if [[ "$path" -nt .rake_tasks ]]; then + for file in $files; do + if [[ "$file" -nt .rake_tasks ]]; then return 0 fi done