spud 0.1.3 → 0.1.5
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 +5 -5
- data/lib/args.rb +5 -3
- data/lib/build_tools/build_rule.rb +4 -0
- data/lib/build_tools/make/make.rb +4 -0
- data/lib/build_tools/spud/file_context.rb +15 -6
- data/lib/build_tools/spud/rule.rb +4 -6
- data/lib/build_tools/spud/rule_context.rb +15 -38
- data/lib/build_tools/spud/spud.rb +12 -6
- data/lib/spud.rb +80 -6
- data/lib/version.rb +3 -3
- metadata +16 -18
- data/lib/build_tools/spud/spudfile.rb +0 -12
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
|
-
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: 9e652aed39adb3e3628284a91a99a667a28bef656910b92a95d8b70dc65243e7
|
4
|
+
data.tar.gz: df1335045f4539dd82290561d183ff296995027c2d609c232b7d0d92a60cb535
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 2dbca45c10d578522152d312cb1b7918488361699242e5295a81109fd089ff9d854920a3d1278b9c957fb03014ca1cc7a21b45e2be4a7df1c08ffadb8800a508
|
7
|
+
data.tar.gz: 9503fb318c69e8608d0577160a8b639d61cefd5f0921562b4acea5f39ba4dab639a3266eac073c7d13ffa87208eecfe87d61b52f6e116e358d4a41f240f49acb
|
data/lib/args.rb
CHANGED
@@ -9,9 +9,10 @@ module Spud
|
|
9
9
|
|
10
10
|
def default_options
|
11
11
|
{
|
12
|
+
help: false,
|
13
|
+
version: false,
|
14
|
+
watches: [],
|
12
15
|
debug: false,
|
13
|
-
list: false,
|
14
|
-
version: false
|
15
16
|
}
|
16
17
|
end
|
17
18
|
|
@@ -19,8 +20,9 @@ module Spud
|
|
19
20
|
arg = args[index]
|
20
21
|
|
21
22
|
case arg
|
23
|
+
when '-h', '--help' then [options.merge(help: true), index + 1]
|
22
24
|
when '-v', '--version' then [options.merge(version: true), index + 1]
|
23
|
-
when '-
|
25
|
+
when '-w', '--watch' then [options.merge(watches: options[:watches] + [args[index + 1]]), index + 2]
|
24
26
|
when '--debug' then [options.merge(debug: true), index + 1]
|
25
27
|
else raise Error, "invalid option '#{arg}'"
|
26
28
|
end
|
@@ -5,21 +5,30 @@ module Spud::BuildTools
|
|
5
5
|
class FileContext
|
6
6
|
attr_reader :rules
|
7
7
|
|
8
|
-
def initialize(spud)
|
8
|
+
def initialize(spud, filename)
|
9
9
|
@spud = spud
|
10
|
+
@filename = filename
|
10
11
|
@rules = {}
|
11
12
|
end
|
12
13
|
|
13
14
|
def rule(name, *args, &block)
|
14
|
-
name = name.to_s
|
15
15
|
files = args.select { |arg| arg.is_a?(String) }
|
16
16
|
deps = args.select { |arg| arg.is_a?(Hash) }.reduce({}) { |hash, dep| hash.merge(dep) }
|
17
|
-
|
17
|
+
|
18
|
+
name = prefix_rule(name)
|
19
|
+
@rules[name] = Rule.new(@spud, self, @filename, name, files, deps, block)
|
20
|
+
end
|
21
|
+
|
22
|
+
def method_missing(name, *args, &block)
|
23
|
+
rule(name, *args, &block)
|
24
|
+
end
|
25
|
+
|
26
|
+
def prefix_rule(name)
|
27
|
+
"#{prefix}#{name}"
|
18
28
|
end
|
19
29
|
|
20
|
-
def
|
21
|
-
|
22
|
-
rule(method_name, *args, &block)
|
30
|
+
def prefix
|
31
|
+
@prefix ||= @filename == 'Spudfile' ? '' : "#{File.basename(@filename, '.rb')}."
|
23
32
|
end
|
24
33
|
end
|
25
34
|
end
|
@@ -6,9 +6,12 @@ require_relative '../../error'
|
|
6
6
|
module Spud::BuildTools
|
7
7
|
module SpudBuild
|
8
8
|
class Rule < BuildRule
|
9
|
-
|
9
|
+
attr_reader :filename
|
10
|
+
|
11
|
+
def initialize(spud, file_context, filename, name, files, deps, block)
|
10
12
|
@spud = spud
|
11
13
|
@file_context = file_context
|
14
|
+
@filename = filename
|
12
15
|
@name = name
|
13
16
|
@files = files
|
14
17
|
@deps = deps
|
@@ -43,7 +46,6 @@ module Spud::BuildTools
|
|
43
46
|
def up_to_date?
|
44
47
|
return files_up_to_date? unless files_up_to_date?.nil?
|
45
48
|
deps_up_to_date?
|
46
|
-
#files_up_to_date? && deps_up_to_date?
|
47
49
|
end
|
48
50
|
|
49
51
|
def files_up_to_date?
|
@@ -108,10 +110,6 @@ module Spud::BuildTools
|
|
108
110
|
param_source = match[:params]
|
109
111
|
eval("-> (#{param_source}) {}")
|
110
112
|
end
|
111
|
-
|
112
|
-
def filename
|
113
|
-
'Spudfile'
|
114
|
-
end
|
115
113
|
end
|
116
114
|
end
|
117
115
|
end
|
@@ -4,10 +4,6 @@ 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
|
-
|
11
7
|
class RuleContext
|
12
8
|
def initialize(spud, file_context)
|
13
9
|
@spud = spud
|
@@ -17,68 +13,49 @@ module Spud::BuildTools
|
|
17
13
|
end
|
18
14
|
end
|
19
15
|
|
20
|
-
def sh(
|
21
|
-
out = sh?(
|
16
|
+
def sh(cmd)
|
17
|
+
out = sh?(cmd)
|
22
18
|
raise ShellError unless out.status.exitstatus.zero?
|
23
19
|
|
24
20
|
out
|
25
21
|
end
|
26
22
|
|
27
|
-
def sh?(
|
28
|
-
cmd = SpudBuild.join_args(*args)
|
23
|
+
def sh?(cmd)
|
29
24
|
puts cmd
|
30
25
|
|
31
26
|
out = Spud::Shell.cmd(cmd)
|
32
|
-
puts out
|
27
|
+
puts out unless out.empty?
|
33
28
|
|
34
29
|
out
|
35
30
|
end
|
36
31
|
|
37
|
-
def shh(
|
38
|
-
out = shh?(
|
32
|
+
def shh(cmd)
|
33
|
+
out = shh?(cmd)
|
39
34
|
raise ShellError unless out.status.exitstatus.zero?
|
40
35
|
|
41
36
|
out
|
42
37
|
end
|
43
38
|
|
44
|
-
def shh?(
|
45
|
-
out = Spud::Shell.cmd(
|
46
|
-
puts out
|
39
|
+
def shh?(cmd)
|
40
|
+
out = Spud::Shell.cmd(cmd)
|
41
|
+
puts out unless out.empty?
|
47
42
|
|
48
43
|
out
|
49
44
|
end
|
50
45
|
|
51
|
-
def shhh(
|
52
|
-
out = shhh?(
|
46
|
+
def shhh(cmd)
|
47
|
+
out = shhh?(cmd)
|
53
48
|
raise ShellError, out unless out.status.exitstatus.zero?
|
54
49
|
|
55
50
|
out
|
56
51
|
end
|
57
52
|
|
58
|
-
def shhh?(
|
59
|
-
Spud::Shell.cmd(
|
53
|
+
def shhh?(cmd)
|
54
|
+
Spud::Shell.cmd(cmd)
|
60
55
|
end
|
61
56
|
|
62
|
-
def invoke(
|
63
|
-
@spud.
|
64
|
-
end
|
65
|
-
|
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
|
57
|
+
def invoke(name, *args, **kwargs)
|
58
|
+
@spud.invoke(name, *args, **kwargs)
|
82
59
|
end
|
83
60
|
end
|
84
61
|
end
|
@@ -4,14 +4,20 @@ require_relative 'file_context'
|
|
4
4
|
module Spud::BuildTools
|
5
5
|
module SpudBuild
|
6
6
|
class Build < BuildTool
|
7
|
+
attr_reader :rules
|
8
|
+
|
7
9
|
def mount!
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
10
|
+
filenames = Dir.glob('Spudfile')
|
11
|
+
filenames += Dir.glob('spuds/*.rb')
|
12
|
+
|
13
|
+
@rules = {}
|
14
|
+
filenames.each do |filename|
|
15
|
+
source = File.read(filename)
|
16
|
+
@ctx = FileContext.new(@spud, filename)
|
17
|
+
@ctx.instance_eval(source)
|
12
18
|
|
13
|
-
|
14
|
-
|
19
|
+
@rules.merge!(@ctx.rules)
|
20
|
+
end
|
15
21
|
end
|
16
22
|
end
|
17
23
|
end
|
data/lib/spud.rb
CHANGED
@@ -1,3 +1,5 @@
|
|
1
|
+
require 'stringio'
|
2
|
+
|
1
3
|
require_relative 'args'
|
2
4
|
require_relative 'version'
|
3
5
|
require_relative 'build_tools/build_tools'
|
@@ -10,17 +12,27 @@ module Spud
|
|
10
12
|
|
11
13
|
class Spud
|
12
14
|
def run!
|
15
|
+
if options[:help]
|
16
|
+
print_help!
|
17
|
+
return
|
18
|
+
end
|
19
|
+
|
13
20
|
if options[:version]
|
14
21
|
puts VERSION
|
15
22
|
return
|
16
23
|
end
|
17
24
|
|
18
|
-
|
19
|
-
|
25
|
+
unless rule_name
|
26
|
+
print_rules!
|
27
|
+
return
|
28
|
+
end
|
29
|
+
|
30
|
+
unless options[:watches].empty?
|
31
|
+
watch(options[:watches], rule_name, *args[:positional], **args[:keyword])
|
20
32
|
return
|
21
33
|
end
|
22
34
|
|
23
|
-
|
35
|
+
invoke(rule_name, *args[:positional], **args[:keyword])
|
24
36
|
rescue BuildTools::SpudBuild::ShellError => e
|
25
37
|
raise e if options[:debug]
|
26
38
|
|
@@ -34,12 +46,41 @@ module Spud
|
|
34
46
|
puts e.message
|
35
47
|
end
|
36
48
|
|
37
|
-
def
|
38
|
-
rule = rules[name]
|
39
|
-
raise Error, "no rule found for #{name}" unless rule
|
49
|
+
def invoke(name, *args, **kwargs)
|
50
|
+
rule = rules[name.to_s]
|
51
|
+
raise Error, "no rule found for '#{name}'" unless rule
|
40
52
|
rule.invoke(*args, **kwargs)
|
41
53
|
end
|
42
54
|
|
55
|
+
def watch(globs, name, *args, **kwargs)
|
56
|
+
rule = rules[name.to_s]
|
57
|
+
raise Error, "no rule found for '#{name}'" unless rule
|
58
|
+
|
59
|
+
timestamps = {}
|
60
|
+
loop do
|
61
|
+
begin
|
62
|
+
Dir.glob(*globs).each do |filename|
|
63
|
+
new_timestamp = File.mtime(filename)
|
64
|
+
old_timestamp = timestamps[filename]
|
65
|
+
unless old_timestamp
|
66
|
+
timestamps[filename] = new_timestamp
|
67
|
+
next
|
68
|
+
end
|
69
|
+
|
70
|
+
if new_timestamp > old_timestamp
|
71
|
+
timestamps[filename] = new_timestamp
|
72
|
+
invoke(name, *args, **kwargs)
|
73
|
+
break
|
74
|
+
end
|
75
|
+
end
|
76
|
+
|
77
|
+
sleep 0.1
|
78
|
+
rescue Interrupt
|
79
|
+
break
|
80
|
+
end
|
81
|
+
end
|
82
|
+
end
|
83
|
+
|
43
84
|
private
|
44
85
|
|
45
86
|
# Rules
|
@@ -54,6 +95,39 @@ module Spud
|
|
54
95
|
.each(&:mount!)
|
55
96
|
end
|
56
97
|
|
98
|
+
def print_rules!
|
99
|
+
table = rules.map { |name, rule| [name, rule.filename] }
|
100
|
+
table.unshift(%w[RULE FILENAME])
|
101
|
+
|
102
|
+
longest_rule = 'RULE'.length
|
103
|
+
longest_filename = 'FILENAME'.length
|
104
|
+
table.each do |(rule, filename)|
|
105
|
+
longest_rule = rule.length if rule.length > longest_rule
|
106
|
+
longest_filename = filename.length if filename.length > longest_filename
|
107
|
+
end
|
108
|
+
|
109
|
+
table.each do |(rule, filename)|
|
110
|
+
puts "#{rule.ljust(longest_rule)} #{filename.ljust(longest_filename)}"
|
111
|
+
end
|
112
|
+
end
|
113
|
+
|
114
|
+
# Help
|
115
|
+
def print_help!
|
116
|
+
help = StringIO.new
|
117
|
+
|
118
|
+
help.puts "spud #{VERSION}"
|
119
|
+
help.puts
|
120
|
+
help.puts 'usage:'
|
121
|
+
help.puts ' spud [options] <rule> [args]'
|
122
|
+
help.puts
|
123
|
+
help.puts 'options:'
|
124
|
+
help.puts ' -h, --help show this help dialog dialog'
|
125
|
+
help.puts ' -v, --version show spud version'
|
126
|
+
help.puts ' --debug run in debug mode'
|
127
|
+
|
128
|
+
puts help.string
|
129
|
+
end
|
130
|
+
|
57
131
|
# Args
|
58
132
|
def options
|
59
133
|
@options ||= args[:options]
|
data/lib/version.rb
CHANGED
@@ -1,3 +1,3 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
|
1
|
+
module Spud
|
2
|
+
VERSION = '0.1.5'
|
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.5
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Andrew Booth
|
@@ -14,28 +14,28 @@ dependencies:
|
|
14
14
|
name: bundler
|
15
15
|
requirement: !ruby/object:Gem::Requirement
|
16
16
|
requirements:
|
17
|
-
- - ~>
|
17
|
+
- - "~>"
|
18
18
|
- !ruby/object:Gem::Version
|
19
19
|
version: '1.17'
|
20
20
|
type: :development
|
21
21
|
prerelease: false
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
23
23
|
requirements:
|
24
|
-
- - ~>
|
24
|
+
- - "~>"
|
25
25
|
- !ruby/object:Gem::Version
|
26
26
|
version: '1.17'
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
28
|
name: rspec
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
30
30
|
requirements:
|
31
|
-
- - ~>
|
31
|
+
- - "~>"
|
32
32
|
- !ruby/object:Gem::Version
|
33
33
|
version: '3.0'
|
34
34
|
type: :development
|
35
35
|
prerelease: false
|
36
36
|
version_requirements: !ruby/object:Gem::Requirement
|
37
37
|
requirements:
|
38
|
-
- - ~>
|
38
|
+
- - "~>"
|
39
39
|
- !ruby/object:Gem::Version
|
40
40
|
version: '3.0'
|
41
41
|
description: Spud is a build tool, written as a ruby DSL
|
@@ -45,23 +45,22 @@ executables:
|
|
45
45
|
extensions: []
|
46
46
|
extra_rdoc_files: []
|
47
47
|
files:
|
48
|
-
-
|
48
|
+
- bin/spud
|
49
49
|
- lib/args.rb
|
50
|
-
- lib/build_tools/build_tool.rb
|
51
50
|
- lib/build_tools/build_rule.rb
|
51
|
+
- lib/build_tools/build_tool.rb
|
52
52
|
- lib/build_tools/build_tools.rb
|
53
53
|
- lib/build_tools/make/make.rb
|
54
|
-
- lib/build_tools/
|
55
|
-
- lib/build_tools/spud/spud.rb
|
56
|
-
- lib/build_tools/spud/rule.rb
|
57
|
-
- lib/build_tools/spud/spudfile.rb
|
54
|
+
- lib/build_tools/node/node.rb
|
58
55
|
- lib/build_tools/spud/file_context.rb
|
56
|
+
- lib/build_tools/spud/rule.rb
|
57
|
+
- lib/build_tools/spud/rule_context.rb
|
59
58
|
- lib/build_tools/spud/shell_error.rb
|
60
|
-
- lib/build_tools/
|
59
|
+
- lib/build_tools/spud/spud.rb
|
60
|
+
- lib/error.rb
|
61
61
|
- lib/shell.rb
|
62
|
+
- lib/spud.rb
|
62
63
|
- lib/version.rb
|
63
|
-
- lib/error.rb
|
64
|
-
- bin/spud
|
65
64
|
homepage: https://github.com/broothie/spud#readme
|
66
65
|
licenses:
|
67
66
|
- MIT
|
@@ -72,17 +71,16 @@ require_paths:
|
|
72
71
|
- lib
|
73
72
|
required_ruby_version: !ruby/object:Gem::Requirement
|
74
73
|
requirements:
|
75
|
-
- -
|
74
|
+
- - ">="
|
76
75
|
- !ruby/object:Gem::Version
|
77
76
|
version: '0'
|
78
77
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
79
78
|
requirements:
|
80
|
-
- -
|
79
|
+
- - ">="
|
81
80
|
- !ruby/object:Gem::Version
|
82
81
|
version: '0'
|
83
82
|
requirements: []
|
84
|
-
|
85
|
-
rubygems_version: 2.0.14.1
|
83
|
+
rubygems_version: 3.1.3
|
86
84
|
signing_key:
|
87
85
|
specification_version: 4
|
88
86
|
summary: A build tool
|