Rote adds the following methods to the Rake module. All this cool stuff was contributed by Jonathan Paisley (<jp-www at dcs gla ac uk>)
- cache_dir
- cache_dir=
- cache_enabled=
- cache_enabled?
- cached_dependencies
- current_task
- dependencies_file
- load_cached_dependencies
- register_dependency
- save_cached_dependencies
- task_stack
Class Rake::Task
[ show source ]
# File lib/rote/cache.rb, line 30
30: def cache_dir; @cache_dir ||= ".rake_cache"; end
Directory for storing Rake dependency cache
[ show source ]
# File lib/rote/cache.rb, line 29
29: def cache_dir=(val); @cache_dir = val; end
Enable or disable dependency caching.
[ show source ]
# File lib/rote/cache.rb, line 48
48: def cache_enabled=(b); @cache_enabled = b; end
Determine whether dependency caching is enabled
[ show source ]
# File lib/rote/cache.rb, line 39
39: def cache_enabled?
40: if @cache_enabled.nil?
41: @cache_enabled = !ENV['NO_RAKE_CACHE']
42: else
43: @cache_enabled
44: end
45: end
Hash of current cached dependencies
[ show source ]
# File lib/rote/cache.rb, line 33
33: def cached_dependencies; @cached_dependencies ||= {}; end
Reference to current task being executed
[ show source ]
# File lib/rote/cache.rb, line 37
37: def current_task; task_stack.last; end
[ show source ]
# File lib/rote/cache.rb, line 31
31: def dependencies_file; File.join(cache_dir,"dependencies.yaml"); end
Use this method to dynamically register one or more files as dependencies of the currently executing task (or the specified task if non-nil).
[ show source ]
# File lib/rote/cache.rb, line 53
53: def register_dependency(deps, task = nil)
54: task = (current_task.name if current_task) unless task
55: if task then
56: file task => deps
57: (cached_dependencies[task] ||= []) << deps
58: end
59: end
Array representing current tasks being executed
[ show source ]
# File lib/rote/cache.rb, line 35
35: def task_stack; @tasks ||= []; end
Load cached dependencies, unless they‘re already loaded. This method is called during task invocation, with the effect that cached deps are loaded from yaml on the first invoke.
An at_exit handler is installed to save the dependencies when rake exits.
[ show source ]
# File lib/rote/cache.rb, line 126
126: def self.load_cached_dependencies
127: return unless !$CACHEDEPS_LOADED and Rake.cache_enabled?
128:
129: at_exit { self.save_cached_dependencies }
130:
131: return unless File.exists?(dependencies_file)
132: YAML.load(File.read(dependencies_file)).each do |task,deps|
133: deps.each do |dep|
134: register_dependency(dep, task)
135: end
136: end
137:
138: $CACHEDEPS_LOADED = true
139: end
[ show source ]
# File lib/rote/cache.rb, line 141
141: def self.save_cached_dependencies
142: return if cached_dependencies.empty? || !Rake.cache_enabled?
143:
144: mkdir_p cache_dir unless File.exists?(cache_dir)
145: deps = {}
146: cached_dependencies.each do |k,v|
147: deps[k] = v.flatten.uniq
148: end
149: File.open(dependencies_file,"w") { |fp| fp.write YAML.dump(deps) }
150: end