lock_jar 0.3.3 → 0.4.0
Sign up to get free protection for your applications and to get access to all the features.
- data/.gitignore +56 -0
- data/README.rdoc +19 -44
- data/Rakefile +4 -0
- data/VERSION +1 -1
- data/bin/lockjar +7 -0
- data/lib/lock_jar/cli.rb +21 -0
- data/lock_jar.gemspec +7 -6
- data/spec/Jarfile +1 -1
- data/spec/lock_jar/cli_spec.rb +17 -0
- data/spec/lock_jar/dsl_spec.rb +1 -1
- data/spec/lock_jar_spec.rb +18 -5
- metadata +9 -8
- data/lib/lock_jar/bundler.rb +0 -100
- data/spec/BundlerJarfile.lock +0 -22
- data/spec/helper/bundler_helper.rb +0 -156
- data/spec/lock_jar/bundler_spec.rb +0 -98
data/.gitignore
ADDED
@@ -0,0 +1,56 @@
|
|
1
|
+
Gemfile.lock
|
2
|
+
|
3
|
+
.*
|
4
|
+
|
5
|
+
tmp
|
6
|
+
|
7
|
+
# rcov generated
|
8
|
+
coverage
|
9
|
+
|
10
|
+
# rdoc generated
|
11
|
+
rdoc
|
12
|
+
|
13
|
+
# yard generated
|
14
|
+
doc
|
15
|
+
.yardoc
|
16
|
+
|
17
|
+
# bundler
|
18
|
+
.bundle
|
19
|
+
|
20
|
+
# jeweler generated
|
21
|
+
pkg
|
22
|
+
|
23
|
+
# Have editor/IDE/OS specific files you need to ignore? Consider using a global gitignore:
|
24
|
+
#
|
25
|
+
# * Create a file at ~/.gitignore
|
26
|
+
# * Include files you want ignored
|
27
|
+
# * Run: git config --global core.excludesfile ~/.gitignore
|
28
|
+
#
|
29
|
+
# After doing this, these files will be ignored in all your git projects,
|
30
|
+
# saving you from having to 'pollute' every project you touch with them
|
31
|
+
#
|
32
|
+
# Not sure what to needs to be ignored for particular editors/OSes? Here's some ideas to get you started. (Remember, remove the leading # of the line)
|
33
|
+
#
|
34
|
+
# For MacOS:
|
35
|
+
#
|
36
|
+
#.DS_Store
|
37
|
+
|
38
|
+
# For TextMate
|
39
|
+
#*.tmproj
|
40
|
+
#tmtags
|
41
|
+
|
42
|
+
# For emacs:
|
43
|
+
#*~
|
44
|
+
#\#*
|
45
|
+
#.\#*
|
46
|
+
|
47
|
+
# For vim:
|
48
|
+
#*.swp
|
49
|
+
|
50
|
+
# For redcar:
|
51
|
+
#.redcar
|
52
|
+
|
53
|
+
# For rubinius:
|
54
|
+
#*.rbc
|
55
|
+
|
56
|
+
autotest
|
data/README.rdoc
CHANGED
@@ -5,13 +5,15 @@ Bundler and Maven. A Jarfile ({example}[https://github.com/mguymon/lock_jar/blob
|
|
5
5
|
generate a Jarfile.lock that contains all the resolved jar dependencies for scopes runtime, compile, and test.
|
6
6
|
The Jarfile.lock can be used to populate the classpath.
|
7
7
|
|
8
|
+
LockJar can be used directly or integrates directly with Bundler and Buildr.
|
9
|
+
|
8
10
|
https://github.com/mguymon/lock_jar
|
9
11
|
|
10
12
|
{RDoc}[http://rubydoc.info/github/mguymon/lock_jar/master/frames]
|
11
13
|
|
12
14
|
== Install
|
13
15
|
|
14
|
-
gem install lock_jar
|
16
|
+
gem install lock_jar
|
15
17
|
|
16
18
|
== Usage
|
17
19
|
|
@@ -22,12 +24,12 @@ gem install lock_jar
|
|
22
24
|
A Jarfile is a simple file using a Ruby DSL for defining a project's dependencies using the following
|
23
25
|
methods:
|
24
26
|
|
25
|
-
* local( path ): Set the local Maven repository
|
26
|
-
* repository( url ): Add
|
27
|
-
* map( notation, paths ): Map local paths to a notation.
|
27
|
+
* local( path ): Set the local Maven repository, this were dependencies are downloaded to.
|
28
|
+
* repository( url ): Add additional urlr of remote Maven repository.
|
29
|
+
* map( notation, paths ): Map local compiled class paths to a notation. The map is applied when loading or listing jar. This is useful for local development that overrides an artifact. A single or Array of paths can be set.
|
28
30
|
* exclude( excludes ): Add a artifact:group that will be excluded from resolved dependencies. A single or Array of excludes can be set.
|
29
31
|
* jar( notations, opts = {} ): Add Jar dependency in artifact notation, artifact:group:version as the bare minimum. A single or Array of notations can be passed. Default scope is *compile*, can be specified by setting opts = { :scope => <new_scope> }
|
30
|
-
* pom( pom_path, opts = {} ): Add local
|
32
|
+
* pom( pom_path, opts = {} ): Add a local Maven pom, default is to load dependencies for all scopes. To select the scopes to be loaded from the pom, set the opts = { :scopes => <new_scopes> }
|
31
33
|
* scope( scopes ): Set the scope for nested jar or pom. A single or Array of scopes can be set.
|
32
34
|
|
33
35
|
Example Jarfile
|
@@ -49,7 +51,7 @@ Example Jarfile
|
|
49
51
|
==== Resolving dependencies
|
50
52
|
|
51
53
|
* LockJar.lock( *args ): Using a Jarfile, creates a lock file. Depending on the type of arg, a different configuration is set.
|
52
|
-
* An arg of a String will set the Jarfile, e.g. 'Jarfile.different'. Default jarfile is *Jarfile*
|
54
|
+
* An arg of a String will set the Jarfile path, e.g. '/somewhere/Jarfile.different'. Default jarfile is *Jarfile*
|
53
55
|
* An arg of a Hash will set the options, e.g. { :local_repo => 'path' }
|
54
56
|
* :local_repo sets the local repo path
|
55
57
|
* :lockfile sets the Jarfile.lock path. Default lockfile is *Jarfile.lock*.
|
@@ -103,12 +105,12 @@ The Jarfile.lock
|
|
103
105
|
==== Accessing Jars
|
104
106
|
|
105
107
|
* LockJar.list(*args): Lists all dependencies as notations for scopes from the Jarfile.lock. Depending on the type of arg, a different configuration is set.
|
106
|
-
* An arg of a String will set the Jarfile.lock, e.g. 'Better.lock'. Default lock file is *Jarfile.lock*.
|
108
|
+
* An arg of a String will set the Jarfile.lock path, e.g. 'Better.lock'. Default lock file is *Jarfile.lock*.
|
107
109
|
* An arg of an Array will set the scopes, e.g. ['compile','test']. Defaults scopes are *compile* and *runtime*.
|
108
110
|
* An arg of a Hash will set the options, e.g. { :local_repo => 'path' }
|
109
111
|
* :local_repo sets the local repo path
|
110
|
-
* :local_paths converts the notations to paths
|
111
|
-
* :resolve to true will make transitive dependences resolve before
|
112
|
+
* :local_paths converts the notations to paths of jars in the local repo
|
113
|
+
* :resolve to true will make transitive dependences resolve before returning list of jars
|
112
114
|
|
113
115
|
* LockJar.load(*args): Loads all dependencies to the classpath for scopes from the Jarfile.lock. Defaults scopes are *compile* and *runtime*. Default lock file is *Jarfile.lock*.
|
114
116
|
* An arg of a String will set the Jarfile.lock, e.g. 'Better.lock'
|
@@ -156,46 +158,19 @@ Since you skipped the locking part, mostly likely you will need to resolve the d
|
|
156
158
|
jar 'org.eclipse.jetty:example-jetty-embedded:jar:8.1.2.v20120308'
|
157
159
|
end
|
158
160
|
|
159
|
-
===
|
160
|
-
|
161
|
-
LockJar integrates with {Bundler}[https://github.com/carlhuda/bundler/] by {modifying}[https://github.com/mguymon/lock_jar/blob/master/lib/lock_jar/bundler.rb] the Bundler
|
162
|
-
DSL to include LockJar's DSL, generating a Jarfile.lock when Bundler locks, and populating the classpath when Bundler requires.
|
163
|
-
|
164
|
-
==== Example
|
165
|
-
|
166
|
-
The following Gemfile with LockJar
|
167
|
-
|
168
|
-
# This is what modifies Bundler to trigger LockJar
|
169
|
-
require 'lock_jar/bundler'
|
170
|
-
|
171
|
-
gem "naether"
|
172
|
-
|
173
|
-
group :development do
|
174
|
-
gem "rspec", "~> 2.9.0"
|
175
|
-
end
|
176
|
-
|
177
|
-
# lockjar dsl that is used to generate Jarfile.lock
|
178
|
-
lock_jar do
|
179
|
-
scope :test do
|
180
|
-
jar 'junit:junit:jar:4.10'
|
181
|
-
end
|
182
|
-
|
183
|
-
pom 'spec/pom.xml', :scope => :compile
|
184
|
-
end
|
161
|
+
=== Command line
|
185
162
|
|
186
|
-
|
163
|
+
There is a simple command line helper. You can lock a Jarfile with the following command
|
187
164
|
|
188
|
-
|
189
|
-
|
190
|
-
When Bundler.setup or Bundler.require is called, the jars from the Jarfile.lock are loaded into the classpath.
|
165
|
+
lockjar lock
|
191
166
|
|
192
|
-
|
193
|
-
|
167
|
+
or list jars in a Jarfile.lock with
|
168
|
+
|
169
|
+
lockjar list
|
194
170
|
|
195
|
-
|
196
|
-
require 'lock_jar/bundler'
|
171
|
+
=== Bundler Integration
|
197
172
|
|
198
|
-
|
173
|
+
Has been deprecated to https://github.com/mguymon/lock_jar/tree/bundler_support
|
199
174
|
|
200
175
|
=== Buildr Integration
|
201
176
|
|
data/Rakefile
CHANGED
@@ -23,6 +23,10 @@ Jeweler::Tasks.new do |gem|
|
|
23
23
|
The Jarfile.lock can be used to populate the classpath"
|
24
24
|
gem.email = "michael.guymon@gmail.com"
|
25
25
|
gem.authors = ["Michael Guymon"]
|
26
|
+
gem.executable = "lockjar"
|
27
|
+
|
28
|
+
gem.files = `git ls-files`.split("\n") rescue ''
|
29
|
+
|
26
30
|
# dependencies defined in Gemfile
|
27
31
|
end
|
28
32
|
Jeweler::RubygemsDotOrgTasks.new
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.
|
1
|
+
0.4.0
|
data/bin/lockjar
ADDED
data/lib/lock_jar/cli.rb
ADDED
@@ -0,0 +1,21 @@
|
|
1
|
+
require 'lock_jar'
|
2
|
+
|
3
|
+
module LockJar
|
4
|
+
class CLI
|
5
|
+
def self.process( args )
|
6
|
+
if args.length > 0
|
7
|
+
args.each do|arg|
|
8
|
+
if arg == "lock"
|
9
|
+
LockJar.lock
|
10
|
+
puts "Jarfile.lock created"
|
11
|
+
elsif arg == "list"
|
12
|
+
puts "Listing Jarfile.lock jars for scopes compile, runtime"
|
13
|
+
puts LockJar.list.inspect
|
14
|
+
end
|
15
|
+
end
|
16
|
+
else
|
17
|
+
puts "Arguments: lock, load, or list"
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
data/lock_jar.gemspec
CHANGED
@@ -5,35 +5,36 @@
|
|
5
5
|
|
6
6
|
Gem::Specification.new do |s|
|
7
7
|
s.name = "lock_jar"
|
8
|
-
s.version = "0.
|
8
|
+
s.version = "0.4.0"
|
9
9
|
|
10
10
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
11
11
|
s.authors = ["Michael Guymon"]
|
12
|
-
s.date = "2012-
|
12
|
+
s.date = "2012-08-21"
|
13
13
|
s.description = "Manage Jar files for Ruby. In the spirit of Bundler, a Jarfile\n is used to generate a Jarfile.lock that contains all the resolved jar dependencies for scopes runtime, compile, and test.\n The Jarfile.lock can be used to populate the classpath"
|
14
14
|
s.email = "michael.guymon@gmail.com"
|
15
|
+
s.executables = ["lockjar"]
|
15
16
|
s.extra_rdoc_files = [
|
16
17
|
"LICENSE",
|
17
18
|
"README.rdoc"
|
18
19
|
]
|
19
20
|
s.files = [
|
21
|
+
".gitignore",
|
20
22
|
"Gemfile",
|
21
23
|
"LICENSE",
|
22
24
|
"README.rdoc",
|
23
25
|
"Rakefile",
|
24
26
|
"VERSION",
|
27
|
+
"bin/lockjar",
|
25
28
|
"lib/lock_jar.rb",
|
26
29
|
"lib/lock_jar/buildr.rb",
|
27
|
-
"lib/lock_jar/
|
30
|
+
"lib/lock_jar/cli.rb",
|
28
31
|
"lib/lock_jar/dsl.rb",
|
29
32
|
"lib/lock_jar/maven.rb",
|
30
33
|
"lib/lock_jar/resolver.rb",
|
31
34
|
"lib/lock_jar/runtime.rb",
|
32
35
|
"lock_jar.gemspec",
|
33
|
-
"spec/BundlerJarfile.lock",
|
34
36
|
"spec/Jarfile",
|
35
|
-
"spec/
|
36
|
-
"spec/lock_jar/bundler_spec.rb",
|
37
|
+
"spec/lock_jar/cli_spec.rb",
|
37
38
|
"spec/lock_jar/dsl_spec.rb",
|
38
39
|
"spec/lock_jar/maven_spec.rb",
|
39
40
|
"spec/lock_jar/resolver_spec.rb",
|
data/spec/Jarfile
CHANGED
@@ -0,0 +1,17 @@
|
|
1
|
+
require File.expand_path(File.join(File.dirname(__FILE__),'../spec_helper'))
|
2
|
+
require 'lock_jar/cli'
|
3
|
+
|
4
|
+
describe LockJar::CLI do
|
5
|
+
describe "#process" do
|
6
|
+
it "should lock a Jarfile" do
|
7
|
+
Dir.chdir( 'spec' )
|
8
|
+
LockJar::CLI.process( ['lock'] )
|
9
|
+
|
10
|
+
File.exists?('Jarfile.lock').should be_true
|
11
|
+
|
12
|
+
File.delete( 'Jarfile.lock' ) if File.exists?('Jarfile.lock')
|
13
|
+
|
14
|
+
Dir.chdir( '../' )
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
data/spec/lock_jar/dsl_spec.rb
CHANGED
@@ -6,7 +6,7 @@ describe LockJar::Dsl do
|
|
6
6
|
jarfile = LockJar::Dsl.evaluate( "spec/Jarfile" )
|
7
7
|
|
8
8
|
jarfile.local_repository.should eql '~/.m2'
|
9
|
-
jarfile.notations.should eql( {"compile"=>["org.apache.mina:mina-core:2.0.4", "
|
9
|
+
jarfile.notations.should eql( {"compile"=>["org.apache.mina:mina-core:2.0.4", "pom.xml"], "runtime"=>["pom.xml", "org.apache.tomcat:servlet-api:jar:6.0.35"], "test"=>["pom.xml", "junit:junit:jar:4.10"]} )
|
10
10
|
jarfile.repositories.should eql( ["http://repository.jboss.org/nexus/content/groups/public-jboss"] )
|
11
11
|
end
|
12
12
|
|
data/spec/lock_jar_spec.rb
CHANGED
@@ -8,8 +8,12 @@ describe LockJar, "#lock" do
|
|
8
8
|
File.delete( 'tmp/Jarfile.lock' ) if File.exists?( 'tmp/Jarfile.lock' )
|
9
9
|
Dir.mkdir( 'tmp' ) unless File.exists?( 'tmp' )
|
10
10
|
|
11
|
-
|
12
|
-
|
11
|
+
Dir.chdir( 'spec' )
|
12
|
+
|
13
|
+
LockJar.lock( "Jarfile", :local_repo => '../tmp/test-repo', :lockfile => '../tmp/Jarfile.lock' )
|
14
|
+
File.exists?( '../tmp/Jarfile.lock' ).should be_true
|
15
|
+
|
16
|
+
Dir.chdir( '../' )
|
13
17
|
end
|
14
18
|
|
15
19
|
it "should not replace dependencies with maps" do
|
@@ -64,10 +68,14 @@ end
|
|
64
68
|
|
65
69
|
describe LockJar, "#list" do
|
66
70
|
it "should list jars" do
|
67
|
-
|
71
|
+
Dir.chdir( 'spec' )
|
72
|
+
|
73
|
+
LockJar.lock( "Jarfile", :local_repo => '../tmp/test-repo', :lockfile => '../tmp/Jarfile.lock' )
|
68
74
|
|
69
|
-
jars = LockJar.list( 'tmp/Jarfile.lock', ['compile', 'runtime', 'bad scope'], :local_repo => 'tmp/test-repo' )
|
75
|
+
jars = LockJar.list( '../tmp/Jarfile.lock', ['compile', 'runtime', 'bad scope'], :local_repo => '../tmp/test-repo' )
|
70
76
|
jars.should eql( ["org.apache.mina:mina-core:jar:2.0.4", "org.slf4j:slf4j-api:jar:1.6.1", "com.slackworks:modelcitizen:jar:0.2.2", "commons-lang:commons-lang:jar:2.6", "commons-beanutils:commons-beanutils:jar:1.8.3", "commons-logging:commons-logging:jar:1.1.1", "ch.qos.logback:logback-classic:jar:0.9.24", "ch.qos.logback:logback-core:jar:0.9.24", "com.metapossum:metapossum-scanner:jar:1.0", "commons-io:commons-io:jar:1.4", "junit:junit:jar:4.7", "org.apache.tomcat:servlet-api:jar:6.0.35"] )
|
77
|
+
|
78
|
+
Dir.chdir( '../' )
|
71
79
|
end
|
72
80
|
|
73
81
|
it "should replace dependencies with maps" do
|
@@ -101,7 +109,9 @@ describe LockJar, "#load" do
|
|
101
109
|
lambda { Rjb::import('org.apache.mina.core.IoUtil') }.should raise_error
|
102
110
|
end
|
103
111
|
|
104
|
-
|
112
|
+
Dir.chdir( 'spec' )
|
113
|
+
|
114
|
+
LockJar.lock( "Jarfile", :local_repo => 'tmp/test-repo', :lockfile => 'tmp/Jarfile.lock' )
|
105
115
|
|
106
116
|
jars = LockJar.load( 'tmp/Jarfile.lock', ['compile', 'runtime'], :local_repo => 'tmp/test-repo' )
|
107
117
|
jars.should eql( [File.expand_path("tmp/test-repo/org/apache/mina/mina-core/2.0.4/mina-core-2.0.4.jar"), File.expand_path("tmp/test-repo/org/slf4j/slf4j-api/1.6.1/slf4j-api-1.6.1.jar"), File.expand_path("tmp/test-repo/com/slackworks/modelcitizen/0.2.2/modelcitizen-0.2.2.jar"), File.expand_path("tmp/test-repo/commons-lang/commons-lang/2.6/commons-lang-2.6.jar"), File.expand_path("tmp/test-repo/commons-beanutils/commons-beanutils/1.8.3/commons-beanutils-1.8.3.jar"), File.expand_path("tmp/test-repo/commons-logging/commons-logging/1.1.1/commons-logging-1.1.1.jar"), File.expand_path("tmp/test-repo/ch/qos/logback/logback-classic/0.9.24/logback-classic-0.9.24.jar"), File.expand_path("tmp/test-repo/ch/qos/logback/logback-core/0.9.24/logback-core-0.9.24.jar"), File.expand_path("tmp/test-repo/com/metapossum/metapossum-scanner/1.0/metapossum-scanner-1.0.jar"), File.expand_path("tmp/test-repo/commons-io/commons-io/1.4/commons-io-1.4.jar"), File.expand_path("tmp/test-repo/junit/junit/4.7/junit-4.7.jar"), File.expand_path("tmp/test-repo/org/apache/tomcat/servlet-api/6.0.35/servlet-api-6.0.35.jar")] )
|
@@ -111,6 +121,9 @@ describe LockJar, "#load" do
|
|
111
121
|
else
|
112
122
|
lambda { Rjb::import('org.apache.mina.core.IoUtil') }.should_not raise_error
|
113
123
|
end
|
124
|
+
|
125
|
+
|
126
|
+
Dir.chdir( '../' )
|
114
127
|
end
|
115
128
|
|
116
129
|
it "by block with resolve option" do
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: lock_jar
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.4.0
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2012-
|
12
|
+
date: 2012-08-21 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: naether
|
@@ -96,29 +96,30 @@ description: ! "Manage Jar files for Ruby. In the spirit of Bundler, a Jarfile\n
|
|
96
96
|
for scopes runtime, compile, and test.\n The Jarfile.lock can be used to populate
|
97
97
|
the classpath"
|
98
98
|
email: michael.guymon@gmail.com
|
99
|
-
executables:
|
99
|
+
executables:
|
100
|
+
- lockjar
|
100
101
|
extensions: []
|
101
102
|
extra_rdoc_files:
|
102
103
|
- LICENSE
|
103
104
|
- README.rdoc
|
104
105
|
files:
|
106
|
+
- .gitignore
|
105
107
|
- Gemfile
|
106
108
|
- LICENSE
|
107
109
|
- README.rdoc
|
108
110
|
- Rakefile
|
109
111
|
- VERSION
|
112
|
+
- bin/lockjar
|
110
113
|
- lib/lock_jar.rb
|
111
114
|
- lib/lock_jar/buildr.rb
|
112
|
-
- lib/lock_jar/
|
115
|
+
- lib/lock_jar/cli.rb
|
113
116
|
- lib/lock_jar/dsl.rb
|
114
117
|
- lib/lock_jar/maven.rb
|
115
118
|
- lib/lock_jar/resolver.rb
|
116
119
|
- lib/lock_jar/runtime.rb
|
117
120
|
- lock_jar.gemspec
|
118
|
-
- spec/BundlerJarfile.lock
|
119
121
|
- spec/Jarfile
|
120
|
-
- spec/
|
121
|
-
- spec/lock_jar/bundler_spec.rb
|
122
|
+
- spec/lock_jar/cli_spec.rb
|
122
123
|
- spec/lock_jar/dsl_spec.rb
|
123
124
|
- spec/lock_jar/maven_spec.rb
|
124
125
|
- spec/lock_jar/resolver_spec.rb
|
@@ -141,7 +142,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
141
142
|
version: '0'
|
142
143
|
segments:
|
143
144
|
- 0
|
144
|
-
hash:
|
145
|
+
hash: -3207062463202255767
|
145
146
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
146
147
|
none: false
|
147
148
|
requirements:
|
data/lib/lock_jar/bundler.rb
DELETED
@@ -1,100 +0,0 @@
|
|
1
|
-
# Licensed to the Apache Software Foundation (ASF) under one or more
|
2
|
-
# contributor license agreements. See the NOTICE file distributed with this
|
3
|
-
# work for additional information regarding copyright ownership. The ASF
|
4
|
-
# licenses this file to you under the Apache License, Version 2.0 (the
|
5
|
-
# "License"); you may not use this file except in compliance with the License.
|
6
|
-
# You may obtain a copy of the License at
|
7
|
-
#
|
8
|
-
# http://www.apache.org/licenses/LICENSE-2.0
|
9
|
-
#
|
10
|
-
# Unless required by applicable law or agreed to in writing, software
|
11
|
-
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
|
12
|
-
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
|
13
|
-
# License for the specific language governing permissions and limitations under
|
14
|
-
# the License.
|
15
|
-
|
16
|
-
require 'rubygems'
|
17
|
-
require 'bundler/dsl'
|
18
|
-
require 'lock_jar'
|
19
|
-
require 'lock_jar/dsl'
|
20
|
-
|
21
|
-
module Bundler
|
22
|
-
class Dsl
|
23
|
-
def lock_jar(&blk)
|
24
|
-
@lock_jar_blk = blk
|
25
|
-
end
|
26
|
-
|
27
|
-
def to_definition(lockfile, unlock)
|
28
|
-
@sources << @rubygems_source unless @sources.include?(@rubygems_source)
|
29
|
-
definition = LockJarDefinition.new(lockfile, @dependencies, @sources, unlock)
|
30
|
-
|
31
|
-
if @lock_jar_blk
|
32
|
-
definition.lock_jar = LockJar::Dsl.evaluate( nil, &@lock_jar_blk )
|
33
|
-
end
|
34
|
-
|
35
|
-
definition
|
36
|
-
end
|
37
|
-
end
|
38
|
-
|
39
|
-
class Environment
|
40
|
-
def lock_jar
|
41
|
-
@definition.lock_jar
|
42
|
-
end
|
43
|
-
end
|
44
|
-
|
45
|
-
class LockJarDefinition < Bundler::Definition
|
46
|
-
alias :lockjar_replaced_lock :lock
|
47
|
-
attr_accessor :lock_jar
|
48
|
-
|
49
|
-
def lock( file )
|
50
|
-
|
51
|
-
# XXX: this is call from Bundler.setup. Only should happen on install or update
|
52
|
-
LockJar.lock( lock_jar )
|
53
|
-
|
54
|
-
lockjar_replaced_lock( file )
|
55
|
-
end
|
56
|
-
end
|
57
|
-
|
58
|
-
class Runtime
|
59
|
-
alias :lockjar_replaced_setup :setup
|
60
|
-
alias :lockjar_replaced_require :require
|
61
|
-
|
62
|
-
def setup(*groups)
|
63
|
-
scopes = []
|
64
|
-
if groups && groups.size == 0
|
65
|
-
scopes = ["compile","runtime"]
|
66
|
-
else
|
67
|
-
groups.each do |group|
|
68
|
-
if "development" == group.to_s
|
69
|
-
scopes << "compile"
|
70
|
-
elsif "default" == group.to_s
|
71
|
-
scopes << "compile" << "runtime"
|
72
|
-
end
|
73
|
-
end
|
74
|
-
end
|
75
|
-
|
76
|
-
LockJar.load( scopes.uniq )
|
77
|
-
|
78
|
-
lockjar_replaced_setup( *groups )
|
79
|
-
end
|
80
|
-
|
81
|
-
def require(*groups)
|
82
|
-
scopes = []
|
83
|
-
|
84
|
-
if groups && groups.size == 0
|
85
|
-
scopes = ["compile","runtime"]
|
86
|
-
else
|
87
|
-
groups.each do |group|
|
88
|
-
if "development" == group.to_s
|
89
|
-
scopes << "compile"
|
90
|
-
elsif "default" == group.to_s
|
91
|
-
scopes << "compile" << "runtime"
|
92
|
-
end
|
93
|
-
end
|
94
|
-
end
|
95
|
-
LockJar.load( scopes.uniq )
|
96
|
-
|
97
|
-
lockjar_replaced_require( *groups )
|
98
|
-
end
|
99
|
-
end
|
100
|
-
end
|
data/spec/BundlerJarfile.lock
DELETED
@@ -1,22 +0,0 @@
|
|
1
|
-
---
|
2
|
-
scopes:
|
3
|
-
compile:
|
4
|
-
dependencies:
|
5
|
-
- /home/zinger/devel/projects/swx/lock_jar/spec/pom.xml
|
6
|
-
resolved_dependencies:
|
7
|
-
- com.slackworks:modelcitizen:jar:0.2.2
|
8
|
-
- commons-lang:commons-lang:jar:2.6
|
9
|
-
- commons-beanutils:commons-beanutils:jar:1.8.3
|
10
|
-
- commons-logging:commons-logging:jar:1.1.1
|
11
|
-
- ch.qos.logback:logback-classic:jar:0.9.24
|
12
|
-
- ch.qos.logback:logback-core:jar:0.9.24
|
13
|
-
- org.slf4j:slf4j-api:jar:1.6.1
|
14
|
-
- com.metapossum:metapossum-scanner:jar:1.0
|
15
|
-
- commons-io:commons-io:jar:1.4
|
16
|
-
- junit:junit:jar:4.7
|
17
|
-
test:
|
18
|
-
dependencies:
|
19
|
-
- junit:junit:jar:4.10
|
20
|
-
resolved_dependencies:
|
21
|
-
- junit:junit:jar:4.10
|
22
|
-
- org.hamcrest:hamcrest-core:jar:1.1
|
@@ -1,156 +0,0 @@
|
|
1
|
-
# Require the correct version of popen for the current platform
|
2
|
-
if RbConfig::CONFIG['host_os'] =~ /mingw|mswin/
|
3
|
-
begin
|
4
|
-
require 'win32/open3'
|
5
|
-
rescue LoadError
|
6
|
-
abort "Run `gem install win32-open3` to be able to run specs"
|
7
|
-
end
|
8
|
-
else
|
9
|
-
require 'open3'
|
10
|
-
end
|
11
|
-
|
12
|
-
|
13
|
-
module BundlerHelper
|
14
|
-
|
15
|
-
# Taken from Bundler spec supprt
|
16
|
-
# https://github.com/carlhuda/bundler/tree/master/spec/support
|
17
|
-
|
18
|
-
attr_reader :out, :err, :exitstatus
|
19
|
-
|
20
|
-
def gemfile(*args)
|
21
|
-
path = bundled_app("Gemfile")
|
22
|
-
path = args.shift if Pathname === args.first
|
23
|
-
str = args.shift || ""
|
24
|
-
path.dirname.mkpath
|
25
|
-
File.open(path.to_s, 'w') do |f|
|
26
|
-
f.puts str
|
27
|
-
end
|
28
|
-
end
|
29
|
-
|
30
|
-
def lockfile(*args)
|
31
|
-
path = bundled_app("Gemfile.lock")
|
32
|
-
path = args.shift if Pathname === args.first
|
33
|
-
str = args.shift || ""
|
34
|
-
|
35
|
-
# Trim the leading spaces
|
36
|
-
spaces = str[/\A\s+/, 0] || ""
|
37
|
-
str.gsub!(/^#{spaces}/, '')
|
38
|
-
|
39
|
-
File.open(path.to_s, 'w') do |f|
|
40
|
-
f.puts str
|
41
|
-
end
|
42
|
-
end
|
43
|
-
|
44
|
-
def install_gemfile(*args)
|
45
|
-
gemfile(*args)
|
46
|
-
opts = args.last.is_a?(Hash) ? args.last : {}
|
47
|
-
bundle :install, opts
|
48
|
-
end
|
49
|
-
|
50
|
-
def bundle(cmd, options = {})
|
51
|
-
expect_err = options.delete(:expect_err)
|
52
|
-
exitstatus = options.delete(:exitstatus)
|
53
|
-
options["no-color"] = true unless options.key?("no-color") || %w(exec conf).include?(cmd.to_s[0..3])
|
54
|
-
|
55
|
-
#bundle_bin = File.expand_path('../../../bin/bundle', __FILE__)
|
56
|
-
bundle_bin = `which bundle`.strip
|
57
|
-
|
58
|
-
requires = options.delete(:requires) || []
|
59
|
-
requires << File.expand_path('../fakeweb/'+options.delete(:fakeweb)+'.rb', __FILE__) if options.key?(:fakeweb)
|
60
|
-
requires << File.expand_path('../artifice/'+options.delete(:artifice)+'.rb', __FILE__) if options.key?(:artifice)
|
61
|
-
requires_str = requires.map{|r| "-r#{r}"}.join(" ")
|
62
|
-
|
63
|
-
env = (options.delete(:env) || {}).map{|k,v| "#{k}='#{v}' "}.join
|
64
|
-
args = options.map do |k,v|
|
65
|
-
v == true ? " --#{k}" : " --#{k} #{v}" if v
|
66
|
-
end.join
|
67
|
-
|
68
|
-
cmd = "#{env}#{Gem.ruby} -I#{lib} -I#{root} #{requires_str} #{bundle_bin} #{cmd}#{args}"
|
69
|
-
|
70
|
-
#puts cmd
|
71
|
-
|
72
|
-
if exitstatus
|
73
|
-
sys_status(cmd)
|
74
|
-
else
|
75
|
-
sys_exec(cmd, expect_err){|i| yield i if block_given? }
|
76
|
-
end
|
77
|
-
end
|
78
|
-
|
79
|
-
def root
|
80
|
-
@root ||= Pathname.new(File.expand_path("../../..", __FILE__))
|
81
|
-
end
|
82
|
-
|
83
|
-
def bundled_app(*path)
|
84
|
-
root = tmp.join("bundled_app")
|
85
|
-
FileUtils.mkdir_p(root)
|
86
|
-
root.join(*path)
|
87
|
-
end
|
88
|
-
|
89
|
-
def tmp(*path)
|
90
|
-
root.join("tmp", *path)
|
91
|
-
end
|
92
|
-
|
93
|
-
def in_app_root(&blk)
|
94
|
-
Dir.chdir(bundled_app, &blk)
|
95
|
-
end
|
96
|
-
|
97
|
-
def lib
|
98
|
-
File.expand_path('../../../lib', __FILE__)
|
99
|
-
end
|
100
|
-
|
101
|
-
def sys_exec(cmd, expect_err = false)
|
102
|
-
Open3.popen3(cmd.to_s) do |stdin, stdout, stderr|
|
103
|
-
@in_p, @out_p, @err_p = stdin, stdout, stderr
|
104
|
-
|
105
|
-
yield @in_p if block_given?
|
106
|
-
@in_p.close
|
107
|
-
|
108
|
-
@out = @out_p.read_available_bytes.strip
|
109
|
-
@err = @err_p.read_available_bytes.strip
|
110
|
-
end
|
111
|
-
|
112
|
-
#puts @out
|
113
|
-
puts @err unless expect_err || @err.empty? || !$show_err
|
114
|
-
@out
|
115
|
-
end
|
116
|
-
|
117
|
-
def ruby(ruby, options = {})
|
118
|
-
expect_err = options.delete(:expect_err)
|
119
|
-
env = (options.delete(:env) || {}).map{|k,v| "#{k}='#{v}' "}.join
|
120
|
-
ruby.gsub!(/["`\$]/) {|m| "\\#{m}" }
|
121
|
-
lib_option = options[:no_lib] ? "" : " -I#{lib} -I#{root}"
|
122
|
-
|
123
|
-
#puts %{#{env}#{Gem.ruby}#{lib_option} -e "#{ruby}"}
|
124
|
-
|
125
|
-
sys_exec(%{#{env}#{Gem.ruby}#{lib_option} -e "#{ruby}"}, expect_err)
|
126
|
-
end
|
127
|
-
|
128
|
-
RSpec::Matchers.define :have_dep do |*args|
|
129
|
-
dep = Bundler::Dependency.new(*args)
|
130
|
-
|
131
|
-
match do |actual|
|
132
|
-
actual.length == 1 && actual.all? { |d| d == dep }
|
133
|
-
end
|
134
|
-
end
|
135
|
-
end
|
136
|
-
|
137
|
-
class IO
|
138
|
-
def read_available_bytes(chunk_size = 16384, select_timeout = 0.02)
|
139
|
-
buffer = []
|
140
|
-
|
141
|
-
return "" if closed? || eof?
|
142
|
-
# IO.select cannot be used here due to the fact that it
|
143
|
-
# just does not work on windows
|
144
|
-
while true
|
145
|
-
begin
|
146
|
-
IO.select([self], nil, nil, select_timeout)
|
147
|
-
break if eof? # stop raising :-(
|
148
|
-
buffer << self.readpartial(chunk_size)
|
149
|
-
rescue(EOFError)
|
150
|
-
break
|
151
|
-
end
|
152
|
-
end
|
153
|
-
|
154
|
-
return buffer.join
|
155
|
-
end
|
156
|
-
end
|
@@ -1,98 +0,0 @@
|
|
1
|
-
require File.expand_path(File.join(File.dirname(__FILE__),'../spec_helper'))
|
2
|
-
|
3
|
-
require 'rubygems'
|
4
|
-
require 'bundler'
|
5
|
-
require 'lib/lock_jar/bundler'
|
6
|
-
require 'helper/bundler_helper'
|
7
|
-
require 'fileutils'
|
8
|
-
|
9
|
-
describe Bundler do
|
10
|
-
include BundlerHelper
|
11
|
-
|
12
|
-
before(:all) do
|
13
|
-
FileUtils.rm_rf( bundled_app ) if File.exists? bundled_app
|
14
|
-
end
|
15
|
-
|
16
|
-
before(:each) do
|
17
|
-
gemfile <<-G
|
18
|
-
require 'lib/lock_jar/bundler'
|
19
|
-
gem "naether"
|
20
|
-
|
21
|
-
lock_jar do
|
22
|
-
scope :test do
|
23
|
-
jar 'junit:junit:jar:4.10'
|
24
|
-
end
|
25
|
-
|
26
|
-
pom "#{File.join(root, 'spec', 'pom.xml')}", :scope => :development
|
27
|
-
end
|
28
|
-
G
|
29
|
-
|
30
|
-
ENV['BUNDLE_GEMFILE'] = bundled_app("Gemfile").to_s
|
31
|
-
|
32
|
-
in_app_root
|
33
|
-
end
|
34
|
-
|
35
|
-
after(:all) do
|
36
|
-
puts "Changing pwd back to #{root}"
|
37
|
-
Dir.chdir(root)
|
38
|
-
end
|
39
|
-
|
40
|
-
it "provides a list of the env dependencies" do
|
41
|
-
dep = Bundler.load.dependencies.first
|
42
|
-
dep.name.should eql("naether")
|
43
|
-
(dep.requirement >= ">= 0").should be_true
|
44
|
-
end
|
45
|
-
|
46
|
-
it "provides a list of the jar and pom dependencies" do
|
47
|
-
# XXX: In JRuby - works in autotest, fails directly from rspec. *sigh*
|
48
|
-
Bundler.load.lock_jar.notations.should eql( {"compile"=>[File.expand_path(File.join(File.dirname(__FILE__), "../../spec/pom.xml"))], "runtime"=>[], "test"=>["junit:junit:jar:4.10"]} )
|
49
|
-
end
|
50
|
-
|
51
|
-
it "should create Jarfile.lock with bundle install" do
|
52
|
-
File.delete( bundled_app("Jarfile.lock") ) if File.exists? bundled_app("Jarfile.lock")
|
53
|
-
install_gemfile <<-G
|
54
|
-
require 'lock_jar/bundler'
|
55
|
-
gem "naether"
|
56
|
-
|
57
|
-
lock_jar do
|
58
|
-
scope :test do
|
59
|
-
jar 'junit:junit:jar:4.10'
|
60
|
-
end
|
61
|
-
|
62
|
-
pom "#{File.join(root, 'spec', 'pom.xml')}", :scope => :development
|
63
|
-
end
|
64
|
-
|
65
|
-
G
|
66
|
-
File.exists?( bundled_app("Jarfile.lock") ).should be_true
|
67
|
-
|
68
|
-
LockJar.read( File.join(root,'spec', 'BundlerJarfile.lock') ).should eql( LockJar.read( bundled_app("Jarfile.lock") ) )
|
69
|
-
end
|
70
|
-
|
71
|
-
it "should create Jarfile.lock with bundle update" do
|
72
|
-
File.delete( bundled_app("Jarfile.lock") ) if File.exists? bundled_app("Jarfile.lock")
|
73
|
-
bundle "update"
|
74
|
-
File.exists?( bundled_app("Jarfile.lock") ).should be_true
|
75
|
-
|
76
|
-
LockJar.read( File.join(root,'spec', 'BundlerJarfile.lock') ).should eql( LockJar.read( bundled_app("Jarfile.lock") ) )
|
77
|
-
end
|
78
|
-
|
79
|
-
it "should load Jarfile.lock with Bundle.setup" do
|
80
|
-
LockJar.list( :resolve => true, :local_repo => tmp('test-repo') ) # ensure jars are already downloaded
|
81
|
-
|
82
|
-
ruby <<-RUBY
|
83
|
-
require 'rubygems'
|
84
|
-
require 'bundler'
|
85
|
-
require 'lib/lock_jar/bundler'
|
86
|
-
require 'naether/java'
|
87
|
-
|
88
|
-
LockJar.config( :local_repo => '#{tmp('test-repo')}' )
|
89
|
-
|
90
|
-
Bundler.setup
|
91
|
-
|
92
|
-
puts Naether::Java.create('com.slackworks.modelcitizen.ModelFactory').getClass().toString()
|
93
|
-
RUBY
|
94
|
-
#err.should eq("") # 1.9.3 has a IConv error that outputs to std err
|
95
|
-
out.should match("class com.slackworks.modelcitizen.ModelFactory")
|
96
|
-
end
|
97
|
-
|
98
|
-
end
|