Class: Build::Task

Inherits:
Graph::Task
  • Object
show all
Defined in:
lib/build/task.rb

Overview

This task class serves as the base class for the environment specific task classes genearted when adding targets.

Defined Under Namespace

Classes: CommandFailure

Instance Method Summary collapse

Constructor Details

#initialize(walker, node, group, logger: nil) ⇒ Task

Returns a new instance of Task.



49
50
51
52
53
54
55
# File 'lib/build/task.rb', line 49

def initialize(walker, node, group, logger: nil)
	super(walker, node)
	
	@group = group
	
	@logger = logger || Logger.new($stderr)
end

Instance Method Details

#cp(source_path, destination_path) ⇒ Object



87
88
89
90
91
92
# File 'lib/build/task.rb', line 87

def cp(source_path, destination_path)
	return unless wet?
	
	@logger.info('shell'){ ['cp', source_path, destination_path]}
	FileUtils.copy(source_path, destination_path)
end

#fsObject

Legacy FileUtils access, replaced with direct function calls.



119
120
121
# File 'lib/build/task.rb', line 119

def fs
	self
end

#install(source_path, destination_path) ⇒ Object



111
112
113
114
115
116
# File 'lib/build/task.rb', line 111

def install(source_path, destination_path)
	return unless wet?
	
	@logger.info('shell'){ ['install', source_path, destination_path]}
	FileUtils.install(source_path, destination_path)
end

#invoke_rule(rule, arguments, &block) ⇒ Object



127
128
129
130
131
132
133
134
135
136
137
138
# File 'lib/build/task.rb', line 127

def invoke_rule(rule, arguments, &block)
	arguments = rule.normalize(arguments, self)
	
	@logger.debug('invoke') {"-> #{rule}(#{arguments.inspect})"}
	
	node = RuleNode.new(rule, arguments, &block)
	task = invoke(node)
	
	@logger.debug('invoke') {"<- #{rule}(...) -> #{rule.result(arguments)}"}
	
	return rule.result(arguments)
end

#mkpath(path) ⇒ Object



101
102
103
104
105
106
107
108
109
# File 'lib/build/task.rb', line 101

def mkpath(path)
	return unless wet?
	
	unless File.exist?(path)
		@logger.info('shell'){ ['mkpath', path] }
		
		FileUtils.mkpath(path)
	end
end

#rm(path) ⇒ Object



94
95
96
97
98
99
# File 'lib/build/task.rb', line 94

def rm(path)
	return unless wet?
	
	@logger.info('shell'){ ['rm -rf', path] }
	FileUtils.rm_rf(path)
end

#run!(*arguments) ⇒ Object



76
77
78
# File 'lib/build/task.rb', line 76

def run!(*arguments)
	self.spawn(shell_environment, *arguments)
end

#shell_environmentObject



72
73
74
# File 'lib/build/task.rb', line 72

def shell_environment
	@shell_environment ||= environment.flatten.export
end

#spawn(*arguments) ⇒ Object



61
62
63
64
65
66
67
68
69
70
# File 'lib/build/task.rb', line 61

def spawn(*arguments)
	if wet?
		@logger.info('shell') {arguments}
		status = @group.spawn(*arguments)
		
		if status != 0
			raise CommandFailure.new(self, arguments, status)
		end
	end
end

#touch(path) ⇒ Object



80
81
82
83
84
85
# File 'lib/build/task.rb', line 80

def touch(path)
	return unless wet?
	
	@logger.info('shell'){ ['touch', path] }
	FileUtils.touch(path)
end

#updateObject



123
124
125
# File 'lib/build/task.rb', line 123

def update
	@node.apply!(self)
end

#wet?Boolean

Returns:

  • (Boolean)


57
58
59
# File 'lib/build/task.rb', line 57

def wet?
	@node.dirty?
end