gjp 0.21.0 → 0.22.0
Sign up to get free protection for your applications and to get access to all the features.
- data/README.md +8 -8
- data/integration-tests/{commons-collections.sh → commons.sh} +28 -10
- data/lib/gjp.rb +2 -1
- data/lib/gjp/archiver.rb +61 -10
- data/lib/gjp/build_script_generator.rb +2 -2
- data/lib/gjp/cli.rb +45 -10
- data/lib/gjp/git.rb +2 -0
- data/lib/gjp/kit_runner.rb +79 -0
- data/lib/gjp/kit_spec_adapter.rb +29 -0
- data/lib/gjp/project.rb +33 -11
- data/lib/gjp/spec_generator.rb +18 -11
- data/lib/gjp/version.rb +1 -1
- data/lib/template/kit.spec +10 -2
- data/lib/template/kit/jars/CONTENTS +1 -0
- data/lib/template/package.spec +1 -0
- data/spec/lib/archiver_spec.rb +51 -4
- data/spec/lib/kit_runner_spec.rb +98 -0
- data/spec/lib/project_spec.rb +17 -0
- data/spec/lib/spec_generator_spec.rb +6 -4
- metadata +8 -6
- data/lib/gjp/maven_runner.rb +0 -57
- data/spec/lib/maven_runner_spec.rb +0 -68
data/README.md
CHANGED
@@ -109,26 +109,26 @@ Of course this script can also be manually modified, and it must be in more diff
|
|
109
109
|
|
110
110
|
#### Generating archives and spec files
|
111
111
|
|
112
|
-
The following command will generate the kit
|
112
|
+
The following command will generate the kit archive in `output/galaxy-kit/`:
|
113
113
|
|
114
|
-
gjp generate-kit-
|
115
|
-
less output/galaxy-kit/galaxy-kit.spec
|
114
|
+
gjp generate-kit-archive
|
116
115
|
|
117
|
-
|
118
|
-
You can also edit the spec file manually if you want. When you later regenerate it, `gjp` will automatically try to reconcile changes with a [three-way merge](http://en.wikipedia.org/wiki/Three-way_merge#Three-way_merge).
|
116
|
+
Note that, in later runs, you can also use the `--incremental` option to create an additional "diff" tar.xz file instead of rebuilding it from scratch.
|
119
117
|
|
120
|
-
|
118
|
+
The following command will generate the kit spec:
|
121
119
|
|
122
|
-
gjp generate-kit-
|
120
|
+
gjp generate-kit-spec
|
123
121
|
|
122
|
+
You can inspect the generated "galaxy-kit.spec" file, but in general you should not need to edit it.
|
124
123
|
|
125
124
|
You can then generate the project spec and archive files provided you have a pom file (more formats will be supported in future). In this case:
|
126
125
|
|
127
|
-
gjp generate-package-spec commons-collections src/commons-collections/commons-collections-3.2.1-src/pom.xml
|
128
126
|
gjp generate-package-archive commons-collections
|
127
|
+
gjp generate-package-spec commons-collections src/commons-collections/commons-collections-3.2.1-src/pom.xml
|
129
128
|
less output/commons-collections/commons-collections.spec
|
130
129
|
|
131
130
|
commons-collection BuldRequires galaxy-kit, its archive contains only source files and it will install any produced .jar file in `/usr/lib/java`.
|
131
|
+
You can also edit the specs file manually if you want. When you later regenerate it, `gjp` will automatically try to reconcile changes with a [three-way merge](http://en.wikipedia.org/wiki/Three-way_merge#Three-way_merge).
|
132
132
|
|
133
133
|
Packages are ready to be submitted to an OBS project. As OBS integration is not yet implemented, refer to OBS documentation to do that.
|
134
134
|
|
@@ -2,6 +2,7 @@
|
|
2
2
|
|
3
3
|
# A crude integration test that builds commons-collections
|
4
4
|
|
5
|
+
rm -Rf galaxy
|
5
6
|
mkdir galaxy
|
6
7
|
cd galaxy
|
7
8
|
gjp init
|
@@ -21,20 +22,37 @@ cd ..
|
|
21
22
|
|
22
23
|
gjp dry-run
|
23
24
|
cd src/commons-collections/commons-collections-3.2.1-src/
|
24
|
-
gjp mvn package
|
25
|
+
gjp mvn package -DskipTests
|
26
|
+
cd ../../..
|
25
27
|
gjp finish
|
26
28
|
|
29
|
+
gjp generate-kit-archive
|
30
|
+
gjp generate-kit-spec
|
31
|
+
|
32
|
+
gjp generate-package-archive commons-collections
|
33
|
+
gjp generate-package-spec commons-collections src/commons-collections/commons-collections-3.2.1-src/pom.xml
|
34
|
+
|
35
|
+
|
36
|
+
cd src
|
37
|
+
mkdir commons-fileupload
|
38
|
+
cd commons-fileupload
|
39
|
+
wget http://mirror.nohup.it/apache//commons/fileupload/source/commons-fileupload-1.3-src.zip
|
40
|
+
unzip commons-fileupload-1.3-src.zip
|
41
|
+
rm commons-fileupload-1.3-src.zip
|
42
|
+
|
43
|
+
gjp dry-run
|
44
|
+
cd commons-fileupload-1.3-src/
|
45
|
+
gjp mvn package -DskipTests
|
27
46
|
cd ../../..
|
28
|
-
|
29
|
-
#!/bin/sh
|
30
|
-
cd src/commons-collections/commons-collections-3.2.1-src/
|
31
|
-
../../../kit/apache-maven-3.1.0/bin/mvn -Dmaven.repo.local=`readlink -e ../../../kit/m2` -s`readlink -e ../../../kit/m2/settings.xml` package
|
32
|
-
EOF
|
47
|
+
gjp finish
|
33
48
|
|
49
|
+
gjp generate-kit-archive -i
|
34
50
|
gjp generate-kit-spec
|
35
|
-
gjp generate-kit-archive
|
36
51
|
|
37
|
-
gjp generate-package-
|
38
|
-
gjp generate-package-
|
52
|
+
gjp generate-package-archive commons-fileupload
|
53
|
+
gjp generate-package-spec commons-fileupload src/commons-fileupload/commons-fileupload-1.3-src/pom.xml
|
54
|
+
|
55
|
+
|
56
|
+
echo "**************** All Done ****************"
|
39
57
|
|
40
|
-
|
58
|
+
ls -lah output/*
|
data/lib/gjp.rb
CHANGED
@@ -12,7 +12,8 @@ require "gjp/pom_getter"
|
|
12
12
|
require "gjp/source_address_getter"
|
13
13
|
require "gjp/source_getter"
|
14
14
|
require "gjp/parent_pom_getter"
|
15
|
-
require "gjp/
|
15
|
+
require "gjp/kit_runner"
|
16
|
+
require "gjp/kit_spec_adapter"
|
16
17
|
require "gjp/package_spec_adapter"
|
17
18
|
require "gjp/spec_generator"
|
18
19
|
require "gjp/archiver"
|
data/lib/gjp/archiver.rb
CHANGED
@@ -10,14 +10,25 @@ module Gjp
|
|
10
10
|
end
|
11
11
|
|
12
12
|
# generates an archive for the kit package
|
13
|
-
def archive_kit
|
13
|
+
def archive_kit(incremental)
|
14
14
|
destination_dir = File.join(@project.full_path, "output", "#{@project.name}-kit")
|
15
15
|
FileUtils.mkdir_p(destination_dir)
|
16
|
-
|
16
|
+
destination_file_prefix = "#{@project.name}-kit"
|
17
|
+
destination_file_suffix = ".tar.xz"
|
17
18
|
|
18
|
-
|
19
|
+
@project.take_snapshot "Kit archival started"
|
20
|
+
|
21
|
+
destination_file = if incremental
|
22
|
+
log.debug "doing incremental archive"
|
23
|
+
archive_incremental("kit", destination_dir, destination_file_prefix, destination_file_suffix, :archive_kit)
|
24
|
+
else
|
25
|
+
remove_stale_incremental(destination_dir, destination_file_prefix, destination_file_suffix)
|
26
|
+
archive_single("kit", File.join(destination_dir, destination_file_prefix + destination_file_suffix))
|
27
|
+
end
|
28
|
+
|
29
|
+
@project.take_snapshot "Kit archive generated", :archive_kit
|
19
30
|
|
20
|
-
|
31
|
+
destination_file
|
21
32
|
end
|
22
33
|
|
23
34
|
# generates an archive for a project's package based on its file list
|
@@ -26,16 +37,56 @@ module Gjp
|
|
26
37
|
FileUtils.mkdir_p(destination_dir)
|
27
38
|
destination_file = File.join(destination_dir, "#{name}.tar.xz")
|
28
39
|
|
29
|
-
|
30
|
-
|
31
|
-
Pathname.new(destination_file).relative_path_from Pathname.new(@project.full_path)
|
40
|
+
archive_single(File.join("src", name), destination_file)
|
32
41
|
end
|
33
42
|
|
34
|
-
# archives a
|
35
|
-
def
|
36
|
-
|
43
|
+
# archives a directory's contents to the destination file
|
44
|
+
def archive_single(source_directory, destination_file)
|
45
|
+
log.debug "creating #{destination_file}"
|
46
|
+
@project.from_directory source_directory do
|
37
47
|
`tar -cJf #{destination_file} *`
|
38
48
|
end
|
49
|
+
|
50
|
+
destination_file
|
51
|
+
end
|
52
|
+
|
53
|
+
# archives a directory's changed contents since last time archive_incremental was called
|
54
|
+
# uses snapshots with tag_prefix to keep track of calls to this method
|
55
|
+
# destination files will be destination_file_prefix_NNNN_destination_file_suffix
|
56
|
+
def archive_incremental(source_directory, destination_dir, destination_file_prefix, destination_file_suffix, tag_prefix)
|
57
|
+
@project.from_directory do
|
58
|
+
latest_tag_count = @project.latest_tag_count(tag_prefix)
|
59
|
+
|
60
|
+
if latest_tag_count == 0
|
61
|
+
archive_single(source_directory, File.join(destination_dir, destination_file_prefix + destination_file_suffix))
|
62
|
+
else
|
63
|
+
destination_file = File.join(destination_dir, "#{destination_file_prefix}_#{"%04d" % (latest_tag_count)}#{destination_file_suffix}")
|
64
|
+
tag = @project.latest_tag(tag_prefix)
|
65
|
+
log.debug "creating #{destination_file} with files newer than #{tag}"
|
66
|
+
|
67
|
+
log.debug "files that changed since then: #{@project.git.changed_files_since(tag)}"
|
68
|
+
list = @project.git.changed_files_since(tag).select do |file|
|
69
|
+
File.expand_path(file) =~ /^#{File.expand_path(source_directory)}\//
|
70
|
+
end.map do |file|
|
71
|
+
Pathname.new(file).relative_path_from Pathname.new(source_directory)
|
72
|
+
end
|
73
|
+
@project.from_directory source_directory do
|
74
|
+
`tar -cJf #{destination_file} #{list.join(" ")}`
|
75
|
+
end
|
76
|
+
|
77
|
+
destination_file
|
78
|
+
end
|
79
|
+
end
|
80
|
+
end
|
81
|
+
|
82
|
+
# removes any stale incremental files
|
83
|
+
def remove_stale_incremental(destination_dir, destination_file_prefix, destination_file_suffix)
|
84
|
+
Dir.entries(destination_dir)
|
85
|
+
.select { |f| f =~ /^#{destination_file_prefix}_([0-9]+)#{destination_file_suffix}$/}
|
86
|
+
.each do |f|
|
87
|
+
log.debug "removing stale incremental archive #{f}"
|
88
|
+
File.delete(File.join(destination_dir, f))
|
89
|
+
end
|
39
90
|
end
|
40
91
|
end
|
41
92
|
end
|
@@ -7,7 +7,7 @@ module Gjp
|
|
7
7
|
|
8
8
|
def initialize(project, history_path)
|
9
9
|
@project = project
|
10
|
-
@
|
10
|
+
@kit_runner = Gjp::KitRunner.new(project)
|
11
11
|
@history_path = history_path
|
12
12
|
end
|
13
13
|
|
@@ -29,7 +29,7 @@ module Gjp
|
|
29
29
|
] +
|
30
30
|
relevant_lines.map do |line|
|
31
31
|
if line =~ /gjp +mvn/
|
32
|
-
line.gsub(/gjp +mvn/, "#{@
|
32
|
+
line.gsub(/gjp +mvn/, "#{@kit_runner.get_maven_commandline("$PROJECT_PREFIX")}")
|
33
33
|
else
|
34
34
|
line
|
35
35
|
end
|
data/lib/gjp/cli.rb
CHANGED
@@ -65,13 +65,29 @@ module Gjp
|
|
65
65
|
|
66
66
|
# override parsing in order to pipe everything to mvn
|
67
67
|
def parse(args)
|
68
|
-
@
|
68
|
+
@options = args
|
69
69
|
end
|
70
70
|
|
71
71
|
def execute
|
72
72
|
checking_exceptions do
|
73
73
|
project = Gjp::Project.new(".")
|
74
|
-
Gjp::
|
74
|
+
Gjp::KitRunner.new(project).mvn(@options)
|
75
|
+
end
|
76
|
+
end
|
77
|
+
end
|
78
|
+
|
79
|
+
subcommand "ant", "Locates and runs Ant from any directory in kit/" do
|
80
|
+
parameter "[ANT OPTIONS] ...", "ant options", :attribute_name => "dummy"
|
81
|
+
|
82
|
+
# override parsing in order to pipe everything to mvn
|
83
|
+
def parse(args)
|
84
|
+
@options = args
|
85
|
+
end
|
86
|
+
|
87
|
+
def execute
|
88
|
+
checking_exceptions do
|
89
|
+
project = Gjp::Project.new(".")
|
90
|
+
Gjp::KitRunner.new(project).ant(@options)
|
75
91
|
end
|
76
92
|
end
|
77
93
|
end
|
@@ -93,6 +109,14 @@ module Gjp
|
|
93
109
|
end
|
94
110
|
end
|
95
111
|
|
112
|
+
subcommand "purge-jars", "Locates jars in src/ and moves them to kit/" do
|
113
|
+
def execute
|
114
|
+
Gjp::Project.new(".").purge_jars.each do |original, final|
|
115
|
+
puts "Replaced #{original} with symlink pointing to to #{final}"
|
116
|
+
end
|
117
|
+
end
|
118
|
+
end
|
119
|
+
|
96
120
|
subcommand "generate-build-script", "Create or refresh a build.sh file" do
|
97
121
|
parameter "NAME", "name of a package, that is, an src/ subdirectory name"
|
98
122
|
def execute
|
@@ -100,7 +124,7 @@ module Gjp
|
|
100
124
|
project = Gjp::Project.new(".")
|
101
125
|
history_file = File.join(Dir.home, ".bash_history")
|
102
126
|
result_path, conflict_count = Gjp::BuildScriptGenerator.new(project, history_file).generate_build_script(name)
|
103
|
-
puts "#{result_path} generated"
|
127
|
+
puts "#{format_path(result_path, project)} generated"
|
104
128
|
if conflict_count > 0
|
105
129
|
puts "Warning: #{conflict_count} unresolved conflicts"
|
106
130
|
end
|
@@ -113,7 +137,7 @@ module Gjp
|
|
113
137
|
checking_exceptions do
|
114
138
|
project = Gjp::Project.new(".")
|
115
139
|
result_path, conflict_count = Gjp::SpecGenerator.new(project).generate_kit_spec
|
116
|
-
puts "#{result_path} generated"
|
140
|
+
puts "#{format_path(result_path, project)} generated"
|
117
141
|
if conflict_count > 0
|
118
142
|
puts "Warning: #{conflict_count} unresolved conflicts"
|
119
143
|
end
|
@@ -122,11 +146,12 @@ module Gjp
|
|
122
146
|
end
|
123
147
|
|
124
148
|
subcommand "generate-kit-archive", "Create or refresh the kit tarball" do
|
149
|
+
option ["-i", "--incremental"], :flag, "create an archive with only the difference from the previous one"
|
125
150
|
def execute
|
126
151
|
checking_exceptions do
|
127
152
|
project = Gjp::Project.new(".")
|
128
|
-
result_path = Gjp::Archiver.new(project).archive_kit
|
129
|
-
puts "#{result_path} generated"
|
153
|
+
result_path = Gjp::Archiver.new(project).archive_kit(incremental?)
|
154
|
+
puts "#{format_path(result_path, project)} generated"
|
130
155
|
end
|
131
156
|
end
|
132
157
|
end
|
@@ -139,7 +164,7 @@ module Gjp
|
|
139
164
|
checking_exceptions do
|
140
165
|
project = Gjp::Project.new(".")
|
141
166
|
result_path, conflict_count = Gjp::SpecGenerator.new(project).generate_package_spec name, pom, filter
|
142
|
-
puts "#{result_path} generated"
|
167
|
+
puts "#{format_path(result_path, project)} generated"
|
143
168
|
if conflict_count > 0
|
144
169
|
puts "Warning: #{conflict_count} unresolved conflicts"
|
145
170
|
end
|
@@ -153,7 +178,7 @@ module Gjp
|
|
153
178
|
checking_exceptions do
|
154
179
|
project = Gjp::Project.new(".")
|
155
180
|
result_path = Gjp::Archiver.new(project).archive_package name
|
156
|
-
puts "#{result_path} generated"
|
181
|
+
puts "#{format_path(result_path, project)} generated"
|
157
182
|
end
|
158
183
|
end
|
159
184
|
end
|
@@ -226,6 +251,16 @@ module Gjp
|
|
226
251
|
end
|
227
252
|
end
|
228
253
|
|
254
|
+
# generates a version of path relative to the current directory
|
255
|
+
def format_path(path, project)
|
256
|
+
full_path = if Pathname.new(path).relative?
|
257
|
+
File.join(project.full_path, path)
|
258
|
+
else
|
259
|
+
path
|
260
|
+
end
|
261
|
+
Pathname.new(full_path).relative_path_from(Pathname.new(Dir.pwd))
|
262
|
+
end
|
263
|
+
|
229
264
|
# handles most fatal exceptions
|
230
265
|
def checking_exceptions
|
231
266
|
begin
|
@@ -240,8 +275,8 @@ module Gjp
|
|
240
275
|
$stderr.puts "This is not a gjp project directory, see gjp init"
|
241
276
|
rescue GitAlreadyInitedException
|
242
277
|
$stderr.puts "This directory is already a gjp project"
|
243
|
-
rescue Gjp::
|
244
|
-
$stderr.puts "
|
278
|
+
rescue Gjp::ExecutableNotFoundException
|
279
|
+
$stderr.puts "Executable not found in kit/ or any of its subdirectories"
|
245
280
|
end
|
246
281
|
end
|
247
282
|
end
|
data/lib/gjp/git.rb
CHANGED
@@ -80,7 +80,9 @@ module Gjp
|
|
80
80
|
# returns the conflict count
|
81
81
|
def merge_with_tag(path, new_path, tag)
|
82
82
|
Dir.chdir(@directory) do
|
83
|
+
log.debug "calling git show gjp_#{tag}:#{path} > #{path}.old_version, output follows"
|
83
84
|
`git show gjp_#{tag}:#{path} > #{path}.old_version`
|
85
|
+
log.debug "calling git merge-file #{path} #{path}.old_version #{new_path}, output follows"
|
84
86
|
`git merge-file #{path} #{path}.old_version #{new_path} -L "newly generated" -L "previously generated" -L "user edited"`
|
85
87
|
conflict_count = $?.exitstatus
|
86
88
|
File.delete "#{path}.old_version"
|
@@ -0,0 +1,79 @@
|
|
1
|
+
# encoding: UTF-8
|
2
|
+
|
3
|
+
require 'find'
|
4
|
+
require 'pathname'
|
5
|
+
|
6
|
+
module Gjp
|
7
|
+
# runs programs from a gjp kit with gjp-specific options
|
8
|
+
class KitRunner
|
9
|
+
include Logger
|
10
|
+
|
11
|
+
def initialize(project)
|
12
|
+
@project = project
|
13
|
+
end
|
14
|
+
|
15
|
+
# finds an executable in a bin/ subdirectory of kit
|
16
|
+
def find_executable(name)
|
17
|
+
@project.from_directory do
|
18
|
+
Find.find("kit") do |path|
|
19
|
+
if path =~ /bin\/#{name}$/
|
20
|
+
log.debug("found #{name} executable: #{path}")
|
21
|
+
return path
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
26
|
+
log.debug("#{name} executable not found")
|
27
|
+
nil
|
28
|
+
end
|
29
|
+
|
30
|
+
# runs an external executable
|
31
|
+
def run_executable(full_commandline)
|
32
|
+
log.debug "running #{full_commandline}"
|
33
|
+
Process.wait(Process.spawn(full_commandline))
|
34
|
+
end
|
35
|
+
|
36
|
+
# runs mvn in a subprocess
|
37
|
+
def mvn(options)
|
38
|
+
run_executable "#{get_maven_commandline(@project.full_path)} #{options.join(' ')}"
|
39
|
+
end
|
40
|
+
|
41
|
+
# returns a command line for running Maven from the specified
|
42
|
+
# prefix
|
43
|
+
def get_maven_commandline(prefix)
|
44
|
+
executable = find_executable("mvn")
|
45
|
+
|
46
|
+
if executable != nil
|
47
|
+
mvn_path = File.join(prefix, executable)
|
48
|
+
repo_path = File.join(prefix, "kit", "m2")
|
49
|
+
config_path = File.join(prefix, "kit", "m2", "settings.xml")
|
50
|
+
|
51
|
+
"#{mvn_path} -Dmaven.repo.local=#{repo_path} -s#{config_path}"
|
52
|
+
else
|
53
|
+
raise ExecutableNotFoundException
|
54
|
+
end
|
55
|
+
end
|
56
|
+
|
57
|
+
# runs mvn in a subprocess
|
58
|
+
def ant(options)
|
59
|
+
run_executable "#{get_ant_commandline(@project.full_path)} #{options.join(' ')}"
|
60
|
+
end
|
61
|
+
|
62
|
+
# returns a command line for running Ant from the specified
|
63
|
+
# prefix
|
64
|
+
def get_ant_commandline(prefix)
|
65
|
+
executable = find_executable("ant")
|
66
|
+
|
67
|
+
if executable != nil
|
68
|
+
ant_path = File.join(prefix, executable)
|
69
|
+
|
70
|
+
"#{ant_path}"
|
71
|
+
else
|
72
|
+
raise ExecutableNotFoundException
|
73
|
+
end
|
74
|
+
end
|
75
|
+
end
|
76
|
+
|
77
|
+
class ExecutableNotFoundException < Exception
|
78
|
+
end
|
79
|
+
end
|
@@ -0,0 +1,29 @@
|
|
1
|
+
# encoding: UTF-8
|
2
|
+
|
3
|
+
module Gjp
|
4
|
+
# encapsulates details of a kit needed by the spec file
|
5
|
+
# retrieving them from other objects
|
6
|
+
class KitSpecAdapter
|
7
|
+
attr_reader :name
|
8
|
+
attr_reader :version
|
9
|
+
attr_reader :archives
|
10
|
+
|
11
|
+
def initialize(project)
|
12
|
+
@name = project.name
|
13
|
+
@version = project.version
|
14
|
+
|
15
|
+
@archives =
|
16
|
+
project.from_directory do
|
17
|
+
["#{name}-kit.tar.xz"] +
|
18
|
+
Dir.entries("output/#{name}-kit")
|
19
|
+
.select { |f| f =~ /_[0-9]+.tar.xz$/ }
|
20
|
+
.sort
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
def get_binding
|
25
|
+
binding
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
29
|
+
|
data/lib/gjp/project.rb
CHANGED
@@ -8,12 +8,21 @@ module Gjp
|
|
8
8
|
include Logger
|
9
9
|
|
10
10
|
attr_accessor :full_path
|
11
|
+
attr_accessor :git
|
11
12
|
|
12
13
|
def initialize(path)
|
13
14
|
@full_path = Gjp::Project.find_project_dir(File.expand_path(path))
|
14
15
|
@git = Gjp::Git.new(@full_path)
|
15
16
|
end
|
16
17
|
|
18
|
+
def name
|
19
|
+
File.basename(@full_path)
|
20
|
+
end
|
21
|
+
|
22
|
+
def version
|
23
|
+
latest_tag_count(:dry_run_finished)
|
24
|
+
end
|
25
|
+
|
17
26
|
# finds the project directory up in the tree, like git does
|
18
27
|
def self.find_project_dir(starting_dir)
|
19
28
|
result = starting_dir
|
@@ -145,19 +154,24 @@ module Gjp
|
|
145
154
|
# returns the number of conflicts
|
146
155
|
def merge_new_content(new_content, path, snapshot_message, tag_prefix)
|
147
156
|
from_directory do
|
157
|
+
log.debug "merging new content to #{path} with prefix #{tag_prefix}"
|
148
158
|
already_existing = File.exist? path
|
149
159
|
previous_tag = latest_tag(tag_prefix)
|
150
160
|
|
151
161
|
if already_existing
|
162
|
+
log.debug "moving #{path} to #{path}.gjp_user_edited"
|
152
163
|
File.rename path, "#{path}.gjp_user_edited"
|
153
164
|
end
|
154
165
|
|
155
166
|
File.open(path, "w") { |io| io.write(new_content) }
|
167
|
+
log.debug "taking snapshot with new content: #{snapshot_message}"
|
156
168
|
take_snapshot(snapshot_message, tag_prefix)
|
157
169
|
|
158
170
|
if already_existing
|
159
171
|
if previous_tag == ""
|
160
172
|
previous_tag = latest_tag(tag_prefix)
|
173
|
+
log.debug "there was no tag with prefix #{tag_prefix} before snapshot"
|
174
|
+
log.debug "defaulting to #{previous_tag} after snapshot"
|
161
175
|
end
|
162
176
|
|
163
177
|
# 3-way merge
|
@@ -204,18 +218,26 @@ module Gjp
|
|
204
218
|
end
|
205
219
|
|
206
220
|
|
207
|
-
#
|
208
|
-
|
209
|
-
|
210
|
-
|
211
|
-
|
212
|
-
|
213
|
-
|
214
|
-
|
215
|
-
|
221
|
+
# moves any .jar from src/ to kit/ and links it back
|
222
|
+
def purge_jars
|
223
|
+
from_directory do
|
224
|
+
result = []
|
225
|
+
Find.find("src") do |file|
|
226
|
+
if file =~ /.jar$/ and not File.symlink?(file)
|
227
|
+
new_location = File.join("kit", "jars", Pathname.new(file).split[1])
|
228
|
+
FileUtils.mv(file, new_location)
|
229
|
+
|
230
|
+
link_target = Pathname.new(new_location)
|
231
|
+
.relative_path_from(Pathname.new(file).split.first)
|
232
|
+
.to_s
|
233
|
+
|
234
|
+
File.symlink(link_target, file)
|
235
|
+
result << [file, new_location]
|
236
|
+
end
|
237
|
+
end
|
216
238
|
|
217
|
-
|
218
|
-
|
239
|
+
result
|
240
|
+
end
|
219
241
|
end
|
220
242
|
end
|
221
243
|
|
data/lib/gjp/spec_generator.rb
CHANGED
@@ -10,22 +10,29 @@ module Gjp
|
|
10
10
|
end
|
11
11
|
|
12
12
|
def generate_kit_spec
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
13
|
+
@project.from_directory do
|
14
|
+
destination_dir = File.join("output", "#{@project.name}-kit")
|
15
|
+
FileUtils.mkdir_p(destination_dir)
|
16
|
+
spec_path = File.join(destination_dir, "#{@project.name}-kit.spec")
|
17
|
+
|
18
|
+
adapter = Gjp::KitSpecAdapter.new(@project)
|
19
|
+
|
20
|
+
conflict_count = generate_merging("kit.spec", adapter.get_binding, spec_path, :generate_kit_spec)
|
21
|
+
[spec_path, conflict_count]
|
22
|
+
end
|
18
23
|
end
|
19
24
|
|
20
25
|
def generate_package_spec(name, pom, filter)
|
21
|
-
|
22
|
-
|
23
|
-
|
26
|
+
@project.from_directory do
|
27
|
+
destination_dir = File.join("output", name)
|
28
|
+
FileUtils.mkdir_p(destination_dir)
|
29
|
+
spec_path = File.join(destination_dir, "#{name}.spec")
|
24
30
|
|
25
|
-
|
31
|
+
adapter = Gjp::PackageSpecAdapter.new(@project, name, Gjp::Pom.new(pom), filter)
|
26
32
|
|
27
|
-
|
28
|
-
|
33
|
+
conflict_count = generate_merging("package.spec", adapter.get_binding, spec_path, "generate_#{name}_spec")
|
34
|
+
[spec_path, conflict_count]
|
35
|
+
end
|
29
36
|
end
|
30
37
|
|
31
38
|
# generates a spec file from a template and 3-way merges it
|
data/lib/gjp/version.rb
CHANGED
data/lib/template/kit.spec
CHANGED
@@ -22,7 +22,9 @@ License: Apache-2.0
|
|
22
22
|
Summary: Build-time dependencies for gjp project <%= name %>
|
23
23
|
Url: https://github.com/SilvioMoioli/gjp
|
24
24
|
Group: Development/Libraries/Java
|
25
|
-
|
25
|
+
<% archives.each_with_index do |archive, i| %>
|
26
|
+
Source<%= i %>: <%= archive %>
|
27
|
+
<% end %>
|
26
28
|
BuildRoot: %{_tmppath}/%{name}-%{version}-build
|
27
29
|
BuildArch: noarch
|
28
30
|
BuildRequires: xz
|
@@ -38,7 +40,13 @@ not be used except for rebuilding those packages and it should never
|
|
38
40
|
be installed on end users' systems.
|
39
41
|
|
40
42
|
%prep
|
41
|
-
|
43
|
+
<% (0..(archives.length-1)).each do |i| %>
|
44
|
+
<% if i > 0 %>
|
45
|
+
%setup -q -c -T -D -b <%= i %>
|
46
|
+
<% else %>
|
47
|
+
%setup -q -c -T -b <%= i %>
|
48
|
+
<% end %>
|
49
|
+
<% end %>
|
42
50
|
|
43
51
|
%build
|
44
52
|
# nothing to do, gjp kits are precompiled by design
|
@@ -0,0 +1 @@
|
|
1
|
+
This directory contains jars moved here from source archives.
|
data/lib/template/package.spec
CHANGED
@@ -29,6 +29,7 @@ BuildRequires: java-devel
|
|
29
29
|
BuildRequires: <%= project_name %>-kit >= <%= project_version %>
|
30
30
|
BuildArch: noarch
|
31
31
|
Provides: mvn(<%= group_id %>:<%= artifact_id %>) == <%= version %>
|
32
|
+
Requires: java
|
32
33
|
<% runtime_dependency_ids.each do |dependency_id| %>
|
33
34
|
Requires: mvn(<%= dependency_id[0] %>:<%= dependency_id[1] %>) <% if dependency_id[3] != nil %>==<%= dependency_id[3] %><% end %>
|
34
35
|
<% end %>
|
data/spec/lib/archiver_spec.rb
CHANGED
@@ -17,28 +17,75 @@ describe Gjp::Archiver do
|
|
17
17
|
|
18
18
|
let(:archiver) { Gjp::Archiver.new(@project) }
|
19
19
|
|
20
|
-
describe "#
|
20
|
+
describe "#archive_single" do
|
21
21
|
it "archives a list of files" do
|
22
22
|
@project.from_directory do
|
23
23
|
File.open("test", "w") { |io| io.puts "test content" }
|
24
24
|
|
25
|
-
archiver.
|
25
|
+
archiver.archive_single(".", "test.tar.xz")
|
26
26
|
`tar -Jtf test.tar.xz`.split.should include("test")
|
27
27
|
end
|
28
28
|
end
|
29
29
|
end
|
30
30
|
|
31
|
+
describe "#archive_incremental" do
|
32
|
+
it "archives an increment of a directory" do
|
33
|
+
@project.from_directory do
|
34
|
+
File.open("test", "w") { |io| io.puts "test content 1" }
|
35
|
+
File.open("test2", "w") { |io| io.puts "test content 1" }
|
36
|
+
archiver.archive_incremental(".", ".", "test", ".tar.xz", :archive_kit)
|
37
|
+
`tar -Jtf test.tar.xz`.split.should include("test")
|
38
|
+
|
39
|
+
@project.take_snapshot("test archive snapshot 1", :archive_kit)
|
40
|
+
|
41
|
+
File.open("test", "w") { |io| io.puts "test content 2" }
|
42
|
+
File.open("test3", "w") { |io| io.puts "test content 2" }
|
43
|
+
|
44
|
+
@project.take_snapshot("test archive snapshot 2")
|
45
|
+
|
46
|
+
archiver.archive_incremental(".", ".", "test", ".tar.xz", :archive_kit)
|
47
|
+
files = `tar -Jtf test_0001.tar.xz`.split
|
48
|
+
|
49
|
+
files.should include("test")
|
50
|
+
files.should include("test3")
|
51
|
+
files.should_not include("test2")
|
52
|
+
end
|
53
|
+
end
|
54
|
+
end
|
55
|
+
|
31
56
|
describe "#archive_kit" do
|
32
|
-
it "archives a kit package files" do
|
57
|
+
it "archives a kit package files, not incrementally" do
|
58
|
+
@project.from_directory do
|
59
|
+
File.open(File.join("kit","kit_test"), "w") { |io| io.puts "test content" }
|
60
|
+
end
|
61
|
+
@project.finish(false)
|
62
|
+
|
63
|
+
archiver.archive_kit(false)
|
64
|
+
@project.from_directory do
|
65
|
+
`tar -Jtf output/test-project-kit/test-project-kit.tar.xz`.split.should include("kit_test")
|
66
|
+
end
|
67
|
+
end
|
68
|
+
it "archives a kit package files incrementally" do
|
33
69
|
@project.from_directory do
|
34
70
|
File.open(File.join("kit","kit_test"), "w") { |io| io.puts "test content" }
|
35
71
|
end
|
36
72
|
@project.finish(false)
|
37
73
|
|
38
|
-
archiver.archive_kit
|
74
|
+
archiver.archive_kit(true)
|
39
75
|
@project.from_directory do
|
40
76
|
`tar -Jtf output/test-project-kit/test-project-kit.tar.xz`.split.should include("kit_test")
|
41
77
|
end
|
78
|
+
|
79
|
+
@project.from_directory do
|
80
|
+
File.open(File.join("kit","kit_test2"), "w") { |io| io.puts "test content" }
|
81
|
+
end
|
82
|
+
|
83
|
+
archiver.archive_kit(true)
|
84
|
+
@project.from_directory do
|
85
|
+
files = `tar -Jtf output/test-project-kit/test-project-kit_0001.tar.xz`.split
|
86
|
+
files.should include("kit_test2")
|
87
|
+
files.should_not include("kit_test")
|
88
|
+
end
|
42
89
|
end
|
43
90
|
end
|
44
91
|
|
@@ -0,0 +1,98 @@
|
|
1
|
+
# encoding: UTF-8
|
2
|
+
|
3
|
+
require 'spec_helper'
|
4
|
+
|
5
|
+
describe Gjp::KitRunner do
|
6
|
+
|
7
|
+
before(:each) do
|
8
|
+
@project_path = File.join("spec", "data", "test-project")
|
9
|
+
Dir.mkdir(@project_path)
|
10
|
+
|
11
|
+
Gjp::Project.init(@project_path)
|
12
|
+
@project = Gjp::Project.new(@project_path)
|
13
|
+
@kit_runner = Gjp::KitRunner.new(@project)
|
14
|
+
end
|
15
|
+
|
16
|
+
after(:each) do
|
17
|
+
FileUtils.rm_rf(@project_path)
|
18
|
+
end
|
19
|
+
|
20
|
+
describe "#find_executable" do
|
21
|
+
it "finds an executable in kit" do
|
22
|
+
mock_executable("mvn")
|
23
|
+
@kit_runner.find_executable("mvn").should eq @executable
|
24
|
+
end
|
25
|
+
it "doesn't find a Maven executable in kit" do
|
26
|
+
@kit_runner.find_executable("mvn").should be_nil
|
27
|
+
end
|
28
|
+
end
|
29
|
+
|
30
|
+
describe "#get_maven_commandline" do
|
31
|
+
it "returns commandline options for running maven" do
|
32
|
+
mock_executable("mvn")
|
33
|
+
|
34
|
+
@project.from_directory do
|
35
|
+
commandline = @kit_runner.get_maven_commandline(".")
|
36
|
+
commandline.should eq "./#{@executable} -Dmaven.repo.local=./kit/m2 -s./kit/m2/settings.xml"
|
37
|
+
end
|
38
|
+
end
|
39
|
+
it "doesn't return commandline options if Maven is not available" do
|
40
|
+
expect { @kit_runner.get_maven_commandline(".") }.to raise_error(Gjp::ExecutableNotFoundException)
|
41
|
+
end
|
42
|
+
end
|
43
|
+
|
44
|
+
describe "#mvn" do
|
45
|
+
it "runs maven" do
|
46
|
+
mock_executable("mvn")
|
47
|
+
@project.from_directory do
|
48
|
+
@kit_runner.mvn(["extra-option"])
|
49
|
+
File.read("test_out").strip.should match /extra-option$/
|
50
|
+
end
|
51
|
+
end
|
52
|
+
it "doesn't run Maven if it is not available" do
|
53
|
+
@project.from_directory do
|
54
|
+
expect { @kit_runner.mvn([]) }.to raise_error(Gjp::ExecutableNotFoundException)
|
55
|
+
end
|
56
|
+
end
|
57
|
+
end
|
58
|
+
|
59
|
+
|
60
|
+
describe "#get_ant_commandline" do
|
61
|
+
it "returns commandline options for running Ant" do
|
62
|
+
mock_executable("ant")
|
63
|
+
|
64
|
+
@project.from_directory do
|
65
|
+
commandline = @kit_runner.get_ant_commandline(".")
|
66
|
+
commandline.should eq "./#{@executable}"
|
67
|
+
end
|
68
|
+
end
|
69
|
+
it "doesn't return commandline options if Ant is not available" do
|
70
|
+
expect { @kit_runner.get_ant_commandline(".") }.to raise_error(Gjp::ExecutableNotFoundException)
|
71
|
+
end
|
72
|
+
end
|
73
|
+
|
74
|
+
describe "#ant" do
|
75
|
+
it "runs Ant" do
|
76
|
+
mock_executable("ant")
|
77
|
+
@project.from_directory do
|
78
|
+
@kit_runner.ant(["extra-option"])
|
79
|
+
File.read("test_out").strip.should match /extra-option$/
|
80
|
+
end
|
81
|
+
end
|
82
|
+
it "doesn't run Ant if it is not available" do
|
83
|
+
@project.from_directory do
|
84
|
+
expect { @kit_runner.ant([]) }.to raise_error(Gjp::ExecutableNotFoundException)
|
85
|
+
end
|
86
|
+
end
|
87
|
+
end
|
88
|
+
|
89
|
+
def mock_executable(executable)
|
90
|
+
Dir.chdir(@project_path) do
|
91
|
+
@bin_dir = File.join("kit", executable, "bin")
|
92
|
+
FileUtils.mkdir_p(@bin_dir)
|
93
|
+
@executable = File.join(@bin_dir, executable)
|
94
|
+
File.open(@executable, "w") { |io| io.puts "echo $0 $*>test_out" }
|
95
|
+
File.chmod(0777, @executable)
|
96
|
+
end
|
97
|
+
end
|
98
|
+
end
|
data/spec/lib/project_spec.rb
CHANGED
@@ -158,6 +158,23 @@ describe Gjp::Project do
|
|
158
158
|
`git diff-tree --no-commit-id --name-only -r HEAD`.split("\n").should include("src/test")
|
159
159
|
`git cat-file tag gjp_dry_run_started_1 | tail -1`.should include("src")
|
160
160
|
end
|
161
|
+
end
|
162
|
+
end
|
163
|
+
|
164
|
+
describe "#purge_jars" do
|
165
|
+
it "moves jars in kit/jars" do
|
166
|
+
@project.from_directory do
|
167
|
+
`echo "jarring" > src/test.jar`
|
168
|
+
end
|
169
|
+
@project.finish(false).should be_false
|
170
|
+
|
171
|
+
@project.purge_jars
|
172
|
+
|
173
|
+
@project.from_directory do
|
174
|
+
File.symlink?(File.join("src", "test.jar")).should be_true
|
175
|
+
File.readlink(File.join("src", "test.jar")).should eq "../kit/jars/test.jar"
|
176
|
+
File.readlines(File.join("kit", "jars", "test.jar")).should include("jarring\n")
|
177
|
+
end
|
161
178
|
end
|
162
179
|
end
|
163
180
|
end
|
@@ -32,7 +32,7 @@ describe Gjp::SpecGenerator do
|
|
32
32
|
spec_lines = File.readlines(File.join("output", "test-project-kit", "test-project-kit.spec"))
|
33
33
|
spec_lines.should include("Name: test-project-kit\n")
|
34
34
|
spec_lines.should include("Version: 1\n")
|
35
|
-
spec_lines.should include("Source0:
|
35
|
+
spec_lines.should include("Source0: test-project-kit.tar.xz\n")
|
36
36
|
end
|
37
37
|
end
|
38
38
|
it "generates a second version" do
|
@@ -54,7 +54,7 @@ describe Gjp::SpecGenerator do
|
|
54
54
|
spec_lines = File.readlines(File.join("output", "test-project-kit", "test-project-kit.spec"))
|
55
55
|
spec_lines.should include("Name: test-project-kit\n")
|
56
56
|
spec_lines.should include("Version: 2\n")
|
57
|
-
spec_lines.should include("Source0:
|
57
|
+
spec_lines.should include("Source0: test-project-kit.tar.xz\n")
|
58
58
|
spec_lines.should include("nonconflicting line\n")
|
59
59
|
end
|
60
60
|
end
|
@@ -81,7 +81,7 @@ describe Gjp::SpecGenerator do
|
|
81
81
|
@project.from_directory do
|
82
82
|
spec_lines = File.readlines(File.join("output", "test-project-kit", "test-project-kit.spec"))
|
83
83
|
spec_lines.should include("Name: test-project-kit\n")
|
84
|
-
spec_lines.should include("Source0:
|
84
|
+
spec_lines.should include("Source0: test-project-kit.tar.xz\n")
|
85
85
|
spec_lines.should include("<<<<<<< newly generated\n")
|
86
86
|
spec_lines.should include("Version: 2\n")
|
87
87
|
spec_lines.should include("=======\n")
|
@@ -109,10 +109,12 @@ describe Gjp::SpecGenerator do
|
|
109
109
|
`touch src/test/out/test#{i}.jar`
|
110
110
|
end
|
111
111
|
|
112
|
+
|
112
113
|
@project.finish(false)
|
113
114
|
end
|
114
115
|
|
115
|
-
|
116
|
+
FileUtils.copy(File.join("spec", "data", "nailgun", "pom.xml"), @project_path)
|
117
|
+
@spec_generator.generate_package_spec "test", "pom.xml", "*.jar"
|
116
118
|
|
117
119
|
@project.from_directory do
|
118
120
|
spec_lines = File.readlines(File.join("output", "test", "test.spec"))
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: gjp
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.22.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: 2013-10-
|
12
|
+
date: 2013-10-11 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: rake
|
@@ -155,15 +155,16 @@ files:
|
|
155
155
|
- Rakefile
|
156
156
|
- bin/gjp
|
157
157
|
- gjp.gemspec
|
158
|
-
- integration-tests/commons
|
158
|
+
- integration-tests/commons.sh
|
159
159
|
- lib/gjp.rb
|
160
160
|
- lib/gjp/archiver.rb
|
161
161
|
- lib/gjp/build_script_generator.rb
|
162
162
|
- lib/gjp/cli.rb
|
163
163
|
- lib/gjp/git.rb
|
164
|
+
- lib/gjp/kit_runner.rb
|
165
|
+
- lib/gjp/kit_spec_adapter.rb
|
164
166
|
- lib/gjp/limited_network_user.rb
|
165
167
|
- lib/gjp/logger.rb
|
166
|
-
- lib/gjp/maven_runner.rb
|
167
168
|
- lib/gjp/maven_website.rb
|
168
169
|
- lib/gjp/package_spec_adapter.rb
|
169
170
|
- lib/gjp/parent_pom_getter.rb
|
@@ -178,6 +179,7 @@ files:
|
|
178
179
|
- lib/gjp/version_matcher.rb
|
179
180
|
- lib/template/kit.spec
|
180
181
|
- lib/template/kit/CONTENTS
|
182
|
+
- lib/template/kit/jars/CONTENTS
|
181
183
|
- lib/template/kit/m2/settings.xml
|
182
184
|
- lib/template/output/.gitignore
|
183
185
|
- lib/template/output/CONTENTS
|
@@ -201,8 +203,8 @@ files:
|
|
201
203
|
- spec/data/tomcat/pom.xml
|
202
204
|
- spec/lib/archiver_spec.rb
|
203
205
|
- spec/lib/build_script_generator_spec.rb
|
206
|
+
- spec/lib/kit_runner_spec.rb
|
204
207
|
- spec/lib/limited_network_user_spec_interactive.rb
|
205
|
-
- spec/lib/maven_runner_spec.rb
|
206
208
|
- spec/lib/maven_website_spec.rb
|
207
209
|
- spec/lib/parent_pom_getter_spec.rb
|
208
210
|
- spec/lib/pom_getter_spec.rb
|
@@ -258,8 +260,8 @@ test_files:
|
|
258
260
|
- spec/data/tomcat/pom.xml
|
259
261
|
- spec/lib/archiver_spec.rb
|
260
262
|
- spec/lib/build_script_generator_spec.rb
|
263
|
+
- spec/lib/kit_runner_spec.rb
|
261
264
|
- spec/lib/limited_network_user_spec_interactive.rb
|
262
|
-
- spec/lib/maven_runner_spec.rb
|
263
265
|
- spec/lib/maven_website_spec.rb
|
264
266
|
- spec/lib/parent_pom_getter_spec.rb
|
265
267
|
- spec/lib/pom_getter_spec.rb
|
data/lib/gjp/maven_runner.rb
DELETED
@@ -1,57 +0,0 @@
|
|
1
|
-
# encoding: UTF-8
|
2
|
-
|
3
|
-
require 'find'
|
4
|
-
require 'pathname'
|
5
|
-
|
6
|
-
module Gjp
|
7
|
-
# runs Maven from a gjp kit with gjp-specific options
|
8
|
-
class MavenRunner
|
9
|
-
include Logger
|
10
|
-
|
11
|
-
def initialize(project)
|
12
|
-
@project = project
|
13
|
-
end
|
14
|
-
|
15
|
-
# finds mvn in kit
|
16
|
-
def find_maven_executable
|
17
|
-
@project.from_directory do
|
18
|
-
Find.find("kit") do |path|
|
19
|
-
if path =~ /bin\/mvn$/
|
20
|
-
log.debug("found Maven executable: #{path}")
|
21
|
-
return path
|
22
|
-
end
|
23
|
-
end
|
24
|
-
end
|
25
|
-
|
26
|
-
log.debug("Maven executable not found")
|
27
|
-
nil
|
28
|
-
end
|
29
|
-
|
30
|
-
# returns a command line for running Maven from the specified
|
31
|
-
# prefix
|
32
|
-
def get_maven_commandline(prefix)
|
33
|
-
maven_executable = find_maven_executable
|
34
|
-
|
35
|
-
if maven_executable != nil
|
36
|
-
mvn_path = File.join(prefix, maven_executable)
|
37
|
-
repo_path = File.join(prefix, "kit", "m2")
|
38
|
-
config_path = File.join(prefix, "kit", "m2", "settings.xml")
|
39
|
-
|
40
|
-
"#{mvn_path} -Dmaven.repo.local=#{repo_path} -s#{config_path}"
|
41
|
-
else
|
42
|
-
raise MavenNotFoundException
|
43
|
-
end
|
44
|
-
end
|
45
|
-
|
46
|
-
# runs mvn in a subprocess
|
47
|
-
def mvn(options)
|
48
|
-
full_commandline = "#{get_maven_commandline(@project.full_path)} #{options.join(' ')}"
|
49
|
-
log.debug full_commandline
|
50
|
-
|
51
|
-
Process.wait(Process.spawn(full_commandline))
|
52
|
-
end
|
53
|
-
end
|
54
|
-
|
55
|
-
class MavenNotFoundException < Exception
|
56
|
-
end
|
57
|
-
end
|
@@ -1,68 +0,0 @@
|
|
1
|
-
# encoding: UTF-8
|
2
|
-
|
3
|
-
require 'spec_helper'
|
4
|
-
|
5
|
-
describe Gjp::MavenRunner do
|
6
|
-
|
7
|
-
before(:each) do
|
8
|
-
@project_path = File.join("spec", "data", "test-project")
|
9
|
-
Dir.mkdir(@project_path)
|
10
|
-
|
11
|
-
Gjp::Project.init(@project_path)
|
12
|
-
@project = Gjp::Project.new(@project_path)
|
13
|
-
@maven_runner = Gjp::MavenRunner.new(@project)
|
14
|
-
end
|
15
|
-
|
16
|
-
after(:each) do
|
17
|
-
FileUtils.rm_rf(@project_path)
|
18
|
-
end
|
19
|
-
|
20
|
-
describe "#find_maven_executable" do
|
21
|
-
it "finds a Maven executable in kit" do
|
22
|
-
mock_maven_executable
|
23
|
-
@maven_runner.find_maven_executable.should eq @maven_executable
|
24
|
-
end
|
25
|
-
it "doesn't find a Maven executable in kit" do
|
26
|
-
@maven_runner.find_maven_executable.should be_nil
|
27
|
-
end
|
28
|
-
end
|
29
|
-
|
30
|
-
describe "#get_maven_commandline" do
|
31
|
-
it "returns commandline options for running maven" do
|
32
|
-
mock_maven_executable
|
33
|
-
|
34
|
-
@project.from_directory do
|
35
|
-
commandline = @maven_runner.get_maven_commandline(".")
|
36
|
-
commandline.should eq "./#{@maven_executable} -Dmaven.repo.local=./kit/m2 -s./kit/m2/settings.xml"
|
37
|
-
end
|
38
|
-
end
|
39
|
-
it "doesn't return commandline options if Maven is not available" do
|
40
|
-
expect { @maven_runner.get_maven_commandline(".") }.to raise_error(Gjp::MavenNotFoundException)
|
41
|
-
end
|
42
|
-
end
|
43
|
-
|
44
|
-
describe "#mvn" do
|
45
|
-
it "runs maven" do
|
46
|
-
mock_maven_executable
|
47
|
-
@project.from_directory do
|
48
|
-
@maven_runner.mvn(["extra-option"])
|
49
|
-
File.read("test_out").strip.should match /extra-option$/
|
50
|
-
end
|
51
|
-
end
|
52
|
-
it "doesn't run Maven if it is not available" do
|
53
|
-
@project.from_directory do
|
54
|
-
expect { @maven_runner.mvn([]) }.to raise_error(Gjp::MavenNotFoundException)
|
55
|
-
end
|
56
|
-
end
|
57
|
-
end
|
58
|
-
|
59
|
-
def mock_maven_executable
|
60
|
-
Dir.chdir(@project_path) do
|
61
|
-
@bin_dir = File.join("kit", "mvn", "bin")
|
62
|
-
FileUtils.mkdir_p(@bin_dir)
|
63
|
-
@maven_executable = File.join(@bin_dir, "mvn")
|
64
|
-
File.open(@maven_executable, "w") { |io| io.puts "echo $0 $*>test_out" }
|
65
|
-
File.chmod(0777, @maven_executable)
|
66
|
-
end
|
67
|
-
end
|
68
|
-
end
|