spud 0.1.1 → 0.1.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/lib/build_tools/make/make.rb +1 -1
- data/lib/build_tools/spud/file_context.rb +5 -2
- data/lib/build_tools/spud/rule.rb +98 -2
- data/lib/build_tools/spud/rule_context.rb +29 -6
- data/lib/build_tools/spud/spudfile.rb +12 -0
- data/lib/shell.rb +2 -3
- data/lib/spud.rb +5 -1
- data/lib/version.rb +3 -3
- metadata +2 -15
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: e92e76786c206e34c509f3a8829ecdb81b3773af
|
4
|
+
data.tar.gz: 1220524f9bcc66630f76b1829a1e07d4c0fbb136
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: c9865feae31740c55283771181008caa50f5b9e9530c016d09df7f29b3103add24838396e4003d12691438f4cc34d0bca9931c2aedbf11aa6da48587ccce4cfd
|
7
|
+
data.tar.gz: e95e09f69e0218b6b19ab18502ace805686e78f1503da48f735781c6a7884e210c17f8d13ab6ee5320c0a19b020f4af5d3dbffce9abb8bc5ed003f4f79793fad
|
@@ -10,12 +10,15 @@ module Spud::BuildTools
|
|
10
10
|
@rules = {}
|
11
11
|
end
|
12
12
|
|
13
|
-
def rule(name,
|
13
|
+
def rule(name, *args, &block)
|
14
14
|
name = name.to_s
|
15
|
-
|
15
|
+
files = args.select { |arg| arg.is_a?(String) }
|
16
|
+
deps = args.select { |arg| arg.is_a?(Hash) }.reduce({}) { |hash, dep| hash.merge(dep) }
|
17
|
+
@rules[name] = Rule.new(@spud, self, name, files, deps, block)
|
16
18
|
end
|
17
19
|
|
18
20
|
def method_missing(method_name, *args, &block)
|
21
|
+
method_name = method_name.to_s
|
19
22
|
rule(method_name, *args, &block)
|
20
23
|
end
|
21
24
|
end
|
@@ -1,20 +1,116 @@
|
|
1
1
|
require_relative 'file_context'
|
2
2
|
require_relative 'rule_context'
|
3
3
|
require_relative '../build_rule'
|
4
|
+
require_relative '../../error'
|
4
5
|
|
5
6
|
module Spud::BuildTools
|
6
7
|
module SpudBuild
|
7
8
|
class Rule < BuildRule
|
8
|
-
def initialize(spud, file_context, name, deps
|
9
|
+
def initialize(spud, file_context, name, files, deps, block)
|
9
10
|
@spud = spud
|
10
11
|
@file_context = file_context
|
11
12
|
@name = name
|
13
|
+
@files = files
|
12
14
|
@deps = deps
|
13
15
|
@block = block
|
14
16
|
end
|
15
17
|
|
16
18
|
def invoke(*args, **kwargs)
|
17
|
-
|
19
|
+
raise Spud::Error, "'#{@name}' is up to date" if up_to_date?
|
20
|
+
|
21
|
+
missing = required_params.length - args.length
|
22
|
+
if missing > 0
|
23
|
+
names = required_params.map { |name| "'#{name}'" }.join(', ')
|
24
|
+
arguments = missing > 1 ? 'arguments' : 'argument'
|
25
|
+
raise Spud::Error, "invocation of '#{@name}' missing required #{arguments} #{names}"
|
26
|
+
end
|
27
|
+
|
28
|
+
unless key_params?
|
29
|
+
RuleContext.new(@spud, @file_context).instance_exec(*args, &@block)
|
30
|
+
return
|
31
|
+
end
|
32
|
+
|
33
|
+
begin
|
34
|
+
RuleContext.new(@spud, @file_context).instance_exec(*args, **kwargs, &@block)
|
35
|
+
rescue ArgumentError => e
|
36
|
+
raise Spud::Error, "invocation of '#{@name}' with #{e.message}"
|
37
|
+
end
|
38
|
+
end
|
39
|
+
|
40
|
+
private
|
41
|
+
|
42
|
+
# Up to date checking
|
43
|
+
def up_to_date?
|
44
|
+
return files_up_to_date? unless files_up_to_date?.nil?
|
45
|
+
deps_up_to_date?
|
46
|
+
#files_up_to_date? && deps_up_to_date?
|
47
|
+
end
|
48
|
+
|
49
|
+
def files_up_to_date?
|
50
|
+
return nil if all_files.empty?
|
51
|
+
all_files_exist?
|
52
|
+
end
|
53
|
+
|
54
|
+
def all_files_exist?
|
55
|
+
all_files.all?(&File.method(:exist?))
|
56
|
+
end
|
57
|
+
|
58
|
+
def all_files
|
59
|
+
@files.map(&Dir.method(:glob)).flatten
|
60
|
+
end
|
61
|
+
|
62
|
+
def deps_up_to_date?
|
63
|
+
return nil if @deps.empty?
|
64
|
+
|
65
|
+
@deps.all? do |deps, targets|
|
66
|
+
targets = [targets].flatten
|
67
|
+
deps = [deps].flatten
|
68
|
+
|
69
|
+
latest_target = targets
|
70
|
+
.map(&Dir.method(:glob))
|
71
|
+
.flatten
|
72
|
+
.map(&File.method(:mtime))
|
73
|
+
.sort
|
74
|
+
.last
|
75
|
+
|
76
|
+
latest_dep = deps
|
77
|
+
.map(&Dir.method(:glob))
|
78
|
+
.flatten
|
79
|
+
.map(&File.method(:mtime))
|
80
|
+
.sort
|
81
|
+
.last
|
82
|
+
|
83
|
+
return false unless latest_target && latest_dep
|
84
|
+
latest_target > latest_dep
|
85
|
+
end
|
86
|
+
end
|
87
|
+
|
88
|
+
# Lambda
|
89
|
+
def key_params?
|
90
|
+
lam.parameters.map(&:first).include?(:key)
|
91
|
+
end
|
92
|
+
|
93
|
+
def required_params
|
94
|
+
lam.parameters.select { |p| p.first == :req }.map(&:last)
|
95
|
+
end
|
96
|
+
|
97
|
+
def lam
|
98
|
+
@lam ||= build_lam
|
99
|
+
end
|
100
|
+
|
101
|
+
def build_lam
|
102
|
+
line = @block.source_location.last - 1
|
103
|
+
line = File.read(filename).split("\n")[line]
|
104
|
+
|
105
|
+
match = /(do|{)\s*\|(?<params>[^|]+)\|/.match(line)
|
106
|
+
return -> {} unless match
|
107
|
+
|
108
|
+
param_source = match[:params]
|
109
|
+
eval("-> (#{param_source}) {}")
|
110
|
+
end
|
111
|
+
|
112
|
+
def filename
|
113
|
+
'Spudfile'
|
18
114
|
end
|
19
115
|
end
|
20
116
|
end
|
@@ -4,6 +4,10 @@ require_relative '../../error'
|
|
4
4
|
|
5
5
|
module Spud::BuildTools
|
6
6
|
module SpudBuild
|
7
|
+
def self.join_args(*args)
|
8
|
+
args.join(' ')
|
9
|
+
end
|
10
|
+
|
7
11
|
class RuleContext
|
8
12
|
def initialize(spud, file_context)
|
9
13
|
@spud = spud
|
@@ -16,10 +20,12 @@ module Spud::BuildTools
|
|
16
20
|
def sh(*args)
|
17
21
|
out = sh?(*args)
|
18
22
|
raise ShellError unless out.status.exitstatus.zero?
|
23
|
+
|
24
|
+
out
|
19
25
|
end
|
20
26
|
|
21
27
|
def sh?(*args)
|
22
|
-
cmd =
|
28
|
+
cmd = SpudBuild.join_args(*args)
|
23
29
|
puts cmd
|
24
30
|
|
25
31
|
out = Spud::Shell.cmd(cmd)
|
@@ -31,10 +37,12 @@ module Spud::BuildTools
|
|
31
37
|
def shh(*args)
|
32
38
|
out = shh?(*args)
|
33
39
|
raise ShellError unless out.status.exitstatus.zero?
|
40
|
+
|
41
|
+
out
|
34
42
|
end
|
35
43
|
|
36
44
|
def shh?(*args)
|
37
|
-
out = Spud::Shell.cmd(
|
45
|
+
out = Spud::Shell.cmd(SpudBuild.join_args(*args))
|
38
46
|
puts out
|
39
47
|
|
40
48
|
out
|
@@ -43,19 +51,34 @@ module Spud::BuildTools
|
|
43
51
|
def shhh(*args)
|
44
52
|
out = shhh?(*args)
|
45
53
|
raise ShellError, out unless out.status.exitstatus.zero?
|
54
|
+
|
55
|
+
out
|
46
56
|
end
|
47
57
|
|
48
58
|
def shhh?(*args)
|
49
|
-
Spud::Shell.cmd(
|
59
|
+
Spud::Shell.cmd(SpudBuild.join_args(*args))
|
50
60
|
end
|
51
61
|
|
52
62
|
def invoke(rule_name, *args, **kwargs)
|
53
63
|
@spud.invoke_rule(rule_name.to_s, *args, **kwargs)
|
54
64
|
end
|
55
65
|
|
56
|
-
def
|
57
|
-
|
58
|
-
|
66
|
+
def q(s)
|
67
|
+
%('#{s}')
|
68
|
+
end
|
69
|
+
|
70
|
+
def qq(s)
|
71
|
+
%("#{s}")
|
72
|
+
end
|
73
|
+
|
74
|
+
def method_missing(method_name, *args)
|
75
|
+
method_name = method_name.to_s
|
76
|
+
|
77
|
+
if method_name.end_with?('?')
|
78
|
+
sh?(method_name.chomp('?'), *args)
|
79
|
+
else
|
80
|
+
sh(method_name, *args)
|
81
|
+
end
|
59
82
|
end
|
60
83
|
end
|
61
84
|
end
|
data/lib/shell.rb
CHANGED
data/lib/spud.rb
CHANGED
@@ -25,6 +25,7 @@ module Spud
|
|
25
25
|
raise e if options[:debug]
|
26
26
|
|
27
27
|
rescue Error => e
|
28
|
+
raise e if options[:debug]
|
28
29
|
puts e.message
|
29
30
|
exit(1)
|
30
31
|
|
@@ -47,7 +48,10 @@ module Spud
|
|
47
48
|
end
|
48
49
|
|
49
50
|
def build_tools
|
50
|
-
@build_tools ||= BuildTools::BUILD_TOOLS
|
51
|
+
@build_tools ||= BuildTools::BUILD_TOOLS
|
52
|
+
.reverse
|
53
|
+
.map { |tool| tool.new(self) }
|
54
|
+
.each(&:mount!)
|
51
55
|
end
|
52
56
|
|
53
57
|
# Args
|
data/lib/version.rb
CHANGED
@@ -1,3 +1,3 @@
|
|
1
|
-
module Spud
|
2
|
-
|
3
|
-
end
|
1
|
+
module Spud
|
2
|
+
VERSION = '0.1.3'
|
3
|
+
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: spud
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.3
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Andrew Booth
|
@@ -24,20 +24,6 @@ dependencies:
|
|
24
24
|
- - ~>
|
25
25
|
- !ruby/object:Gem::Version
|
26
26
|
version: '1.17'
|
27
|
-
- !ruby/object:Gem::Dependency
|
28
|
-
name: rake
|
29
|
-
requirement: !ruby/object:Gem::Requirement
|
30
|
-
requirements:
|
31
|
-
- - ~>
|
32
|
-
- !ruby/object:Gem::Version
|
33
|
-
version: '10.0'
|
34
|
-
type: :development
|
35
|
-
prerelease: false
|
36
|
-
version_requirements: !ruby/object:Gem::Requirement
|
37
|
-
requirements:
|
38
|
-
- - ~>
|
39
|
-
- !ruby/object:Gem::Version
|
40
|
-
version: '10.0'
|
41
27
|
- !ruby/object:Gem::Dependency
|
42
28
|
name: rspec
|
43
29
|
requirement: !ruby/object:Gem::Requirement
|
@@ -68,6 +54,7 @@ files:
|
|
68
54
|
- lib/build_tools/spud/rule_context.rb
|
69
55
|
- lib/build_tools/spud/spud.rb
|
70
56
|
- lib/build_tools/spud/rule.rb
|
57
|
+
- lib/build_tools/spud/spudfile.rb
|
71
58
|
- lib/build_tools/spud/file_context.rb
|
72
59
|
- lib/build_tools/spud/shell_error.rb
|
73
60
|
- lib/build_tools/node/node.rb
|