teapot 2.3.0 → 3.0.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/teapot/command/build.rb +4 -17
- data/lib/teapot/command/clone.rb +1 -1
- data/lib/teapot/command/fetch.rb +0 -1
- data/lib/teapot/configuration.rb +13 -4
- data/lib/teapot/context.rb +2 -2
- data/lib/teapot/loader.rb +3 -1
- data/lib/teapot/target.rb +13 -15
- data/lib/teapot/version.rb +1 -1
- data/spec/teapot/target_spec.rb +1 -10
- data/teapot.gemspec +3 -3
- metadata +8 -11
- data/lib/teapot/identity_set.rb +0 -78
- data/spec/teapot/identity_set_spec.rb +0 -94
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 74fb639fe5cc1f9596048d3a55255d8b9ed534114bb7ac4ce0a337274a93b7ec
|
4
|
+
data.tar.gz: ee891bde08844f98b972f76a77ee6427996b5b05de39ac8a0f2ca3891310ee09
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 5061e625c2c4ccdd3a698a829699a62170e0753d95bdeff9ab87790795aa960974fd0955cf4c68df815cbf5e201ac9492b6f9b11e4e2516d64385a34399bb479
|
7
|
+
data.tar.gz: 331cd7ab35e021d1720a9426332583bd8141cf79f4a5e63da90bf8d19ef2583eb1afb6338e11242ad7da64241c2c8e265ff2be8fed1c28be9e49d3ac5da60762
|
data/lib/teapot/command/build.rb
CHANGED
@@ -32,7 +32,6 @@ module Teapot
|
|
32
32
|
|
33
33
|
options do
|
34
34
|
option '-j/-l/--limit <n>', "Limit the build to <n> concurrent processes.", type: Integer
|
35
|
-
option '--only', "Only build direct dependencies."
|
36
35
|
option '-c/--continuous', "Run the build graph continually (experimental)."
|
37
36
|
end
|
38
37
|
|
@@ -50,23 +49,11 @@ module Teapot
|
|
50
49
|
end
|
51
50
|
|
52
51
|
chain = selection.chain
|
53
|
-
|
54
|
-
ordered = chain.ordered
|
55
|
-
|
56
|
-
if @options[:only]
|
57
|
-
ordered = selection.direct_targets(ordered)
|
58
|
-
end
|
52
|
+
environment = context.configuration.environment
|
59
53
|
|
60
54
|
controller = ::Build::Controller.new(logger: parent.logger, limit: @options[:limit]) do |controller|
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
if target.build
|
65
|
-
environment = target.environment(selection.configuration, chain)
|
66
|
-
|
67
|
-
controller.add_target(target, environment.flatten, self.argv)
|
68
|
-
end
|
69
|
-
end
|
55
|
+
|
56
|
+
controller.add_chain(chain, self.argv, environment)
|
70
57
|
end
|
71
58
|
|
72
59
|
walker = nil
|
@@ -91,7 +78,7 @@ module Teapot
|
|
91
78
|
end
|
92
79
|
end
|
93
80
|
|
94
|
-
return chain
|
81
|
+
return chain
|
95
82
|
end
|
96
83
|
|
97
84
|
def show_dependencies(walker)
|
data/lib/teapot/command/clone.rb
CHANGED
@@ -48,7 +48,7 @@ module Teapot
|
|
48
48
|
end
|
49
49
|
|
50
50
|
logger.info "Cloning #{@source} to #{root}...".color(:cyan)
|
51
|
-
|
51
|
+
_repository = Rugged::Repository.clone_at(@source, root.to_s, credentials: self.method(:credentials))
|
52
52
|
|
53
53
|
# Fetch the initial packages:
|
54
54
|
Fetch[].invoke(nested)
|
data/lib/teapot/command/fetch.rb
CHANGED
data/lib/teapot/configuration.rb
CHANGED
@@ -23,7 +23,7 @@ require 'set'
|
|
23
23
|
|
24
24
|
require 'yaml/store'
|
25
25
|
|
26
|
-
|
26
|
+
require 'build/dependency/set'
|
27
27
|
require_relative 'definition'
|
28
28
|
|
29
29
|
module Teapot
|
@@ -40,8 +40,8 @@ module Teapot
|
|
40
40
|
|
41
41
|
@options = DEFAULT_OPTIONS.merge(options)
|
42
42
|
|
43
|
-
@packages =
|
44
|
-
@imports =
|
43
|
+
@packages = Build::Dependency::Set.new(packages)
|
44
|
+
@imports = Build::Dependency::Set.new
|
45
45
|
|
46
46
|
@visibility = :private
|
47
47
|
|
@@ -63,6 +63,15 @@ module Teapot
|
|
63
63
|
super
|
64
64
|
end
|
65
65
|
|
66
|
+
def environment
|
67
|
+
configuration = self
|
68
|
+
|
69
|
+
Build::Environment.new(name: self.name) do
|
70
|
+
default build_path configuration.build_path
|
71
|
+
default platforms_path configuration.build_path
|
72
|
+
end
|
73
|
+
end
|
74
|
+
|
66
75
|
# Controls how the configuration is exposed in the context.
|
67
76
|
attr :visibility
|
68
77
|
|
@@ -148,7 +157,7 @@ module Teapot
|
|
148
157
|
end
|
149
158
|
|
150
159
|
# Process all import directives and return a new configuration based on the current configuration. Import directives bring packages and other import directives from the specififed configuration definition.
|
151
|
-
def traverse(configurations, imported =
|
160
|
+
def traverse(configurations, imported = Build::Dependency::Set.new, &block)
|
152
161
|
yield self # Whatever happens here, should ensure that...
|
153
162
|
|
154
163
|
@imports.each do |import|
|
data/lib/teapot/context.rb
CHANGED
@@ -32,7 +32,7 @@ module Teapot
|
|
32
32
|
|
33
33
|
@loaded = {}
|
34
34
|
|
35
|
-
load_root_package(options)
|
35
|
+
load_root_package(**options)
|
36
36
|
end
|
37
37
|
|
38
38
|
attr :root
|
@@ -102,7 +102,7 @@ module Teapot
|
|
102
102
|
|
103
103
|
private
|
104
104
|
|
105
|
-
def load_root_package(options)
|
105
|
+
def load_root_package(**options)
|
106
106
|
# Load the root package:
|
107
107
|
script = load(root_package)
|
108
108
|
|
data/lib/teapot/loader.rb
CHANGED
@@ -31,7 +31,7 @@ module Teapot
|
|
31
31
|
# Version 1.3: Added support for build-dependency library which allows options for `#depends`. The primary use case is private dependencies.
|
32
32
|
# Version 2.0: Generators removed and refactored into build.
|
33
33
|
# Version 2.3: Rework install_prefix -> build_prefix.
|
34
|
-
LOADER_VERSION = "
|
34
|
+
LOADER_VERSION = "3.0"
|
35
35
|
|
36
36
|
# Cannot load packages older than this.
|
37
37
|
MINIMUM_LOADER_VERSION = "1.0"
|
@@ -107,6 +107,8 @@ module Teapot
|
|
107
107
|
|
108
108
|
yield target
|
109
109
|
|
110
|
+
target.update_environments!
|
111
|
+
|
110
112
|
@defined << target
|
111
113
|
end
|
112
114
|
|
data/lib/teapot/target.rb
CHANGED
@@ -54,24 +54,22 @@ module Teapot
|
|
54
54
|
return @build
|
55
55
|
end
|
56
56
|
|
57
|
-
|
58
|
-
|
59
|
-
chain = chain.partial(self)
|
57
|
+
def update_environments!
|
58
|
+
return unless @build
|
60
59
|
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
end
|
65
|
-
|
66
|
-
# Merge all the environments together:
|
67
|
-
environment = Build::Environment.combine(*environments)
|
68
|
-
|
69
|
-
environment.merge do
|
70
|
-
default build_path configuration.build_path
|
60
|
+
self.provisions.each do |key, provision|
|
61
|
+
build = @build
|
62
|
+
original = provision.value
|
71
63
|
|
72
|
-
|
73
|
-
|
64
|
+
wrapper = proc do |*arguments|
|
65
|
+
self.instance_exec(*arguments, &original) if original
|
66
|
+
self.instance_exec(*arguments, &build) if build
|
67
|
+
end
|
68
|
+
|
69
|
+
provision.value = wrapper
|
74
70
|
end
|
71
|
+
|
72
|
+
@build = nil
|
75
73
|
end
|
76
74
|
end
|
77
75
|
end
|
data/lib/teapot/version.rb
CHANGED
data/spec/teapot/target_spec.rb
CHANGED
@@ -23,7 +23,7 @@ require 'teapot/context'
|
|
23
23
|
RSpec.describe Teapot::Target do
|
24
24
|
let(:root) {Build::Files::Path.new(__dir__) + "target_spec"}
|
25
25
|
|
26
|
-
it "should generate
|
26
|
+
it "should generate correct chain for configuration" do
|
27
27
|
context = Teapot::Context.new(root)
|
28
28
|
selection = context.select(["Test/TargetSpec"])
|
29
29
|
|
@@ -39,15 +39,6 @@ RSpec.describe Teapot::Target do
|
|
39
39
|
expect(chain.ordered[1].name).to be == 'Platform/generic'
|
40
40
|
expect(chain.ordered[2].name).to be == 'Test/TargetSpec'
|
41
41
|
expect(chain.ordered[2].provider).to be == target
|
42
|
-
|
43
|
-
environment = target.environment(selection.configuration, chain)
|
44
|
-
# Environment#to_hash flattens the environment and evaluates all values:
|
45
|
-
hash = environment.to_hash
|
46
|
-
|
47
|
-
expect(hash[:variant]).to be == 'debug'
|
48
|
-
expect(hash[:platform_name]).to be == 'generic'
|
49
|
-
|
50
|
-
expect(hash).to include(:buildflags, :linkflags, :build_prefix, :install_prefix, :platforms_path)
|
51
42
|
end
|
52
43
|
|
53
44
|
it "should match wildcard packages" do
|
data/teapot.gemspec
CHANGED
@@ -30,9 +30,9 @@ Gem::Specification.new do |spec|
|
|
30
30
|
|
31
31
|
spec.add_dependency "rugged"
|
32
32
|
|
33
|
-
spec.add_dependency "build", "~>
|
34
|
-
spec.add_dependency "build-files", "~> 1.
|
35
|
-
spec.add_dependency "build-dependency", "~> 1.
|
33
|
+
spec.add_dependency "build", "~> 2.0"
|
34
|
+
spec.add_dependency "build-files", "~> 1.4"
|
35
|
+
spec.add_dependency "build-dependency", "~> 1.4"
|
36
36
|
spec.add_dependency "build-uri", "~> 1.0"
|
37
37
|
spec.add_dependency "build-text", "~> 1.0"
|
38
38
|
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: teapot
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version:
|
4
|
+
version: 3.0.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Samuel Williams
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2019-02-
|
11
|
+
date: 2019-02-15 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rainbow
|
@@ -58,42 +58,42 @@ dependencies:
|
|
58
58
|
requirements:
|
59
59
|
- - "~>"
|
60
60
|
- !ruby/object:Gem::Version
|
61
|
-
version: '
|
61
|
+
version: '2.0'
|
62
62
|
type: :runtime
|
63
63
|
prerelease: false
|
64
64
|
version_requirements: !ruby/object:Gem::Requirement
|
65
65
|
requirements:
|
66
66
|
- - "~>"
|
67
67
|
- !ruby/object:Gem::Version
|
68
|
-
version: '
|
68
|
+
version: '2.0'
|
69
69
|
- !ruby/object:Gem::Dependency
|
70
70
|
name: build-files
|
71
71
|
requirement: !ruby/object:Gem::Requirement
|
72
72
|
requirements:
|
73
73
|
- - "~>"
|
74
74
|
- !ruby/object:Gem::Version
|
75
|
-
version: '1.
|
75
|
+
version: '1.4'
|
76
76
|
type: :runtime
|
77
77
|
prerelease: false
|
78
78
|
version_requirements: !ruby/object:Gem::Requirement
|
79
79
|
requirements:
|
80
80
|
- - "~>"
|
81
81
|
- !ruby/object:Gem::Version
|
82
|
-
version: '1.
|
82
|
+
version: '1.4'
|
83
83
|
- !ruby/object:Gem::Dependency
|
84
84
|
name: build-dependency
|
85
85
|
requirement: !ruby/object:Gem::Requirement
|
86
86
|
requirements:
|
87
87
|
- - "~>"
|
88
88
|
- !ruby/object:Gem::Version
|
89
|
-
version: '1.
|
89
|
+
version: '1.4'
|
90
90
|
type: :runtime
|
91
91
|
prerelease: false
|
92
92
|
version_requirements: !ruby/object:Gem::Requirement
|
93
93
|
requirements:
|
94
94
|
- - "~>"
|
95
95
|
- !ruby/object:Gem::Version
|
96
|
-
version: '1.
|
96
|
+
version: '1.4'
|
97
97
|
- !ruby/object:Gem::Dependency
|
98
98
|
name: build-uri
|
99
99
|
requirement: !ruby/object:Gem::Requirement
|
@@ -224,7 +224,6 @@ files:
|
|
224
224
|
- lib/teapot/configuration.rb
|
225
225
|
- lib/teapot/context.rb
|
226
226
|
- lib/teapot/definition.rb
|
227
|
-
- lib/teapot/identity_set.rb
|
228
227
|
- lib/teapot/loader.rb
|
229
228
|
- lib/teapot/package.rb
|
230
229
|
- lib/teapot/project.rb
|
@@ -246,7 +245,6 @@ files:
|
|
246
245
|
- spec/teapot/configuration_spec/teapot.rb
|
247
246
|
- spec/teapot/context_spec.rb
|
248
247
|
- spec/teapot/context_spec/teapot.rb
|
249
|
-
- spec/teapot/identity_set_spec.rb
|
250
248
|
- spec/teapot/target_spec.rb
|
251
249
|
- spec/teapot/target_spec/teapot.rb
|
252
250
|
- teapot.gemspec
|
@@ -285,6 +283,5 @@ test_files:
|
|
285
283
|
- spec/teapot/configuration_spec/teapot.rb
|
286
284
|
- spec/teapot/context_spec.rb
|
287
285
|
- spec/teapot/context_spec/teapot.rb
|
288
|
-
- spec/teapot/identity_set_spec.rb
|
289
286
|
- spec/teapot/target_spec.rb
|
290
287
|
- spec/teapot/target_spec/teapot.rb
|
data/lib/teapot/identity_set.rb
DELETED
@@ -1,78 +0,0 @@
|
|
1
|
-
# Copyright, 2015, by Samuel G. D. Williams. <http://www.codeotaku.com>
|
2
|
-
#
|
3
|
-
# Permission is hereby granted, free of charge, to any person obtaining a copy
|
4
|
-
# of this software and associated documentation files (the "Software"), to deal
|
5
|
-
# in the Software without restriction, including without limitation the rights
|
6
|
-
# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
7
|
-
# copies of the Software, and to permit persons to whom the Software is
|
8
|
-
# furnished to do so, subject to the following conditions:
|
9
|
-
#
|
10
|
-
# The above copyright notice and this permission notice shall be included in
|
11
|
-
# all copies or substantial portions of the Software.
|
12
|
-
#
|
13
|
-
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
14
|
-
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
15
|
-
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
16
|
-
# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
17
|
-
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
18
|
-
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
19
|
-
# THE SOFTWARE.
|
20
|
-
|
21
|
-
require 'forwardable'
|
22
|
-
|
23
|
-
module Teapot
|
24
|
-
# Very similar to a set but uses a specific callback (defaults to &:name) for object identity.
|
25
|
-
class IdentitySet
|
26
|
-
include Enumerable
|
27
|
-
|
28
|
-
def initialize(contents = [])
|
29
|
-
@table = {}
|
30
|
-
|
31
|
-
contents.each do |object|
|
32
|
-
add(object)
|
33
|
-
end
|
34
|
-
end
|
35
|
-
|
36
|
-
attr :table
|
37
|
-
|
38
|
-
def freeze
|
39
|
-
@table.freeze
|
40
|
-
|
41
|
-
super
|
42
|
-
end
|
43
|
-
|
44
|
-
def initialize_dup(other)
|
45
|
-
@table = other.table.dup
|
46
|
-
end
|
47
|
-
|
48
|
-
def identity(object)
|
49
|
-
object.name
|
50
|
-
end
|
51
|
-
|
52
|
-
def add(object)
|
53
|
-
@table[identity(object)] = object
|
54
|
-
end
|
55
|
-
|
56
|
-
alias << add
|
57
|
-
|
58
|
-
def delete(object)
|
59
|
-
@table.delete(identity(object))
|
60
|
-
end
|
61
|
-
|
62
|
-
def include?(object)
|
63
|
-
@table.include?(identity(object))
|
64
|
-
end
|
65
|
-
|
66
|
-
def each(&block)
|
67
|
-
@table.each_value(&block)
|
68
|
-
end
|
69
|
-
|
70
|
-
def slice(names)
|
71
|
-
names.collect{|name| @table[name]}
|
72
|
-
end
|
73
|
-
|
74
|
-
extend Forwardable
|
75
|
-
|
76
|
-
def_delegators :@table, :size, :empty?, :clear, :count, :[], :to_s, :inspect
|
77
|
-
end
|
78
|
-
end
|
@@ -1,94 +0,0 @@
|
|
1
|
-
# Copyright, 2012, by Samuel G. D. Williams. <http://www.codeotaku.com>
|
2
|
-
#
|
3
|
-
# Permission is hereby granted, free of charge, to any person obtaining a copy
|
4
|
-
# of this software and associated documentation files (the "Software"), to deal
|
5
|
-
# in the Software without restriction, including without limitation the rights
|
6
|
-
# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
7
|
-
# copies of the Software, and to permit persons to whom the Software is
|
8
|
-
# furnished to do so, subject to the following conditions:
|
9
|
-
#
|
10
|
-
# The above copyright notice and this permission notice shall be included in
|
11
|
-
# all copies or substantial portions of the Software.
|
12
|
-
#
|
13
|
-
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
14
|
-
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
15
|
-
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
16
|
-
# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
17
|
-
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
18
|
-
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
19
|
-
# THE SOFTWARE.
|
20
|
-
|
21
|
-
require 'teapot/identity_set'
|
22
|
-
|
23
|
-
module Teapot::IdentitySetSpec
|
24
|
-
describe Teapot::IdentitySet do
|
25
|
-
NamedObject = Struct.new(:name, :age)
|
26
|
-
|
27
|
-
let(:bob) {NamedObject.new('Bob', 10)}
|
28
|
-
let(:empty_identity_set) {Teapot::IdentitySet.new}
|
29
|
-
let(:bob_identity_set) {Teapot::IdentitySet.new([bob])}
|
30
|
-
|
31
|
-
it "should contain named objects" do
|
32
|
-
expect(bob_identity_set).to be_include bob
|
33
|
-
end
|
34
|
-
|
35
|
-
it "can enumerate all contained objects" do
|
36
|
-
expect(bob_identity_set.each.to_a).to be == [bob]
|
37
|
-
end
|
38
|
-
|
39
|
-
it "could contain items" do
|
40
|
-
expect(bob_identity_set).to_not be_empty
|
41
|
-
expect(bob_identity_set.size).to be == 1
|
42
|
-
end
|
43
|
-
|
44
|
-
it "could be empty" do
|
45
|
-
expect(empty_identity_set).to be_empty
|
46
|
-
end
|
47
|
-
|
48
|
-
it "could contain many items" do
|
49
|
-
identity_set = empty_identity_set
|
50
|
-
|
51
|
-
names = ["Apple", "Orange", "Banana", "Kiwifruit"]
|
52
|
-
|
53
|
-
names.each_with_index do |name, index|
|
54
|
-
identity_set << NamedObject.new(name, index)
|
55
|
-
end
|
56
|
-
|
57
|
-
expect(identity_set.size).to be == names.size
|
58
|
-
end
|
59
|
-
|
60
|
-
it "can be cleared" do
|
61
|
-
identity_set = bob_identity_set.dup
|
62
|
-
|
63
|
-
expect(identity_set).to_not be_empty
|
64
|
-
|
65
|
-
identity_set.clear
|
66
|
-
|
67
|
-
expect(identity_set).to be_empty
|
68
|
-
end
|
69
|
-
|
70
|
-
it "can delete items" do
|
71
|
-
identity_set = bob_identity_set.dup
|
72
|
-
|
73
|
-
expect(identity_set).to_not be_empty
|
74
|
-
|
75
|
-
identity_set.delete(bob)
|
76
|
-
|
77
|
-
expect(identity_set).to be_empty
|
78
|
-
end
|
79
|
-
|
80
|
-
it "can be frozen" do
|
81
|
-
empty_identity_set.freeze
|
82
|
-
|
83
|
-
expect(empty_identity_set).to be_frozen
|
84
|
-
end
|
85
|
-
|
86
|
-
it "can look up named items" do
|
87
|
-
expect(bob_identity_set[bob.name]).to be == bob
|
88
|
-
end
|
89
|
-
|
90
|
-
it "should have string representation" do
|
91
|
-
expect(bob_identity_set.to_s).to be =~ /Bob/
|
92
|
-
end
|
93
|
-
end
|
94
|
-
end
|