lock_jar 0.13.0 → 0.14.0
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/.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/bundler.rb
CHANGED
@@ -4,60 +4,102 @@ require 'lock_jar/domain/lockfile'
|
|
4
4
|
require 'lock_jar/domain/dsl'
|
5
5
|
require 'lock_jar/domain/gem_dsl'
|
6
6
|
require 'lock_jar/domain/jarfile_dsl'
|
7
|
-
require 'lock_jar/domain/
|
7
|
+
require 'lock_jar/domain/dsl_merger'
|
8
8
|
|
9
9
|
module LockJar
|
10
|
-
|
10
|
+
#
|
11
11
|
class Bundler
|
12
|
-
|
13
12
|
class << self
|
14
|
-
|
15
13
|
attr_accessor :skip_lock
|
16
|
-
|
14
|
+
|
17
15
|
def load(*groups)
|
18
|
-
if groups
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
end
|
26
|
-
|
27
|
-
LockJar.load( lockfile, groups )
|
28
|
-
|
29
|
-
if ENV["DEBUG"]
|
30
|
-
puts "[LockJar] Loaded Jars for #{groups.inspect}: #{LockJar::Registry.instance.loaded_jars.inspect}"
|
31
|
-
end
|
16
|
+
return if groups.empty? || !File.exist?('Jarfile.lock')
|
17
|
+
|
18
|
+
lockfile = LockJar::Domain::Lockfile.read('Jarfile.lock')
|
19
|
+
|
20
|
+
# expand merged paths to include gem base path
|
21
|
+
unless lockfile.merged.empty?
|
22
|
+
lockfile.merged = LockJar::Bundler.expand_gem_paths(lockfile.merged)
|
32
23
|
end
|
24
|
+
|
25
|
+
LockJar.load(lockfile, groups)
|
26
|
+
|
27
|
+
puts(
|
28
|
+
'[LockJar] Loaded Jars for #{groups.inspect}: '\
|
29
|
+
"#{LockJar::Registry.instance.loaded_jars.inspect}"
|
30
|
+
) if ENV['DEBUG']
|
33
31
|
end
|
34
|
-
|
32
|
+
|
35
33
|
def expand_gem_paths(merged)
|
36
|
-
|
37
34
|
merged_gem_paths = []
|
38
35
|
Gem.path.each do |gem_root|
|
39
36
|
merged.each do |merge|
|
37
|
+
next unless merge.start_with? 'gem:'
|
38
|
+
|
40
39
|
# merged gems follow the notation: gem:gemname:path
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
merged_gem_paths << gem_path
|
46
|
-
end
|
47
|
-
end
|
40
|
+
gem_path = merge.gsub(/^gem:.+:/, '')
|
41
|
+
gem_path = File.join(gem_root, gem_path)
|
42
|
+
|
43
|
+
merged_gem_paths << gem_path if File.exist? gem_path
|
48
44
|
end
|
49
45
|
end
|
50
|
-
|
46
|
+
|
51
47
|
merged_gem_paths
|
52
48
|
end
|
49
|
+
|
50
|
+
# Create a lock file from bundled gems
|
51
|
+
def lock!(*opts)
|
52
|
+
definition = ::Bundler.definition
|
53
|
+
|
54
|
+
dsl = nil
|
55
|
+
gems_with_jars = []
|
56
|
+
|
57
|
+
jarfile_opt = opts.find { |option| option.is_a? String }
|
58
|
+
|
59
|
+
jarfile = File.expand_path(jarfile_opt || 'Jarfile')
|
60
|
+
|
61
|
+
# load local Jarfile
|
62
|
+
if File.exist?(jarfile)
|
63
|
+
dsl = LockJar::Domain::JarfileDsl.create(jarfile)
|
64
|
+
|
65
|
+
# Create new Dsl
|
66
|
+
else
|
67
|
+
dsl = LockJar::Domain::Dsl.new
|
68
|
+
end
|
69
|
+
|
70
|
+
definition.groups.each do |group|
|
71
|
+
puts '[LockJar] Group #{group}:' if ENV['DEBUG']
|
72
|
+
|
73
|
+
definition.specs_for([group]).each do |spec|
|
74
|
+
merged_dsl = merge_gem_dsl(dsl, spec, group)
|
75
|
+
dsl = merged_dsl if merged_dsl
|
76
|
+
gems_with_jars << "gem:#{spec.name}" if File.exist? File.join(spec.gem_dir, 'Jarfile')
|
77
|
+
end
|
78
|
+
end
|
79
|
+
|
80
|
+
puts "[LockJar] Locking Jars for: #{gems_with_jars.inspect}"
|
81
|
+
LockJar.lock(*([dsl] + opts))
|
82
|
+
end
|
83
|
+
|
84
|
+
private
|
85
|
+
|
86
|
+
def merge_gem_dsl(dsl, spec, group)
|
87
|
+
jarfile = File.join(spec.gem_dir, 'Jarfile')
|
88
|
+
|
89
|
+
return unless File.exist?(jarfile)
|
90
|
+
|
91
|
+
puts "[LockJar] #{spec.name} has Jarfile" if ENV['DEBUG']
|
92
|
+
spec_dsl = LockJar::Domain::GemDsl.create(spec, jarfile)
|
93
|
+
LockJar::Domain::DslMerger.new(dsl, spec_dsl, [group.to_s]).merge
|
94
|
+
end
|
53
95
|
end
|
54
96
|
end
|
55
|
-
|
56
97
|
end
|
57
98
|
|
99
|
+
# Patch Bundler module to allow LockJar to lock and load when Bundler is run
|
58
100
|
module Bundler
|
59
101
|
class << self
|
60
|
-
|
102
|
+
alias_method :_lockjar_extended_require, :require
|
61
103
|
def require(*groups)
|
62
104
|
LockJar::Bundler.load(*groups)
|
63
105
|
|
@@ -66,7 +108,7 @@ module Bundler
|
|
66
108
|
_lockjar_extended_require
|
67
109
|
end
|
68
110
|
|
69
|
-
|
111
|
+
alias_method :_lockjar_extended_setup, :setup
|
70
112
|
def setup(*groups)
|
71
113
|
LockJar::Bundler.load(*groups)
|
72
114
|
|
@@ -76,9 +118,10 @@ module Bundler
|
|
76
118
|
end
|
77
119
|
end
|
78
120
|
|
121
|
+
# Patch Bundler::Runtime.require and Bundler::Runtime.setup to execute
|
122
|
+
# Lockjar::Bundler.load
|
79
123
|
class Runtime
|
80
|
-
|
81
|
-
alias :_lockjar_extended_require :require
|
124
|
+
alias_method :_lockjar_extended_require, :require
|
82
125
|
def require(*groups)
|
83
126
|
LockJar::Bundler.load(*groups)
|
84
127
|
|
@@ -87,7 +130,7 @@ module Bundler
|
|
87
130
|
_lockjar_extended_require
|
88
131
|
end
|
89
132
|
|
90
|
-
|
133
|
+
alias_method :_lockjar_extended_setup, :setup
|
91
134
|
def setup(*groups)
|
92
135
|
LockJar::Bundler.load(*groups)
|
93
136
|
|
@@ -97,59 +140,17 @@ module Bundler
|
|
97
140
|
end
|
98
141
|
end
|
99
142
|
|
143
|
+
# Patch Bundler::Definition.to_lock to run LockJar::Bundler.lock!
|
100
144
|
class Definition
|
101
|
-
|
145
|
+
alias_method :_lockjar_extended_to_lock, :to_lock
|
102
146
|
def to_lock
|
103
|
-
|
104
|
-
|
105
|
-
if LockJar::Bundler.skip_lock != true
|
106
|
-
definition = Bundler.definition
|
107
|
-
#if !definition.send( :nothing_changed? )
|
108
|
-
gems_with_jars = []
|
109
|
-
|
110
|
-
# load local Jarfile
|
111
|
-
if File.exists?( 'Jarfile' )
|
112
|
-
dsl = LockJar::Domain::JarfileDsl.create( File.expand_path( 'Jarfile' ) )
|
113
|
-
gems_with_jars << 'jarfile:Jarfile'
|
114
|
-
# Create new Dsl
|
115
|
-
else
|
116
|
-
dsl = LockJar::Domain::Dsl.new
|
117
|
-
end
|
118
|
-
|
119
|
-
definition.groups.each do |group|
|
120
|
-
if ENV["DEBUG"]
|
121
|
-
puts "[LockJar] Group #{group}:"
|
122
|
-
end
|
147
|
+
result = _lockjar_extended_to_lock
|
123
148
|
|
124
|
-
|
125
|
-
gem_dir = spec.gem_dir
|
149
|
+
return result if LockJar::Bundler.skip_lock
|
126
150
|
|
127
|
-
|
151
|
+
LockJar::Bundler.lock!
|
128
152
|
|
129
|
-
|
130
|
-
gems_with_jars << "gem:#{spec.name}"
|
131
|
-
|
132
|
-
if ENV["DEBUG"]
|
133
|
-
puts "[LockJar] #{spec.name} has Jarfile"
|
134
|
-
end
|
135
|
-
|
136
|
-
spec_dsl = LockJar::Domain::GemDsl.create( spec, "Jarfile" )
|
137
|
-
|
138
|
-
dsl = LockJar::Domain::DslHelper.merge( dsl, spec_dsl, group.to_s )
|
139
|
-
end
|
140
|
-
end
|
141
|
-
|
142
|
-
end
|
143
|
-
|
144
|
-
puts "[LockJar] Locking Jars for: #{gems_with_jars.inspect}"
|
145
|
-
LockJar.lock( dsl )
|
146
|
-
#elsif ENV["DEBUG"]
|
147
|
-
# puts "[LockJar] Locking skiped, Gemfile has not changed"
|
148
|
-
#end
|
149
|
-
end
|
150
|
-
|
151
|
-
to_lock
|
153
|
+
result
|
152
154
|
end
|
153
|
-
|
154
155
|
end
|
155
|
-
end
|
156
|
+
end
|
@@ -17,53 +17,51 @@ require 'lock_jar'
|
|
17
17
|
require 'naether'
|
18
18
|
|
19
19
|
module LockJar
|
20
|
-
|
21
20
|
#
|
22
21
|
# Create a ClassLoader populated by a lockfile
|
23
22
|
#
|
24
23
|
# @author Michael Guymon
|
25
24
|
#
|
26
25
|
class ClassLoader
|
27
|
-
|
28
26
|
# Create new instance, populating ClassLoader with lockfile
|
29
|
-
#
|
27
|
+
#
|
30
28
|
# @param [String] lockfile path
|
31
|
-
def initialize(
|
29
|
+
def initialize(lockfile)
|
32
30
|
# XXX: ensure Naether has been loaded, this should be handled less
|
33
31
|
# clumsily
|
34
32
|
LockJar::Runtime.instance.resolver(nil)
|
35
|
-
@class_loader = com.tobedevoured.naether.PathClassLoader.new(
|
36
|
-
|
37
|
-
|
33
|
+
@class_loader = com.tobedevoured.naether.PathClassLoader.new(
|
34
|
+
JRuby.runtime.jruby_class_loader)
|
35
|
+
|
36
|
+
jars = LockJar.list(lockfile, local_paths: true)
|
38
37
|
jars.each do |jar|
|
39
|
-
add_path(
|
40
|
-
end
|
38
|
+
add_path(jar)
|
39
|
+
end
|
41
40
|
end
|
42
|
-
|
41
|
+
|
43
42
|
# Execute block
|
44
43
|
#
|
45
44
|
# @param [Block] blk
|
46
|
-
def isolate(&blk)
|
47
|
-
instance_eval(&blk)
|
45
|
+
def isolate(&blk)
|
46
|
+
instance_eval(&blk)
|
48
47
|
end
|
49
|
-
|
48
|
+
|
50
49
|
# Add path to the ClassLoader
|
51
50
|
#
|
52
51
|
# @param [String] path of Jar or directory to add to ClassLoader
|
53
52
|
# @return [Boolean] if added
|
54
|
-
def add_path(
|
55
|
-
@class_loader.addPath(
|
53
|
+
def add_path(path)
|
54
|
+
@class_loader.addPath(path)
|
56
55
|
end
|
57
|
-
|
56
|
+
|
58
57
|
#
|
59
58
|
# Create new instance of a Java class using the populated ClassLoader
|
60
|
-
#
|
59
|
+
#
|
61
60
|
# @param [String] clazz fully qualified Java class
|
62
61
|
# @param [Array] args arguments for constructing the Java class
|
63
62
|
# @return [Object]
|
64
|
-
def new_instance(
|
65
|
-
@class_loader.newInstance(
|
63
|
+
def new_instance(clazz, *args)
|
64
|
+
@class_loader.newInstance(clazz, *args)
|
66
65
|
end
|
67
|
-
|
68
66
|
end
|
69
|
-
end
|
67
|
+
end
|
data/lib/lock_jar/cli.rb
CHANGED
@@ -4,64 +4,72 @@ require 'lock_jar'
|
|
4
4
|
require 'lock_jar/logging'
|
5
5
|
|
6
6
|
module LockJar
|
7
|
-
|
7
|
+
#
|
8
8
|
class CLI < Thor
|
9
|
-
|
9
|
+
#
|
10
10
|
module ClassMethods
|
11
11
|
def generate_lockfile_option
|
12
|
-
method_option
|
13
|
-
|
12
|
+
method_option(
|
13
|
+
:lockfile,
|
14
|
+
aliases: '-l',
|
14
15
|
default: 'Jarfile.lock',
|
15
|
-
desc:
|
16
|
+
desc: 'Path to Jarfile.lock'
|
17
|
+
)
|
16
18
|
end
|
17
19
|
|
18
20
|
def generate_scopes_option
|
19
|
-
method_option
|
20
|
-
|
21
|
+
method_option(
|
22
|
+
:scopes,
|
23
|
+
aliases: '-s',
|
21
24
|
default: ['default'],
|
22
|
-
desc:
|
23
|
-
:
|
25
|
+
desc: 'Scopes to install from Jarfile.lock',
|
26
|
+
type: :array
|
27
|
+
)
|
24
28
|
end
|
25
29
|
|
26
30
|
def generate_jarfile_option
|
27
|
-
method_option
|
28
|
-
|
31
|
+
method_option(
|
32
|
+
:jarfile,
|
33
|
+
aliases: '-j',
|
29
34
|
default: 'Jarfile',
|
30
|
-
desc:
|
35
|
+
desc: 'Path to Jarfile'
|
36
|
+
)
|
31
37
|
end
|
32
38
|
|
33
39
|
def verbose_option
|
34
|
-
method_option
|
35
|
-
|
40
|
+
method_option(
|
41
|
+
:verbose,
|
42
|
+
aliases: '-v',
|
36
43
|
type: :boolean,
|
37
|
-
desc:
|
44
|
+
desc: 'Verbose output'
|
45
|
+
)
|
38
46
|
end
|
39
47
|
end
|
40
48
|
extend(ClassMethods)
|
41
49
|
|
42
|
-
desc
|
50
|
+
desc 'version', 'LockJar version'
|
43
51
|
def version
|
44
52
|
puts LockJar::VERSION
|
45
53
|
end
|
46
54
|
|
47
|
-
desc
|
55
|
+
desc 'install', 'Install Jars from a Jarfile.lock'
|
48
56
|
generate_lockfile_option
|
49
57
|
generate_scopes_option
|
50
58
|
verbose_option
|
51
59
|
def install
|
52
60
|
handle_verbose(options[:verbose])
|
53
61
|
puts "Installing Jars from #{options[:lockfile]} for #{options[:scopes].inspect}"
|
54
|
-
LockJar.install(
|
62
|
+
LockJar.install(options[:lockfile], options[:scopes])
|
55
63
|
end
|
56
64
|
|
57
|
-
desc
|
65
|
+
desc 'list', 'List Jars from a Jarfile.lock'
|
58
66
|
generate_lockfile_option
|
59
67
|
generate_scopes_option
|
60
68
|
verbose_option
|
61
69
|
def list
|
62
70
|
handle_verbose(options[:verbose])
|
63
71
|
puts "Listing Jars from #{options[:lockfile]} for #{options[:scopes].inspect}"
|
64
|
-
puts LockJar.list(
|
72
|
+
puts LockJar.list(options[:lockfile], options[:scopes]).inspect
|
65
73
|
end
|
66
74
|
|
67
75
|
desc 'lock', 'Lock Jars in a Jarfile.lock'
|
@@ -71,15 +79,14 @@ module LockJar
|
|
71
79
|
def lock
|
72
80
|
handle_verbose(options[:verbose])
|
73
81
|
puts "Locking #{options[:jarfile]} to #{options[:lockfile]}"
|
74
|
-
LockJar.lock(
|
82
|
+
LockJar.lock(options[:jarfile], lockfile: options[:lockfile])
|
75
83
|
end
|
76
84
|
|
77
85
|
private
|
86
|
+
|
78
87
|
def handle_verbose(verbose)
|
79
|
-
if verbose
|
80
|
-
|
81
|
-
end
|
88
|
+
LockJar::Logging.verbose! if verbose
|
89
|
+
nil
|
82
90
|
end
|
83
|
-
|
84
91
|
end
|
85
92
|
end
|
@@ -19,53 +19,54 @@ require 'naether/notation'
|
|
19
19
|
|
20
20
|
module LockJar
|
21
21
|
module Domain
|
22
|
-
|
23
|
-
|
22
|
+
#
|
24
23
|
class Artifact
|
25
24
|
include Comparable
|
26
25
|
attr_reader :type
|
27
|
-
|
28
|
-
def <=>(
|
29
|
-
if
|
30
|
-
to_urn <=>
|
26
|
+
|
27
|
+
def <=>(other)
|
28
|
+
if other.is_a? Artifact
|
29
|
+
to_urn <=> other.to_urn
|
31
30
|
else
|
32
|
-
to_urn <=>
|
31
|
+
to_urn <=> other.to_s
|
33
32
|
end
|
34
33
|
end
|
35
|
-
|
34
|
+
|
36
35
|
def resolvable?
|
37
36
|
true
|
38
37
|
end
|
39
38
|
end
|
40
|
-
|
39
|
+
|
40
|
+
#
|
41
41
|
class Jar < Artifact
|
42
42
|
attr_reader :notation
|
43
|
-
|
44
|
-
def initialize(
|
43
|
+
|
44
|
+
def initialize(notation)
|
45
45
|
@type = 'jar'
|
46
|
-
@notation = Naether::Notation.new(
|
46
|
+
@notation = Naether::Notation.new(notation).to_notation
|
47
47
|
end
|
48
|
-
|
48
|
+
|
49
49
|
def to_urn
|
50
50
|
"jar:#{notation}"
|
51
51
|
end
|
52
|
-
|
52
|
+
|
53
53
|
def to_dep
|
54
54
|
notation
|
55
55
|
end
|
56
56
|
end
|
57
|
-
|
57
|
+
|
58
|
+
#
|
58
59
|
class Local < Artifact
|
59
60
|
attr_reader :path
|
60
|
-
def initialize(
|
61
|
+
def initialize(path)
|
61
62
|
@type = 'local'
|
62
63
|
@path = path
|
63
64
|
end
|
64
|
-
|
65
|
+
|
65
66
|
def to_urn
|
66
67
|
"local:#{path}"
|
67
68
|
end
|
68
|
-
|
69
|
+
|
69
70
|
def to_dep
|
70
71
|
path
|
71
72
|
end
|
@@ -74,51 +75,44 @@ module LockJar
|
|
74
75
|
false
|
75
76
|
end
|
76
77
|
end
|
77
|
-
|
78
|
+
|
79
|
+
#
|
78
80
|
class Pom < Artifact
|
79
81
|
attr_reader :path, :scopes
|
80
|
-
|
81
|
-
def initialize(
|
82
|
+
|
83
|
+
def initialize(pom_path, pom_scopes = %w(compile runtime))
|
82
84
|
@type = 'pom'
|
83
|
-
@path =
|
84
|
-
@scopes =
|
85
|
+
@path = pom_path
|
86
|
+
@scopes = pom_scopes
|
85
87
|
end
|
86
|
-
|
88
|
+
|
87
89
|
def to_urn
|
88
90
|
"pom:#{path}"
|
89
91
|
end
|
90
|
-
|
92
|
+
|
91
93
|
def to_dep
|
92
94
|
{ path => scopes }
|
93
95
|
end
|
94
|
-
|
96
|
+
|
95
97
|
def notations
|
96
|
-
LockJar::Maven.dependencies(
|
98
|
+
LockJar::Maven.dependencies(path, scopes)
|
97
99
|
end
|
98
|
-
|
99
|
-
def ==(
|
100
|
-
self.<=>(
|
100
|
+
|
101
|
+
def ==(other)
|
102
|
+
self.<=>(other) == 0
|
101
103
|
end
|
102
|
-
|
103
|
-
def <=>(
|
104
|
-
if
|
105
|
-
if to_urn ==
|
106
|
-
return
|
107
|
-
|
108
|
-
# XXX: this is not a reliable way to compare.
|
109
|
-
if scopes.size > another_artifact.scopes.size
|
110
|
-
return 1
|
111
|
-
else
|
112
|
-
return -1
|
113
|
-
end
|
104
|
+
|
105
|
+
def <=>(other)
|
106
|
+
if other.is_a? Pom
|
107
|
+
if to_urn == other.to_urn
|
108
|
+
return Set.new(scopes) <=> Set.new(other.scopes)
|
114
109
|
else
|
115
|
-
to_urn <=>
|
110
|
+
to_urn <=> other.to_urn
|
116
111
|
end
|
117
112
|
else
|
118
113
|
super
|
119
114
|
end
|
120
115
|
end
|
121
116
|
end
|
122
|
-
|
123
117
|
end
|
124
|
-
end
|
118
|
+
end
|