gjp 0.14.1 → 0.15.7
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.
- data/README.md +9 -7
- data/lib/gjp.rb +1 -0
- data/lib/gjp/archiver.rb +2 -2
- data/lib/gjp/cli.rb +39 -21
- data/lib/gjp/maven_runner.rb +6 -1
- data/lib/gjp/package_spec_adapter.rb +47 -0
- data/lib/gjp/pom.rb +18 -0
- data/lib/gjp/project.rb +8 -8
- data/lib/gjp/scaffolder.rb +36 -14
- data/lib/gjp/template_manager.rb +1 -1
- data/lib/gjp/version.rb +1 -1
- data/lib/template/kit.spec +2 -0
- data/lib/template/kit/README.SUSE +4 -0
- data/lib/template/package.spec +54 -0
- data/spec/lib/archiver_spec.rb +4 -4
- data/spec/lib/pom_spec.rb +54 -34
- data/spec/lib/project_spec.rb +13 -13
- data/spec/lib/scaffolder_spec.rb +41 -9
- metadata +5 -2
data/README.md
CHANGED
@@ -16,17 +16,19 @@ Easiest install is via RubyGems:
|
|
16
16
|
|
17
17
|
Main workflow subcommands:
|
18
18
|
* `gjp init` inits a new gjp project in the current directory, generating minimal directories and files;
|
19
|
-
* `gjp gather` starts a
|
20
|
-
* `gjp dry-run` starts a
|
19
|
+
* `gjp gather` starts a gathering phase, to add source and kit files. You should place source files in src/<package name> and binary dependency files in kit/;
|
20
|
+
* `gjp dry-run` starts a dry-run phase, to attempt a build. Any change to src/ will be reverted after you call `gjp finish`;
|
21
|
+
* `gjp mvn` during a dry run, locates and runs Maven from any directory in kit/, using options to force repository in kit/m2 and settings in kit/m2/settings.xml;
|
22
|
+
* `gjp status` prints the current phase;
|
21
23
|
* `gjp finish` ends the current phase;
|
22
|
-
* `gjp
|
23
|
-
|
24
|
-
* `gjp generate-
|
25
|
-
* `gjp generate-
|
26
|
-
* `gjp generate-source-archive NAME` creates or refreshes an archive file for source package NAME. Use when you are finished gathering and dry-running;
|
24
|
+
* `gjp generate-kit-spec` creates or refreshes a spec file for the kit. Use after `gjp finish`;
|
25
|
+
* `gjp generate-kit-archive` creates or refreshes an archive file for the kit. Use after `gjp finish`;
|
26
|
+
* `gjp generate-package-spec NAME POM` creates or refreshes a spec file for the package in src/<NAME>. Use after `gjp finish`;
|
27
|
+
* `gjp generate-package-archive NAME` creates or refreshes an archive file for package in src/<NAME>. Use after `gjp finish`;
|
27
28
|
|
28
29
|
Optional workflow subcommands:
|
29
30
|
* `gjp set-up-nonet-user` sets up a user named `nonet` without Internet access you can use for networkless dry runs. Requires `iptables` and
|
31
|
+
superuser privileges;
|
30
32
|
* `gjp tear-down-nonet-user` removes a user previously created by gjp;
|
31
33
|
|
32
34
|
Other available tools:
|
data/lib/gjp.rb
CHANGED
data/lib/gjp/archiver.rb
CHANGED
@@ -27,12 +27,12 @@ module Gjp
|
|
27
27
|
|
28
28
|
# generates an archive for a project's source package based on
|
29
29
|
# its file list
|
30
|
-
def
|
30
|
+
def archive_package(name)
|
31
31
|
list_file = File.join(@project.full_path, "file_lists/#{name}_input")
|
32
32
|
if not File.exist? list_file
|
33
33
|
return nil
|
34
34
|
end
|
35
|
-
destination_file = File.join(@project.full_path, "archives/#{
|
35
|
+
destination_file = File.join(@project.full_path, "archives/#{name}.tar.xz")
|
36
36
|
|
37
37
|
@project.from_directory File.join("src", name) do
|
38
38
|
archive list_file, destination_file
|
data/lib/gjp/cli.rb
CHANGED
@@ -40,30 +40,30 @@ module Gjp
|
|
40
40
|
def execute
|
41
41
|
Gjp::Project.init(".")
|
42
42
|
puts "Project inited, now gathering."
|
43
|
-
|
44
|
-
puts "Any file added to src/<orgId_artifactId_version> will be added to the corresponding package."
|
45
|
-
puts "Note that .gitignore files are honored!"
|
46
|
-
puts "When you are ready to test a dry-run build, use \"gjp dry-run\"."
|
43
|
+
explain_gathering
|
47
44
|
end
|
48
45
|
end
|
49
46
|
|
50
|
-
subcommand "gather", "Starts a gathering phase, add source and kit files
|
47
|
+
subcommand "gather", "Starts a gathering phase, to add source and kit files" do
|
51
48
|
def execute
|
52
49
|
if Gjp::Project.new(".").gather
|
53
50
|
puts "Now gathering."
|
54
|
-
|
55
|
-
puts "Any file added to src/<orgId_artifactId_version> will be added to the corresponding package."
|
56
|
-
puts "Note that .gitignore files are honored!"
|
57
|
-
puts "When you are ready to test a dry-run build, use \"gjp dry-run\"."
|
51
|
+
explain_gathering
|
58
52
|
end
|
59
53
|
end
|
60
54
|
end
|
61
55
|
|
62
|
-
|
56
|
+
def explain_gathering
|
57
|
+
puts "Any file added to kit/ will be added to the kit package."
|
58
|
+
puts "Any file added to src/<name> will be added to the corresponding package."
|
59
|
+
puts "When you are ready to test a build, use \"gjp dry-run\"."
|
60
|
+
end
|
61
|
+
|
62
|
+
subcommand "dry-run", "Starts a dry-run phase, to attempt a build" do
|
63
63
|
def execute
|
64
64
|
if Gjp::Project.new(".").dry_run
|
65
65
|
puts "Now dry-running, please start your build."
|
66
|
-
puts "Any file added to kit/, presumably downloaded dependencies, will be added to the kit
|
66
|
+
puts "Any file added to kit/, presumably downloaded dependencies, will be added to the kit."
|
67
67
|
puts "The src/ directory and all files in it will be brought back to the current state when finished."
|
68
68
|
puts "Note that .gitignore files are honored!"
|
69
69
|
puts "To run a Maven from the kit, use \"gjp mvn\"."
|
@@ -73,7 +73,7 @@ module Gjp
|
|
73
73
|
end
|
74
74
|
end
|
75
75
|
|
76
|
-
subcommand "mvn", "
|
76
|
+
subcommand "mvn", "Locates and runs Maven from any directory in kit/" do
|
77
77
|
parameter "[MAVEN OPTIONS] ...", "mvn options", :attribute_name => "dummy"
|
78
78
|
|
79
79
|
# override parsing in order to pipe everything to mvn
|
@@ -84,7 +84,9 @@ module Gjp
|
|
84
84
|
def execute
|
85
85
|
begin
|
86
86
|
project = Gjp::Project.new(".")
|
87
|
-
Gjp::MavenRunner.new(project).mvn(@maven_options)
|
87
|
+
result = Gjp::MavenRunner.new(project).mvn(@maven_options)
|
88
|
+
puts "Real commandline was:"
|
89
|
+
puts "#{result}"
|
88
90
|
rescue Gjp::MavenNotFoundException
|
89
91
|
puts "mvn executable not found in kit/ or any of its subdirectories, gather it"
|
90
92
|
end
|
@@ -97,7 +99,7 @@ module Gjp
|
|
97
99
|
end
|
98
100
|
end
|
99
101
|
|
100
|
-
subcommand "finish", "
|
102
|
+
subcommand "finish", "Ends the current phase" do
|
101
103
|
def execute
|
102
104
|
result = Gjp::Project.new(".").finish
|
103
105
|
if result == :gathering
|
@@ -109,15 +111,15 @@ module Gjp
|
|
109
111
|
end
|
110
112
|
end
|
111
113
|
|
112
|
-
subcommand "generate-kit-spec", "Scaffolds or refreshes a spec file for the kit
|
114
|
+
subcommand "generate-kit-spec", "Scaffolds or refreshes a spec file for the kit" do
|
113
115
|
def execute
|
114
116
|
project = Gjp::Project.new(".")
|
115
|
-
result_path = Gjp::Scaffolder.new(project).
|
117
|
+
result_path = Gjp::Scaffolder.new(project).generate_kit_spec
|
116
118
|
puts "#{result_path} generated"
|
117
119
|
end
|
118
120
|
end
|
119
121
|
|
120
|
-
subcommand "generate-kit-archive", "Archives contents of
|
122
|
+
subcommand "generate-kit-archive", "Archives contents of kit in archives/" do
|
121
123
|
def execute
|
122
124
|
project = Gjp::Project.new(".")
|
123
125
|
result_path = Gjp::Archiver.new(project).archive_kit
|
@@ -131,15 +133,31 @@ module Gjp
|
|
131
133
|
end
|
132
134
|
end
|
133
135
|
|
134
|
-
subcommand "generate-
|
135
|
-
|
136
|
+
subcommand "generate-package-spec", "Scaffolds or refreshes a spec file for a package" do
|
137
|
+
option ["-f", "--filter"], "FILTER", "filter files to be installed by this spec", :default => "*.jar"
|
138
|
+
parameter "NAME", "name of a package, that is, an src/ subdirectory name"
|
139
|
+
parameter "POM", "a pom file path or URI"
|
140
|
+
def execute
|
141
|
+
project = Gjp::Project.new(".")
|
142
|
+
result_path = Gjp::Scaffolder.new(project).generate_package_spec name, pom, filter
|
143
|
+
if result_path != nil
|
144
|
+
puts "#{result_path} generated"
|
145
|
+
else
|
146
|
+
"The file_list/#{name}_output file was not found. Ensure you have already run a" +
|
147
|
+
"dry run and ensure you ended that phase with \"gjp finish\"."
|
148
|
+
end
|
149
|
+
end
|
150
|
+
end
|
151
|
+
|
152
|
+
subcommand "generate-package-archive", "Archives contents of a package in archives/" do
|
153
|
+
parameter "NAME", "name of a package, that is, an src/ subdirectory name"
|
136
154
|
def execute
|
137
155
|
project = Gjp::Project.new(".")
|
138
|
-
result_path = Gjp::Archiver.new(project).
|
156
|
+
result_path = Gjp::Archiver.new(project).archive_package name
|
139
157
|
if result_path != nil
|
140
158
|
puts "#{result_path} generated"
|
141
159
|
else
|
142
|
-
"The file_list/#{name}_input file was not found. Ensure you already added content to " +
|
160
|
+
"The file_list/#{name}_input file was not found. Ensure you have already added content to " +
|
143
161
|
"src/#{name} during a gathering phase, and ensure you ended that phase with \"gjp finish\"."
|
144
162
|
end
|
145
163
|
end
|
data/lib/gjp/maven_runner.rb
CHANGED
@@ -54,7 +54,12 @@ module Gjp
|
|
54
54
|
if maven_commandline == nil
|
55
55
|
raise MavenNotFoundException
|
56
56
|
end
|
57
|
-
|
57
|
+
|
58
|
+
full_commandline = "#{maven_commandline} #{options.join(' ')}"
|
59
|
+
log.debug full_commandline
|
60
|
+
|
61
|
+
Process.wait(Process.spawn(full_commandline))
|
62
|
+
full_commandline
|
58
63
|
end
|
59
64
|
end
|
60
65
|
|
@@ -0,0 +1,47 @@
|
|
1
|
+
# encoding: UTF-8
|
2
|
+
|
3
|
+
module Gjp
|
4
|
+
# encapsulates details of a package needed by the spec file
|
5
|
+
# retrieving them from other objects
|
6
|
+
class PackageSpecAdapter
|
7
|
+
attr_reader :name
|
8
|
+
attr_reader :version
|
9
|
+
attr_reader :license
|
10
|
+
attr_reader :summary
|
11
|
+
attr_reader :url
|
12
|
+
attr_reader :project_name
|
13
|
+
attr_reader :group_id
|
14
|
+
attr_reader :artifact_id
|
15
|
+
attr_reader :version
|
16
|
+
attr_reader :runtime_dependency_ids
|
17
|
+
attr_reader :description
|
18
|
+
attr_reader :outputs
|
19
|
+
|
20
|
+
def initialize(project, package_name, pom, filter)
|
21
|
+
@name = package_name
|
22
|
+
@version = pom.version
|
23
|
+
@license = pom.license_name
|
24
|
+
clean_description = pom.description.gsub(/[\s]+/, ' ').strip
|
25
|
+
@summary = clean_description[0..60].gsub(/\s\w+$/, '...')
|
26
|
+
@url = pom.url
|
27
|
+
@project_name = project.name
|
28
|
+
@group_id = pom.group_id
|
29
|
+
@artifact_id = pom.artifact_id
|
30
|
+
@version = pom.version
|
31
|
+
@runtime_dependency_ids = pom.runtime_dependency_ids
|
32
|
+
@description = clean_description
|
33
|
+
|
34
|
+
output_list = File.join(project.full_path, "file_lists", "#{@name}_output")
|
35
|
+
@outputs = File.open(output_list).readlines.map do |line|
|
36
|
+
line.strip
|
37
|
+
end.select do |line|
|
38
|
+
File.fnmatch? filter, File.basename(line.strip)
|
39
|
+
end
|
40
|
+
end
|
41
|
+
|
42
|
+
def get_binding
|
43
|
+
binding
|
44
|
+
end
|
45
|
+
end
|
46
|
+
end
|
47
|
+
|
data/lib/gjp/pom.rb
CHANGED
@@ -30,6 +30,24 @@ module Gjp
|
|
30
30
|
@doc.xpath("project/version/text()").to_s
|
31
31
|
end
|
32
32
|
|
33
|
+
def description
|
34
|
+
@doc.xpath("project/description/text()").to_s
|
35
|
+
end
|
36
|
+
|
37
|
+
def url
|
38
|
+
@doc.xpath("project/url/text()").to_s
|
39
|
+
end
|
40
|
+
|
41
|
+
def license_name
|
42
|
+
@doc.xpath("project/licenses/license/name/text()").to_s
|
43
|
+
end
|
44
|
+
|
45
|
+
def runtime_dependency_ids
|
46
|
+
result = @doc.xpath("project/dependencies/dependency[not(optional='true') and not(scope='provided') and not(scope='test') and not(scope='system')]").map do |element|
|
47
|
+
[element.xpath("groupId/text()").to_s, element.xpath("artifactId/text()").to_s, element.xpath("version/text()").to_s]
|
48
|
+
end
|
49
|
+
end
|
50
|
+
|
33
51
|
def parent_group_id
|
34
52
|
@doc.xpath("project/parent/groupId/text()").to_s
|
35
53
|
end
|
data/lib/gjp/project.rb
CHANGED
@@ -77,7 +77,7 @@ module Gjp
|
|
77
77
|
|
78
78
|
# starts a dry running phase: files added to the kit will
|
79
79
|
# be added to packages, while sources will be reset at the
|
80
|
-
#
|
80
|
+
# current state when finished
|
81
81
|
def dry_run
|
82
82
|
from_directory do
|
83
83
|
status = get_status
|
@@ -130,11 +130,11 @@ module Gjp
|
|
130
130
|
|
131
131
|
# updates one of the files that tracks changes in src/ directories form a certain tag
|
132
132
|
# list_name is the name of the list of files to update, there will be one for each
|
133
|
-
# package in src/
|
133
|
+
# package (subdirectory) in src/
|
134
134
|
def update_changed_src_file_list(list_name, tag)
|
135
135
|
Dir.foreach("src") do |entry|
|
136
|
-
if File.directory?(File.join(Dir.getwd, "src", entry)) and entry
|
137
|
-
update_changed_file_list(File.join("src", entry), "#{
|
136
|
+
if File.directory?(File.join(Dir.getwd, "src", entry)) and entry != "." and entry != ".."
|
137
|
+
update_changed_file_list(File.join("src", entry), "#{entry}_#{list_name.to_s}", tag)
|
138
138
|
end
|
139
139
|
end
|
140
140
|
end
|
@@ -143,7 +143,7 @@ module Gjp
|
|
143
143
|
def update_changed_file_list(directory, file_name, tag)
|
144
144
|
list_file = File.join("file_lists", file_name)
|
145
145
|
tracked_files = if File.exists?(list_file)
|
146
|
-
File.readlines(list_file)
|
146
|
+
File.readlines(list_file).map { |line| line.strip }
|
147
147
|
else
|
148
148
|
[]
|
149
149
|
end
|
@@ -151,10 +151,10 @@ module Gjp
|
|
151
151
|
new_tracked_files = (
|
152
152
|
`git diff-tree --no-commit-id --name-only -r #{latest_tag(tag)} HEAD`.split("\n")
|
153
153
|
.select { |file| file.start_with?(directory) }
|
154
|
-
.map { |file|file[directory.length + 1, file.length]
|
154
|
+
.map { |file|file[directory.length + 1, file.length] }
|
155
155
|
.concat(tracked_files)
|
156
|
-
.sort
|
157
156
|
.uniq
|
157
|
+
.sort
|
158
158
|
)
|
159
159
|
|
160
160
|
log.debug("writing file list for #{directory}: #{new_tracked_files.to_s}")
|
@@ -171,7 +171,7 @@ module Gjp
|
|
171
171
|
def take_snapshot(message, tag = nil)
|
172
172
|
log.debug "committing with message: #{message}"
|
173
173
|
|
174
|
-
`git rm -r --cached .`
|
174
|
+
`git rm -r --cached --ignore-unmatch .`
|
175
175
|
`git add .`
|
176
176
|
`git commit -m "#{message}"`
|
177
177
|
|
data/lib/gjp/scaffolder.rb
CHANGED
@@ -9,30 +9,52 @@ module Gjp
|
|
9
9
|
@project = project
|
10
10
|
end
|
11
11
|
|
12
|
-
def
|
13
|
-
@project.
|
14
|
-
|
12
|
+
def generate_kit_spec
|
13
|
+
spec_path = File.join("specs", "#{@project.name}-kit.spec")
|
14
|
+
generate_merging "kit.spec", @project.get_binding, spec_path, :generate_kit_spec
|
15
|
+
spec_path
|
16
|
+
end
|
17
|
+
|
18
|
+
def generate_package_spec(name, pom, filter)
|
19
|
+
spec_path = File.join("specs", "#{name}.spec")
|
20
|
+
|
21
|
+
list_file = File.join(@project.full_path, "file_lists/#{name}_output")
|
22
|
+
if not File.exist? list_file
|
23
|
+
return nil
|
24
|
+
end
|
25
|
+
|
26
|
+
adapter = Gjp::PackageSpecAdapter.new(@project, name, Gjp::Pom.new(pom), filter)
|
15
27
|
|
16
|
-
|
28
|
+
generate_merging "package.spec", adapter.get_binding, spec_path, "scaffold_#{name}_spec"
|
17
29
|
|
18
|
-
|
19
|
-
|
30
|
+
spec_path
|
31
|
+
end
|
32
|
+
|
33
|
+
# generates a file in result_path from template together with binding.
|
34
|
+
# if a file already exists at that position, 3-way merge it with the
|
35
|
+
# version with the latest tag specified. Takes a snapshot in the end
|
36
|
+
# for future merges
|
37
|
+
def generate_merging(template, binding, result_path, tag)
|
38
|
+
@project.from_directory do
|
39
|
+
TemplateManager.new.generate template, binding, "#{result_path}.new_scaffold"
|
40
|
+
|
41
|
+
already_scaffolded = @project.latest_tag(tag) != ""
|
42
|
+
already_existing = File.exist? result_path
|
20
43
|
|
21
44
|
if already_scaffolded and already_existing
|
22
45
|
# 3-way merge
|
23
|
-
`git show #{@project.latest_tag(
|
24
|
-
`git merge-file --ours #{
|
25
|
-
File.delete "#{
|
26
|
-
File.delete "#{
|
46
|
+
`git show #{@project.latest_tag(tag)}:#{result_path} > #{result_path}.old_scaffold`
|
47
|
+
`git merge-file --ours #{result_path} #{result_path}.old_scaffold #{result_path}.new_scaffold`
|
48
|
+
File.delete "#{result_path}.new_scaffold"
|
49
|
+
File.delete "#{result_path}.old_scaffold"
|
27
50
|
else
|
28
51
|
# just replace
|
29
|
-
File.rename "#{
|
52
|
+
File.rename "#{result_path}.new_scaffold", result_path
|
30
53
|
end
|
31
54
|
|
32
|
-
@project.take_snapshot "Kit spec scaffolded",
|
33
|
-
|
34
|
-
spec_path
|
55
|
+
@project.take_snapshot "Kit spec scaffolded", tag
|
35
56
|
end
|
36
57
|
end
|
58
|
+
|
37
59
|
end
|
38
60
|
end
|
data/lib/gjp/template_manager.rb
CHANGED
@@ -18,7 +18,7 @@ module Gjp
|
|
18
18
|
end
|
19
19
|
|
20
20
|
def generate(template_name, object_binding, destination_path)
|
21
|
-
erb = ERB.new File.read(File.join(template_path, template_name))
|
21
|
+
erb = ERB.new File.read(File.join(template_path, template_name)), nil, "<>"
|
22
22
|
File.open(destination_path, "w") { |io| io.write erb.result(object_binding) }
|
23
23
|
end
|
24
24
|
end
|
data/lib/gjp/version.rb
CHANGED
data/lib/template/kit.spec
CHANGED
@@ -44,10 +44,12 @@ be installed on end users' systems.
|
|
44
44
|
|
45
45
|
%install
|
46
46
|
install -d -m 0755 %{buildroot}%{_datadir}/gjp/%{name}/
|
47
|
+
mv README.SUSE ../
|
47
48
|
cp -a * %{buildroot}%{_datadir}/gjp/%{name}/
|
48
49
|
|
49
50
|
%files
|
50
51
|
%defattr(-,root,root)
|
52
|
+
%doc ../README.SUSE
|
51
53
|
%{_datadir}/gjp
|
52
54
|
%{_datadir}/gjp/%{name}/
|
53
55
|
|
@@ -0,0 +1,4 @@
|
|
1
|
+
Contents of this package are automatically packaged by the gjp program in order
|
2
|
+
to build other Java packages from source. They are not needed after rpm files
|
3
|
+
are created, so this package should only be used by the Build Service and
|
4
|
+
should never be installed on end users' systems.
|
@@ -0,0 +1,54 @@
|
|
1
|
+
#
|
2
|
+
# spec file for "<%= name %>"
|
3
|
+
#
|
4
|
+
# Copyright (c) <%= Time.now.year %> <%= Etc.getlogin %>
|
5
|
+
#
|
6
|
+
# All modifications and additions to the file contributed by third parties
|
7
|
+
# remain the property of their copyright owners, unless otherwise agreed
|
8
|
+
# upon. The license for this file, and modifications and additions to the
|
9
|
+
# file, is the same license as for the pristine package itself (unless the
|
10
|
+
# license for the pristine package is not an Open Source License, in which
|
11
|
+
# case the license is the MIT License). An "Open Source License" is a
|
12
|
+
# license that conforms to the Open Source Definition (Version 1.9)
|
13
|
+
# published by the Open Source Initiative.
|
14
|
+
|
15
|
+
# Please submit bugfixes or comments via http://bugs.opensuse.org/
|
16
|
+
#
|
17
|
+
|
18
|
+
Name: <%= name %>
|
19
|
+
Version: <%= version %>
|
20
|
+
Release: 1
|
21
|
+
License: <%= license %>
|
22
|
+
Summary: <%= summary %>
|
23
|
+
Url: <%= url %>
|
24
|
+
Group: Development/Libraries/Java
|
25
|
+
Source0: %{name}.tar.xz
|
26
|
+
BuildRoot: %{_tmppath}/%{name}-%{version}-build
|
27
|
+
BuildRequires: <%= project_name %>-kit
|
28
|
+
BuildArch: noarch
|
29
|
+
Provides: mvn(<%= group_id %>:<%= artifact_id %>) == <%= version %>
|
30
|
+
<% runtime_dependency_ids.each do |dependency_id| %>
|
31
|
+
Requires: mvn(<%= dependency_id[0] %>:<%= dependency_id[1] %>) <% if dependency_id[3] != nil %>==<%= dependency_id[3] %><% end %>
|
32
|
+
<% end %>
|
33
|
+
|
34
|
+
%description
|
35
|
+
<%= description %>
|
36
|
+
|
37
|
+
%prep
|
38
|
+
%setup -q -c
|
39
|
+
|
40
|
+
%build
|
41
|
+
./build.sh
|
42
|
+
|
43
|
+
%install
|
44
|
+
<% outputs.each do |output| %>
|
45
|
+
cp -a <%= output %> %{buildroot}%{_javadir}/<%= File.basename(output) %>
|
46
|
+
<% end %>
|
47
|
+
|
48
|
+
%files
|
49
|
+
%defattr(-,root,root)
|
50
|
+
<% outputs.each do |output| %>
|
51
|
+
cp -a <%= output %> %{buildroot}%{_javadir}/<%= File.basename(output) %>
|
52
|
+
<% end %>
|
53
|
+
|
54
|
+
%changelog
|
data/spec/lib/archiver_spec.rb
CHANGED
@@ -43,17 +43,17 @@ describe Gjp::Archiver do
|
|
43
43
|
end
|
44
44
|
end
|
45
45
|
|
46
|
-
describe "#
|
47
|
-
it "archives a
|
46
|
+
describe "#archive_package" do
|
47
|
+
it "archives a package files" do
|
48
48
|
@project.from_directory do
|
49
49
|
Dir.mkdir(File.join("src", "a:b:c"))
|
50
50
|
File.open(File.join("src", "a:b:c", "src_test"), "w") { |io| io.puts "test content" }
|
51
51
|
end
|
52
52
|
@project.finish
|
53
53
|
|
54
|
-
archiver.
|
54
|
+
archiver.archive_package "a:b:c"
|
55
55
|
@project.from_directory do
|
56
|
-
`tar -Jtf archives/
|
56
|
+
`tar -Jtf archives/a:b:c.tar.xz`.split.should include("src_test")
|
57
57
|
end
|
58
58
|
end
|
59
59
|
end
|
data/spec/lib/pom_spec.rb
CHANGED
@@ -3,55 +3,75 @@
|
|
3
3
|
require 'spec_helper'
|
4
4
|
|
5
5
|
describe Gjp::Pom do
|
6
|
-
|
7
|
-
'http://search.maven.org/remotecontent?filepath=commons-logging/commons-logging/1.1.1/commons-logging-1.1.1.pom'].each do |loc|
|
6
|
+
let(:pom) { Gjp::Pom.new(File.join("spec", "data", "commons-logging", "pom.xml")) }
|
8
7
|
|
9
|
-
|
8
|
+
describe "#connection_address" do
|
9
|
+
it "reads the SCM connection address" do
|
10
|
+
pom.connection_address.should eq "svn:http://svn.apache.org/repos/asf/commons/proper/logging/tags/commons-logging-1.1.1"
|
11
|
+
end
|
12
|
+
|
13
|
+
it "reads the SCM connection address from a remote repository" do
|
14
|
+
pom.connection_address.should eq "svn:http://svn.apache.org/repos/asf/commons/proper/logging/tags/commons-logging-1.1.1"
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
18
|
+
describe "#group_id" do
|
19
|
+
it "reads the group id" do
|
20
|
+
pom.group_id.should eq "commons-logging"
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
describe "#artifact_id" do
|
25
|
+
it "reads the artifact id" do
|
26
|
+
pom.artifact_id.should eq "commons-logging"
|
27
|
+
end
|
28
|
+
end
|
10
29
|
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
30
|
+
describe "#version" do
|
31
|
+
it "reads the version" do
|
32
|
+
pom.version.should eq "1.1.1"
|
33
|
+
end
|
34
|
+
end
|
15
35
|
|
16
|
-
|
17
|
-
|
18
|
-
|
36
|
+
describe "#description" do
|
37
|
+
it "reads the description" do
|
38
|
+
pom.description.should eq "Commons Logging is a thin adapter allowing configurable bridging to other,\n well known logging systems."
|
19
39
|
end
|
40
|
+
end
|
20
41
|
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
end
|
42
|
+
describe "#url" do
|
43
|
+
it "reads the url" do
|
44
|
+
pom.url.should eq "http://commons.apache.org/logging"
|
25
45
|
end
|
46
|
+
end
|
26
47
|
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
end
|
48
|
+
describe "#license_name" do
|
49
|
+
it "reads the license name" do
|
50
|
+
pom.license_name.should eq ""
|
31
51
|
end
|
52
|
+
end
|
32
53
|
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
end
|
54
|
+
describe "#runtime_dependency_ids" do
|
55
|
+
it "reads the dependency maven ids" do
|
56
|
+
pom.runtime_dependency_ids.should eq []
|
37
57
|
end
|
58
|
+
end
|
38
59
|
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
end
|
60
|
+
describe "#parent_group_id" do
|
61
|
+
it "reads the parent's group id" do
|
62
|
+
pom.parent_group_id.should eq "org.apache.commons"
|
43
63
|
end
|
64
|
+
end
|
44
65
|
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
end
|
66
|
+
describe "#parent_artifact_id" do
|
67
|
+
it "reads the parent's artifact id" do
|
68
|
+
pom.parent_artifact_id.should eq "commons-parent"
|
49
69
|
end
|
70
|
+
end
|
50
71
|
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
end
|
72
|
+
describe "#parent_version" do
|
73
|
+
it "reads the parent's version" do
|
74
|
+
pom.parent_version.should eq "5"
|
55
75
|
end
|
56
76
|
end
|
57
77
|
end
|
data/spec/lib/project_spec.rb
CHANGED
@@ -111,8 +111,8 @@ describe Gjp::Project do
|
|
111
111
|
describe "#finish" do
|
112
112
|
it "ends the current gathering phase" do
|
113
113
|
@project.from_directory do
|
114
|
-
Dir.mkdir("src/
|
115
|
-
`touch src/
|
114
|
+
Dir.mkdir("src/abc")
|
115
|
+
`touch src/abc/test`
|
116
116
|
`touch kit/test`
|
117
117
|
end
|
118
118
|
|
@@ -121,16 +121,16 @@ describe Gjp::Project do
|
|
121
121
|
|
122
122
|
@project.from_directory do
|
123
123
|
`git rev-list --all`.split("\n").length.should eq 4
|
124
|
-
`git diff-tree --no-commit-id --name-only -r HEAD~2`.split("\n").should include("src/
|
125
|
-
File.readlines(File.join("file_lists", "
|
124
|
+
`git diff-tree --no-commit-id --name-only -r HEAD~2`.split("\n").should include("src/abc/test")
|
125
|
+
File.readlines(File.join("file_lists", "abc_input")).should include("test\n")
|
126
126
|
File.readlines(File.join("file_lists","kit")).should include("test\n")
|
127
127
|
end
|
128
128
|
end
|
129
129
|
|
130
130
|
it "ends the current dry-run phase" do
|
131
131
|
@project.from_directory do
|
132
|
-
Dir.mkdir("src/
|
133
|
-
`echo A > src/
|
132
|
+
Dir.mkdir("src/abc")
|
133
|
+
`echo A > src/abc/test`
|
134
134
|
end
|
135
135
|
|
136
136
|
@project.finish.should eq :gathering
|
@@ -138,8 +138,8 @@ describe Gjp::Project do
|
|
138
138
|
@project.dry_run.should be_true
|
139
139
|
|
140
140
|
@project.from_directory do
|
141
|
-
`echo B > src/
|
142
|
-
`touch src/
|
141
|
+
`echo B > src/abc/test`
|
142
|
+
`touch src/abc/test2`
|
143
143
|
`touch kit/test`
|
144
144
|
end
|
145
145
|
|
@@ -148,12 +148,12 @@ describe Gjp::Project do
|
|
148
148
|
|
149
149
|
@project.from_directory do
|
150
150
|
`git rev-list --all`.split("\n").length.should eq 9
|
151
|
-
File.read("src/
|
152
|
-
File.readlines(File.join("file_lists", "
|
153
|
-
File.readlines(File.join("file_lists", "
|
151
|
+
File.read("src/abc/test").should eq "A\n"
|
152
|
+
File.readlines(File.join("file_lists", "abc_output")).should include("test2\n")
|
153
|
+
File.readlines(File.join("file_lists", "abc_input")).should_not include("test2\n")
|
154
154
|
|
155
|
-
`git diff-tree --no-commit-id --name-only -r HEAD~2`.split("\n").should_not include("src/
|
156
|
-
File.exists?("src/
|
155
|
+
`git diff-tree --no-commit-id --name-only -r HEAD~2`.split("\n").should_not include("src/abc/test2")
|
156
|
+
File.exists?("src/abc/test2").should be_false
|
157
157
|
File.readlines(File.join("file_lists", "kit")).should include("test\n")
|
158
158
|
end
|
159
159
|
end
|
data/spec/lib/scaffolder_spec.rb
CHANGED
@@ -24,9 +24,9 @@ describe Gjp::Scaffolder do
|
|
24
24
|
FileUtils.rm_rf(@project_path)
|
25
25
|
end
|
26
26
|
|
27
|
-
describe "#
|
27
|
+
describe "#generate_kit_spec" do
|
28
28
|
it "scaffolds the first version" do
|
29
|
-
@scaffolder.
|
29
|
+
@scaffolder.generate_kit_spec.should be_true
|
30
30
|
|
31
31
|
@project.from_directory do
|
32
32
|
spec_lines = File.readlines(File.join("specs", "test-project-kit.spec"))
|
@@ -36,7 +36,7 @@ describe Gjp::Scaffolder do
|
|
36
36
|
end
|
37
37
|
end
|
38
38
|
it "scaffolds a second version" do
|
39
|
-
@scaffolder.
|
39
|
+
@scaffolder.generate_kit_spec.should be_true
|
40
40
|
@project.dry_run
|
41
41
|
Dir.chdir(@project_path) do
|
42
42
|
test_file = File.join("kit", "test")
|
@@ -48,7 +48,7 @@ describe Gjp::Scaffolder do
|
|
48
48
|
end
|
49
49
|
@project.gather
|
50
50
|
|
51
|
-
@scaffolder.
|
51
|
+
@scaffolder.generate_kit_spec.should be_true
|
52
52
|
|
53
53
|
@project.from_directory do
|
54
54
|
spec_lines = File.readlines(File.join("specs", "test-project-kit.spec"))
|
@@ -59,7 +59,7 @@ describe Gjp::Scaffolder do
|
|
59
59
|
end
|
60
60
|
end
|
61
61
|
it "scaffolds a conflicting version" do
|
62
|
-
@scaffolder.
|
62
|
+
@scaffolder.generate_kit_spec.should be_true
|
63
63
|
@project.dry_run
|
64
64
|
Dir.chdir(@project_path) do
|
65
65
|
test_file = File.join("kit", "test")
|
@@ -76,7 +76,7 @@ describe Gjp::Scaffolder do
|
|
76
76
|
end
|
77
77
|
@project.gather
|
78
78
|
|
79
|
-
@scaffolder.
|
79
|
+
@scaffolder.generate_kit_spec.should be_true
|
80
80
|
|
81
81
|
@project.from_directory do
|
82
82
|
spec_lines = File.readlines(File.join("specs", "test-project-kit.spec"))
|
@@ -86,9 +86,41 @@ describe Gjp::Scaffolder do
|
|
86
86
|
spec_lines.should_not include("Version: #{`git rev-parse --short #{@project.latest_tag(:dry_run_finished)}`}")
|
87
87
|
end
|
88
88
|
end
|
89
|
-
|
90
|
-
|
91
|
-
|
89
|
+
end
|
90
|
+
|
91
|
+
describe "#generate_package_spec" do
|
92
|
+
it "scaffolds the first version" do
|
93
|
+
|
94
|
+
@project.from_directory do
|
95
|
+
FileUtils.mkdir_p File.join("src", "test", "out")
|
96
|
+
(1..5).each do |i|
|
97
|
+
`touch src/test/test#{i}.java`
|
98
|
+
end
|
99
|
+
@project.dry_run
|
100
|
+
|
101
|
+
(1..5).each do |i|
|
102
|
+
`touch src/test/test#{i}.class`
|
103
|
+
end
|
104
|
+
|
105
|
+
(1..5).each do |i|
|
106
|
+
`touch src/test/out/test#{i}.jar`
|
107
|
+
end
|
108
|
+
|
109
|
+
@project.finish
|
110
|
+
end
|
111
|
+
|
112
|
+
@scaffolder.generate_package_spec "test", File.join("spec", "data", "nailgun", "pom.xml"), "*.jar"
|
113
|
+
|
114
|
+
@project.from_directory do
|
115
|
+
spec_lines = File.readlines(File.join("specs", "test.spec"))
|
116
|
+
spec_lines.should include("Name: test\n")
|
117
|
+
spec_lines.should include("License: The Apache Software License, Version 2.0\n")
|
118
|
+
spec_lines.should include("Summary: Nailgun is a client, protocol, and server for running Java...\n")
|
119
|
+
spec_lines.should include("Url: http://martiansoftware.com/nailgun\n")
|
120
|
+
spec_lines.should include("BuildRequires: #{@project.name}-kit\n")
|
121
|
+
spec_lines.should include("Provides: mvn(com.martiansoftware:nailgun-all) == 0.9.1\n")
|
122
|
+
spec_lines.should include("cp -a out/test3.jar %{buildroot}%{_javadir}/test3.jar\n")
|
123
|
+
end
|
92
124
|
end
|
93
125
|
end
|
94
126
|
end
|
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.15.7
|
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-
|
12
|
+
date: 2013-10-03 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: rake
|
@@ -163,6 +163,7 @@ files:
|
|
163
163
|
- lib/gjp/logger.rb
|
164
164
|
- lib/gjp/maven_runner.rb
|
165
165
|
- lib/gjp/maven_website.rb
|
166
|
+
- lib/gjp/package_spec_adapter.rb
|
166
167
|
- lib/gjp/parent_pom_getter.rb
|
167
168
|
- lib/gjp/pom.rb
|
168
169
|
- lib/gjp/pom_getter.rb
|
@@ -177,7 +178,9 @@ files:
|
|
177
178
|
- lib/template/file_lists/CONTENTS
|
178
179
|
- lib/template/kit.spec
|
179
180
|
- lib/template/kit/CONTENTS
|
181
|
+
- lib/template/kit/README.SUSE
|
180
182
|
- lib/template/kit/m2/settings.xml
|
183
|
+
- lib/template/package.spec
|
181
184
|
- lib/template/specs/CONTENTS
|
182
185
|
- lib/template/src/CONTENTS
|
183
186
|
- spec/data/ant-super-simple-code/build.xml
|