lock_jar 0.13.0 → 0.14.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.codeclimate.yml +16 -0
- data/.rubocop.yml +28 -0
- data/.travis.yml +12 -1
- data/Gemfile +6 -3
- data/Guardfile +2 -3
- data/README.md +17 -16
- data/Rakefile +11 -7
- data/lib/lock_jar/buildr.rb +95 -89
- data/lib/lock_jar/bundler.rb +85 -84
- data/lib/lock_jar/class_loader.rb +19 -21
- data/lib/lock_jar/cli.rb +32 -25
- data/lib/lock_jar/domain/artifact.rb +39 -45
- data/lib/lock_jar/domain/dsl.rb +50 -79
- data/lib/lock_jar/domain/dsl_merger.rb +76 -0
- data/lib/lock_jar/domain/gem_dsl.rb +10 -12
- data/lib/lock_jar/domain/jarfile_dsl.rb +6 -18
- data/lib/lock_jar/domain/lockfile.rb +17 -24
- data/lib/lock_jar/logging.rb +4 -3
- data/lib/lock_jar/maven.rb +29 -29
- data/lib/lock_jar/registry.rb +52 -60
- data/lib/lock_jar/resolver.rb +17 -20
- data/lib/lock_jar/runtime/install.rb +28 -0
- data/lib/lock_jar/runtime/list.rb +55 -0
- data/lib/lock_jar/runtime/load.rb +54 -0
- data/lib/lock_jar/runtime/lock.rb +152 -0
- data/lib/lock_jar/runtime.rb +30 -302
- data/lib/lock_jar/version.rb +2 -1
- data/lib/lock_jar.rb +137 -105
- data/lock_jar.gemspec +7 -4
- data/spec/fixtures/jarfile_gem/Gemfile +4 -0
- data/spec/fixtures/jarfile_gem/Jarfile +1 -0
- data/spec/fixtures/jarfile_gem/jarfile_gem.gemspec +23 -0
- data/spec/fixtures/jarfile_gem/lib/jarfile_gem/version.rb +3 -0
- data/spec/fixtures/jarfile_gem/lib/jarfile_gem.rb +5 -0
- data/spec/lock_jar/bundler_spec.rb +27 -0
- data/spec/lock_jar/class_loader_spec.rb +34 -36
- data/spec/lock_jar/cli_spec.rb +39 -46
- data/spec/lock_jar/domain/dsl_merger_spec.rb +49 -0
- data/spec/lock_jar/domain/dsl_spec.rb +35 -37
- data/spec/lock_jar/domain/gem_dsl_spec.rb +18 -0
- data/spec/lock_jar/maven_spec.rb +9 -11
- data/spec/lock_jar/resolver_spec.rb +16 -17
- data/spec/lock_jar/runtime_spec.rb +17 -13
- data/spec/lock_jar_spec.rb +255 -195
- data/spec/spec_helper.rb +13 -8
- data/spec/support/helper.rb +13 -5
- data/spec/support/shared_examples/lockfile.rb +4 -6
- metadata +43 -19
- data/bundler/Gemfile +0 -21
- data/bundler/LICENSE.txt +0 -22
- data/bundler/README.md +0 -29
- data/bundler/Rakefile +0 -2
- data/bundler/lib/lock_jar_bundler/bundler.rb +0 -35
- data/bundler/lib/lock_jar_bundler/piggy_back.rb +0 -98
- data/bundler/lib/lock_jar_bundler/version.rb +0 -5
- data/bundler/lib/lock_jar_bundler.rb +0 -5
- data/bundler/lock_jar_bundler.gemspec +0 -24
- data/bundler/spec/Jarfile +0 -3
- data/bundler/spec/dummy_gem/Jarfile +0 -1
- data/bundler/spec/dummy_gem/dummy_gem.gemspec +0 -19
- data/bundler/spec/lock_jar_bundler_spec.rb +0 -49
- data/bundler/spec/spec_helper.rb +0 -88
- data/lib/lock_jar/domain/dsl_helper.rb +0 -84
- data/spec/lock_jar/domain/dsl_helper_spec.rb +0 -52
data/lib/lock_jar/registry.rb
CHANGED
@@ -15,79 +15,71 @@
|
|
15
15
|
|
16
16
|
require 'singleton'
|
17
17
|
|
18
|
-
|
19
|
-
#
|
20
|
-
#
|
21
|
-
#
|
22
|
-
#
|
23
|
-
|
18
|
+
module LockJar
|
19
|
+
#
|
20
|
+
# Registry of resources loaded by LockJar
|
21
|
+
#
|
22
|
+
# @author Michael Guymon
|
23
|
+
#
|
24
|
+
class Registry
|
24
25
|
include Singleton
|
25
|
-
|
26
|
-
attr_accessor :loaded_gems
|
27
|
-
|
28
|
-
attr_accessor :loaded_lockfiles
|
29
|
-
|
26
|
+
|
27
|
+
attr_accessor :loaded_gems, :loaded_jars, :loaded_lockfiles
|
28
|
+
|
30
29
|
def initialize
|
31
30
|
@loaded_gems = {}
|
32
31
|
@loaded_jars = []
|
33
32
|
@loaded_lockfiles = []
|
34
33
|
end
|
35
|
-
|
36
|
-
def lockfile_registered?(
|
37
|
-
if lockfile
|
38
|
-
@loaded_lockfiles.include? File.expand_path( lockfile )
|
39
|
-
end
|
34
|
+
|
35
|
+
def lockfile_registered?(lockfile)
|
36
|
+
@loaded_lockfiles.include? File.expand_path(lockfile) if lockfile
|
40
37
|
end
|
41
|
-
|
42
|
-
def register_lockfile(
|
43
|
-
if lockfile
|
44
|
-
|
45
|
-
|
38
|
+
|
39
|
+
def register_lockfile(lockfile)
|
40
|
+
return if lockfile.nil? || lockfile_registered?(lockfile)
|
41
|
+
|
42
|
+
@loaded_lockfiles << File.expand_path(lockfile)
|
46
43
|
end
|
47
|
-
|
48
|
-
def register_jars(
|
49
|
-
if jars
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
44
|
+
|
45
|
+
def register_jars(jars)
|
46
|
+
return if jars.nil?
|
47
|
+
|
48
|
+
jars_to_load = jars - @loaded_jars
|
49
|
+
|
50
|
+
@loaded_jars += jars_to_load
|
51
|
+
|
52
|
+
jars_to_load
|
56
53
|
end
|
57
|
-
|
58
|
-
def register_gem(
|
54
|
+
|
55
|
+
def register_gem(spec)
|
59
56
|
@loaded_gems[spec.name] = spec
|
60
57
|
end
|
61
|
-
|
62
|
-
def gem_registered?(
|
58
|
+
|
59
|
+
def gem_registered?(spec)
|
63
60
|
!@loaded_gems[spec.name].nil?
|
64
61
|
end
|
65
|
-
|
66
|
-
def load_gem(
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
|
62
|
+
|
63
|
+
def load_gem(spec)
|
64
|
+
return if gem_registered?(spec)
|
65
|
+
|
66
|
+
register_gem(spec)
|
67
|
+
gem_dir = spec.gem_dir
|
68
|
+
|
69
|
+
lockfile = File.join(gem_dir, 'Jarfile.lock')
|
70
|
+
|
71
|
+
return unless File.exist?(lockfile)
|
72
|
+
|
73
|
+
puts "#{spec.name} has Jarfile.lock, loading jars"
|
74
|
+
LockJar.load(lockfile)
|
78
75
|
end
|
79
|
-
|
80
|
-
def load_jars_for_gems
|
76
|
+
|
77
|
+
def load_jars_for_gems
|
81
78
|
specs = Gem.loaded_specs
|
82
|
-
if specs
|
83
|
-
gems = specs.keys - @loaded_gems.keys
|
84
|
-
if gems.size > 0
|
85
|
-
gems.each do |key|
|
86
|
-
spec = specs[key]
|
87
|
-
load_gem( spec )
|
88
|
-
end
|
89
|
-
end
|
90
|
-
end
|
91
|
-
end
|
79
|
+
return if specs.nil?
|
92
80
|
|
93
|
-
|
81
|
+
gems = specs.keys - @loaded_gems.keys
|
82
|
+
gems.each { |key| load_gem(specs[key]) }
|
83
|
+
end
|
84
|
+
end
|
85
|
+
end
|
data/lib/lock_jar/resolver.rb
CHANGED
@@ -19,18 +19,16 @@ require 'naether/bootstrap'
|
|
19
19
|
require 'fileutils'
|
20
20
|
|
21
21
|
module LockJar
|
22
|
+
#
|
22
23
|
class Resolver
|
24
|
+
attr_reader :opts, :naether
|
23
25
|
|
24
|
-
|
25
|
-
attr_reader :naether
|
26
|
-
|
27
|
-
def initialize( opts = {} )
|
28
|
-
|
26
|
+
def initialize(opts = {})
|
29
27
|
@opts = opts
|
30
28
|
local_repo = opts[:local_repo] || Naether::Bootstrap.default_local_repo
|
31
29
|
|
32
30
|
# Bootstrap Naether
|
33
|
-
Naether::Bootstrap.bootstrap_local_repo(
|
31
|
+
Naether::Bootstrap.bootstrap_local_repo(local_repo, opts)
|
34
32
|
|
35
33
|
# Bootstrapping naether will create an instance from downloaded jars.
|
36
34
|
# If jars exist locally already, create manually
|
@@ -47,14 +45,13 @@ module LockJar
|
|
47
45
|
@naether.clear_remote_repositories
|
48
46
|
end
|
49
47
|
|
50
|
-
def add_remote_repository(
|
51
|
-
@naether.add_remote_repository(
|
48
|
+
def add_remote_repository(repo)
|
49
|
+
@naether.add_remote_repository(repo)
|
52
50
|
end
|
53
51
|
|
54
|
-
|
55
|
-
def resolve( dependencies, download_artifacts = true )
|
52
|
+
def resolve(dependencies, download_artifacts = true)
|
56
53
|
@naether.dependencies = dependencies
|
57
|
-
@naether.resolve_dependencies(
|
54
|
+
@naether.resolve_dependencies(download_artifacts)
|
58
55
|
@naether.dependencies_notation
|
59
56
|
end
|
60
57
|
|
@@ -62,37 +59,37 @@ module LockJar
|
|
62
59
|
@naether.dependencies_graph
|
63
60
|
end
|
64
61
|
|
65
|
-
def download(
|
66
|
-
@naether.download_artifacts(
|
62
|
+
def download(dependencies)
|
63
|
+
@naether.download_artifacts(dependencies)
|
67
64
|
end
|
68
65
|
|
69
|
-
def to_local_paths(
|
66
|
+
def to_local_paths(notations)
|
70
67
|
paths = []
|
71
68
|
notations.each do |notation|
|
72
|
-
if File.
|
69
|
+
if File.exist?(notation)
|
73
70
|
paths << notation
|
74
71
|
else
|
75
|
-
paths
|
72
|
+
paths += @naether.to_local_paths([notation])
|
76
73
|
end
|
77
74
|
end
|
78
75
|
|
79
76
|
paths
|
80
77
|
end
|
81
78
|
|
82
|
-
def load_to_classpath(
|
79
|
+
def load_to_classpath(artifacts)
|
83
80
|
paths = []
|
84
81
|
notations = []
|
85
82
|
|
86
83
|
artifacts.each do |art|
|
87
|
-
if File.
|
84
|
+
if File.exist?(art)
|
88
85
|
paths << art
|
89
86
|
else
|
90
87
|
notations << art
|
91
88
|
end
|
92
89
|
end
|
93
90
|
|
94
|
-
paths += @naether.to_local_paths(
|
95
|
-
Naether::Java.load_paths(
|
91
|
+
paths += @naether.to_local_paths(notations)
|
92
|
+
Naether::Java.load_paths(paths)
|
96
93
|
|
97
94
|
paths
|
98
95
|
end
|
@@ -0,0 +1,28 @@
|
|
1
|
+
module LockJar
|
2
|
+
#
|
3
|
+
class Runtime
|
4
|
+
#
|
5
|
+
module Install
|
6
|
+
def install(jarfile_lock, groups = ['default'], opts = {}, &blk)
|
7
|
+
deps = list(jarfile_lock, groups, { with_locals: false }.merge(opts), &blk)
|
8
|
+
|
9
|
+
lockfile = LockJar::Domain::Lockfile.read(jarfile_lock)
|
10
|
+
if opts[:local_repo].nil? && lockfile.local_repository
|
11
|
+
opts[:local_repo] = lockfile.local_repository
|
12
|
+
end
|
13
|
+
|
14
|
+
# Older Jarfile expected the defaul maven repo, but did not write
|
15
|
+
# it to the lockfile
|
16
|
+
resolver(opts).clear_remote_repositories if lockfile.version.to_f >= 0.11
|
17
|
+
|
18
|
+
lockfile.remote_repositories.each do |repo|
|
19
|
+
resolver(opts).add_remote_repository(repo)
|
20
|
+
end
|
21
|
+
|
22
|
+
files = resolver(opts).download(deps)
|
23
|
+
|
24
|
+
files
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
@@ -0,0 +1,55 @@
|
|
1
|
+
module LockJar
|
2
|
+
#
|
3
|
+
class Runtime
|
4
|
+
#
|
5
|
+
module List
|
6
|
+
# rubocop:disable Metrics/PerceivedComplexity, MethodLength
|
7
|
+
def list(lockfile_or_path, groups = ['default'], opts = {}, &blk)
|
8
|
+
dependencies = []
|
9
|
+
maps = []
|
10
|
+
with_locals = { with_locals: true }.merge(opts).delete(:with_locals)
|
11
|
+
|
12
|
+
if lockfile_or_path
|
13
|
+
if lockfile_or_path.is_a? LockJar::Domain::Lockfile
|
14
|
+
lockfile = lockfile_or_path
|
15
|
+
elsif lockfile_or_path
|
16
|
+
lockfile = LockJar::Domain::Lockfile.read(lockfile_or_path)
|
17
|
+
end
|
18
|
+
|
19
|
+
dependencies = lockfile_dependencies(lockfile, groups, with_locals)
|
20
|
+
maps = lockfile.maps
|
21
|
+
end
|
22
|
+
|
23
|
+
# Support limited DSL from block
|
24
|
+
unless blk.nil?
|
25
|
+
dsl = LockJar::Domain::Dsl.create(&blk)
|
26
|
+
dependencies += dsl_dependencies(dsl, groups, with_locals).map(&:to_dep)
|
27
|
+
maps = dsl.maps
|
28
|
+
end
|
29
|
+
|
30
|
+
if maps && maps.size > 0
|
31
|
+
maps.each do |notation, replacements|
|
32
|
+
dependencies = dependencies.flat_map do |dep|
|
33
|
+
if dep =~ /#{notation}/
|
34
|
+
replacements
|
35
|
+
else
|
36
|
+
dep
|
37
|
+
end
|
38
|
+
end
|
39
|
+
end
|
40
|
+
end
|
41
|
+
|
42
|
+
dependencies = resolver(opts).resolve(dependencies) if opts[:resolve]
|
43
|
+
|
44
|
+
if opts[:local_paths]
|
45
|
+
opts.delete(:local_paths) # remove list opts so resolver is not reset
|
46
|
+
resolver(opts).to_local_paths(dependencies)
|
47
|
+
|
48
|
+
else
|
49
|
+
dependencies
|
50
|
+
end
|
51
|
+
end
|
52
|
+
# rubocop:enable Metrics/PerceivedComplexity, MethodLength
|
53
|
+
end
|
54
|
+
end
|
55
|
+
end
|
@@ -0,0 +1,54 @@
|
|
1
|
+
module LockJar
|
2
|
+
#
|
3
|
+
class Runtime
|
4
|
+
#
|
5
|
+
module Load
|
6
|
+
# Load paths from a lockfile or block. Paths are loaded once per lockfile.
|
7
|
+
#
|
8
|
+
# @param [String] lockfile_path the lockfile
|
9
|
+
# @param [Array] groups to load into classpath
|
10
|
+
# @param [Hash] opts
|
11
|
+
# @param [Block] blk
|
12
|
+
# rubocop:disable Metrics/CyclomaticComplexity, Metrics/PerceivedComplexity
|
13
|
+
def load(lockfile_or_path, groups = ['default'], opts = {}, &blk)
|
14
|
+
# lockfile is only loaded once
|
15
|
+
unless lockfile_or_path.nil?
|
16
|
+
# loaded a Lockfile instance
|
17
|
+
if lockfile_or_path.is_a? LockJar::Domain::Lockfile
|
18
|
+
lockfile = lockfile_or_path
|
19
|
+
|
20
|
+
# check if lockfile path is already loaded
|
21
|
+
elsif LockJar::Registry.instance.lockfile_registered?(lockfile_or_path)
|
22
|
+
return
|
23
|
+
|
24
|
+
# convert lockfile path to a Lockfile instance
|
25
|
+
else
|
26
|
+
lockfile = LockJar::Domain::Lockfile.read(lockfile_or_path)
|
27
|
+
end
|
28
|
+
|
29
|
+
if opts[:local_repo].nil? && lockfile.local_repository
|
30
|
+
opts[:local_repo] = lockfile.local_repository
|
31
|
+
end
|
32
|
+
end
|
33
|
+
|
34
|
+
# set local_repo if passed in the block
|
35
|
+
unless blk.nil?
|
36
|
+
dsl = LockJar::Domain::Dsl.create(&blk)
|
37
|
+
|
38
|
+
# set local_repo from block
|
39
|
+
opts[:local_repo] = dsl.local_repository if opts[:local_repo].nil? && dsl.local_repository
|
40
|
+
end
|
41
|
+
|
42
|
+
# registered merged lockfiles for lockfile
|
43
|
+
if lockfile && !lockfile.merged.empty?
|
44
|
+
lockfile.merged.each { |path| LockJar::Registry.instance.register_lockfile(path) }
|
45
|
+
end
|
46
|
+
|
47
|
+
dependencies = LockJar::Registry.instance.register_jars(list(lockfile, groups, opts, &blk))
|
48
|
+
|
49
|
+
resolver(opts).load_to_classpath(dependencies)
|
50
|
+
end
|
51
|
+
# rubocop:enable Metrics/CyclomaticComplexity, Metrics/PerceivedComplexity
|
52
|
+
end
|
53
|
+
end
|
54
|
+
end
|
@@ -0,0 +1,152 @@
|
|
1
|
+
require 'delegate'
|
2
|
+
|
3
|
+
module LockJar
|
4
|
+
#
|
5
|
+
class Runtime
|
6
|
+
#
|
7
|
+
class Lock < SimpleDelegator
|
8
|
+
attr_accessor :jarfile, :lockfile, :opts
|
9
|
+
|
10
|
+
def initialize(runtime)
|
11
|
+
super(runtime)
|
12
|
+
|
13
|
+
@lockfile = LockJar::Domain::Lockfile.new
|
14
|
+
end
|
15
|
+
|
16
|
+
def lock(jarfile_or_dsl, opts = {}, &blk)
|
17
|
+
@opts = { download: true }.merge(opts)
|
18
|
+
|
19
|
+
create_dsl!(jarfile_or_dsl, &blk)
|
20
|
+
|
21
|
+
apply_repositories!
|
22
|
+
|
23
|
+
apply_maps!
|
24
|
+
|
25
|
+
apply_excludes!
|
26
|
+
|
27
|
+
apply_merged!
|
28
|
+
|
29
|
+
artifacts = jarfile.artifacts.values.flatten
|
30
|
+
apply_artifacts!(artifacts) unless artifacts.empty?
|
31
|
+
|
32
|
+
lockfile.write(@opts[:lockfile] || 'Jarfile.lock')
|
33
|
+
|
34
|
+
lockfile
|
35
|
+
end
|
36
|
+
|
37
|
+
private
|
38
|
+
|
39
|
+
def create_dsl!(jarfile_or_dsl, &blk)
|
40
|
+
if jarfile_or_dsl
|
41
|
+
if jarfile_or_dsl.is_a? LockJar::Domain::Dsl
|
42
|
+
@jarfile = jarfile_or_dsl
|
43
|
+
else
|
44
|
+
@jarfile = LockJar::Domain::JarfileDsl.create(jarfile_or_dsl)
|
45
|
+
end
|
46
|
+
end
|
47
|
+
|
48
|
+
return @jarfile if blk.nil?
|
49
|
+
|
50
|
+
if @jarfile
|
51
|
+
@jarfile = LockJar::Domain::DslMerger.new(
|
52
|
+
jarfile, LockJar::Domain::Dsl.create(&blk)).merge
|
53
|
+
else
|
54
|
+
@jarfile = LockJar::Domain::Dsl.create(&blk)
|
55
|
+
end
|
56
|
+
end
|
57
|
+
|
58
|
+
# rubocop:disable Metrics/AbcSize
|
59
|
+
def apply_artifacts!(artifacts)
|
60
|
+
# Build the dependencies_graph hash in the resolver
|
61
|
+
resolver(opts).resolve(
|
62
|
+
artifacts.select(&:resolvable?).map(&:to_dep), opts[:download] == true
|
63
|
+
)
|
64
|
+
|
65
|
+
jarfile.artifacts.each do |group_name, group_artifacts|
|
66
|
+
group = { 'locals' => [], 'dependencies' => [], 'artifacts' => [] }
|
67
|
+
|
68
|
+
group_artifacts.each do |artifact|
|
69
|
+
artifact_data = {}
|
70
|
+
|
71
|
+
add_artifact!(group, artifact_data, artifact)
|
72
|
+
|
73
|
+
next unless artifact_data['transitive']
|
74
|
+
|
75
|
+
# flatten the graph of nested hashes
|
76
|
+
group['dependencies'] += dependency_merge(artifact_data['transitive'])
|
77
|
+
# xxX: set required_by ?
|
78
|
+
group['artifacts'] << { artifact.to_urn => artifact_data }
|
79
|
+
end
|
80
|
+
|
81
|
+
lockfile.excludes.each do |exclude|
|
82
|
+
group['dependencies'].delete_if { |dep| dep =~ /#{exclude}/ }
|
83
|
+
end if lockfile.excludes
|
84
|
+
|
85
|
+
group['dependencies'] = group['dependencies'].sort.uniq
|
86
|
+
|
87
|
+
group.delete 'locals' if group['locals'].empty?
|
88
|
+
|
89
|
+
lockfile.groups[group_name] = group
|
90
|
+
end
|
91
|
+
end
|
92
|
+
# rubocop:enable Metrics/AbcSize
|
93
|
+
|
94
|
+
def apply_excludes!
|
95
|
+
lockfile.excludes = jarfile.excludes if jarfile.excludes.size > 0
|
96
|
+
end
|
97
|
+
|
98
|
+
def apply_maps!
|
99
|
+
lockfile.maps = jarfile.maps if jarfile.maps.size > 0
|
100
|
+
end
|
101
|
+
|
102
|
+
def apply_merged!
|
103
|
+
lockfile.merged = jarfile.merged unless jarfile.merged.empty?
|
104
|
+
end
|
105
|
+
|
106
|
+
def apply_repositories!
|
107
|
+
if jarfile.clear_repositories
|
108
|
+
resolver(opts).clear_remote_repositories
|
109
|
+
else
|
110
|
+
repos = resolver(opts).remote_repositories
|
111
|
+
lockfile.remote_repositories += repos.to_a if repos
|
112
|
+
end
|
113
|
+
|
114
|
+
# Add remote repos to the resolver and the lockfile
|
115
|
+
jarfile.remote_repositories.each do |repo|
|
116
|
+
resolver(opts).add_remote_repository(repo)
|
117
|
+
lockfile.remote_repositories << repo
|
118
|
+
end
|
119
|
+
|
120
|
+
lockfile.local_repository = opts[:local_repo] || jarfile.local_repository
|
121
|
+
end
|
122
|
+
|
123
|
+
def add_artifact!(group, artifact_data, artifact)
|
124
|
+
if artifact.is_a? LockJar::Domain::Jar
|
125
|
+
group['dependencies'] << artifact.notation
|
126
|
+
g = resolver(opts).dependencies_graph[artifact.notation]
|
127
|
+
artifact_data['transitive'] = g.to_hash if g
|
128
|
+
|
129
|
+
elsif artifact.is_a? LockJar::Domain::Pom
|
130
|
+
artifact_data['scopes'] = artifact.scopes
|
131
|
+
|
132
|
+
# iterate each dependency in Pom to map transitive dependencies
|
133
|
+
transitive = {}
|
134
|
+
artifact.notations.each do |notation|
|
135
|
+
transitive.merge!(notation => resolver(opts).dependencies_graph[notation])
|
136
|
+
end
|
137
|
+
artifact_data['transitive'] = transitive
|
138
|
+
|
139
|
+
elsif artifact.is_a? LockJar::Domain::Local
|
140
|
+
group['locals'] << artifact.path
|
141
|
+
else
|
142
|
+
fail("Unsupported artifact: #{artifact.inspect}")
|
143
|
+
end
|
144
|
+
end
|
145
|
+
|
146
|
+
def dependency_merge(graph)
|
147
|
+
deps = graph.keys
|
148
|
+
graph.values.flat_map { |next_step| deps += dependency_merge(next_step) }
|
149
|
+
end
|
150
|
+
end
|
151
|
+
end
|
152
|
+
end
|