Archive for September, 2009

Rake completion cache

Update: new rake and capistrano bash completion

Rake task completion is awesome. A quick google search will hook you up … (here’s one)

Rake completion must invoke rake and that can be SLOW. I use completion to save time … What’s the point on having bash freeze on rake -T for longer than it would take me to type the whole thing?

I took it upon myself to cache the output of rake -T and to use that if it’s available.


function _check_rakefile() {
  if [ ! -e Rakefile ]; then

  if [ -e ".rake_t_cache" ]; then
    local tasks=`cat .rake_t_cache | awk {print $2}`
    local tasks=`rake –silent -T | awk {print $2}`

  COMPREPLY=( $(compgen -W "${tasks}" — $2) )
complete -F _check_rakefile -o default rake

The magic is in the .rake_t_cache file. If it’s there, use it, if not … well … we haven’t gained/lost anything, the regular completion behavior is still in place.

Where does .rake_t_cache come from?

function rake_cache() {
  rake -T > .rake_t_cache

function rake_cache_clear() {
  if [ -e ".rake_t_cache" ]; then
    rm .rake_t_cache

I have been thinking about a way to detect when the cache file needs to be regenerated. However, I leave it in the capable hands of the user. All the time saved completing tasks with the cache will compensate for the inevitable time when the cache will be stale and swear words will be required.

Read Full Post »