gjp 0.20.0 → 0.21.0

Sign up to get free protection for your applications and to get access to all the features.
data/README.md CHANGED
@@ -50,7 +50,7 @@ Note that:
50
50
  * a `gjp` project can be used to build a number of packages that share one binary kit. This can help if the kit becomes big in size;
51
51
  * `gjp` will take advantage of Maven's pom files to generate its specs if they are available. This allows to precompile most spec fields automatically.
52
52
 
53
- ### Sample project (commons-io)
53
+ ### Sample project (commons-collections)
54
54
 
55
55
  #### Initialization and project setup
56
56
 
@@ -91,7 +91,7 @@ Success! Now we have to tell gjp to return in normal mode:
91
91
 
92
92
  gjp finish
93
93
 
94
- At this point `gjp` restored `src/` as it was before the build and listed outputs in `file_lists/commons-collections_output`. Those will be used later to compile the `%install` and `%files` sections of the project spec.
94
+ At this point `gjp` restored `src/` as it was before the build and listed outputs in `output/commons-collections/produced_file_list`. It will be used later to compile the `%install` and `%files` sections of the project spec.
95
95
 
96
96
  Note that, if the build was unsusccesful, the following command can be used to cancel it and return to pre-dry running state:
97
97
 
@@ -112,22 +112,21 @@ Of course this script can also be manually modified, and it must be in more diff
112
112
  The following command will generate the kit spec:
113
113
 
114
114
  gjp generate-kit-spec
115
- less specs/galaxy-kit.spec
115
+ less output/galaxy-kit/galaxy-kit.spec
116
116
 
117
117
  Nothing fancy here, the spec simply copies `kit/` contents in a special directory to be available for later compilation of packages.
118
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).
119
119
 
120
- You can also generate the corresponding .tar.xz file with:
120
+ You can also generate the corresponding .tar.xz file in `output/galaxy-kit/` with:
121
121
 
122
122
  gjp generate-kit-archive
123
123
 
124
- The contents of this file were tracked by `gjp` during gathering and dry-run phases, and are listed in `file_lists/kit`. You can also edit it if you want.
125
124
 
126
125
  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:
127
126
 
128
127
  gjp generate-package-spec commons-collections src/commons-collections/commons-collections-3.2.1-src/pom.xml
129
128
  gjp generate-package-archive commons-collections
130
- less specs/commons-collections.spec
129
+ less output/commons-collections/commons-collections.spec
131
130
 
132
131
  commons-collection BuldRequires galaxy-kit, its archive contains only source files and it will install any produced .jar file in `/usr/lib/java`.
133
132
 
data/lib/gjp/archiver.rb CHANGED
@@ -11,7 +11,9 @@ module Gjp
11
11
 
12
12
  # generates an archive for the kit package
13
13
  def archive_kit
14
- destination_file = File.join(@project.full_path, "archives/#{@project.name}-kit.tar.xz")
14
+ destination_dir = File.join(@project.full_path, "output", "#{@project.name}-kit")
15
+ FileUtils.mkdir_p(destination_dir)
16
+ destination_file = File.join(destination_dir, "#{@project.name}-kit.tar.xz")
15
17
 
16
18
  archive("kit", destination_file)
17
19
 
@@ -20,7 +22,9 @@ module Gjp
20
22
 
21
23
  # generates an archive for a project's package based on its file list
22
24
  def archive_package(name)
23
- destination_file = File.join(@project.full_path, "archives/#{name}.tar.xz")
25
+ destination_dir = File.join(@project.full_path, "output", name)
26
+ FileUtils.mkdir_p(destination_dir)
27
+ destination_file = File.join(destination_dir, "#{name}.tar.xz")
24
28
 
25
29
  archive(File.join("src", name), destination_file)
26
30
 
data/lib/gjp/cli.rb CHANGED
@@ -93,7 +93,7 @@ module Gjp
93
93
  end
94
94
  end
95
95
 
96
- subcommand "generate-build-script", "Creates or refreshes a build.sh file" do
96
+ subcommand "generate-build-script", "Create or refresh a build.sh file" do
97
97
  parameter "NAME", "name of a package, that is, an src/ subdirectory name"
98
98
  def execute
99
99
  checking_exceptions do
@@ -108,7 +108,7 @@ module Gjp
108
108
  end
109
109
  end
110
110
 
111
- subcommand "generate-kit-spec", "Creates or refreshes a spec file for the kit" do
111
+ subcommand "generate-kit-spec", "Create or refresh a spec file for the kit" do
112
112
  def execute
113
113
  checking_exceptions do
114
114
  project = Gjp::Project.new(".")
@@ -121,7 +121,7 @@ module Gjp
121
121
  end
122
122
  end
123
123
 
124
- subcommand "generate-kit-archive", "Archives contents of kit in archives/" do
124
+ subcommand "generate-kit-archive", "Create or refresh the kit tarball" do
125
125
  def execute
126
126
  checking_exceptions do
127
127
  project = Gjp::Project.new(".")
@@ -131,7 +131,7 @@ module Gjp
131
131
  end
132
132
  end
133
133
 
134
- subcommand "generate-package-spec", "Creates or refreshes a spec file for a package" do
134
+ subcommand "generate-package-spec", "Create or refresh a spec file for a package" do
135
135
  option ["-f", "--filter"], "FILTER", "filter files to be installed by this spec", :default => "*.jar"
136
136
  parameter "NAME", "name of a package, that is, an src/ subdirectory name"
137
137
  parameter "POM", "a pom file path or URI"
@@ -139,20 +139,15 @@ module Gjp
139
139
  checking_exceptions do
140
140
  project = Gjp::Project.new(".")
141
141
  result_path, conflict_count = Gjp::SpecGenerator.new(project).generate_package_spec name, pom, filter
142
- if result_path != nil
143
- puts "#{result_path} generated"
144
- if conflict_count > 0
145
- puts "Warning: #{conflict_count} unresolved conflicts"
146
- end
147
- else
148
- $stderr.puts "file_list/#{name}_output not found. Ensure you have already run a" +
149
- "\"gjp dry run\" and \"gjp finish\"."
142
+ puts "#{result_path} generated"
143
+ if conflict_count > 0
144
+ puts "Warning: #{conflict_count} unresolved conflicts"
150
145
  end
151
146
  end
152
147
  end
153
148
  end
154
149
 
155
- subcommand "generate-package-archive", "Archives contents of a package in archives/" do
150
+ subcommand "generate-package-archive", "Create or refresh a package tarball" do
156
151
  parameter "NAME", "name of a package, that is, an src/ subdirectory name"
157
152
  def execute
158
153
  checking_exceptions do
@@ -36,11 +36,15 @@ module Gjp
36
36
  @runtime_dependency_ids = pom.runtime_dependency_ids
37
37
  @description = cleanup_description(pom.description, 1500)
38
38
 
39
- output_list = File.join(project.full_path, "file_lists", "#{@name}_output")
40
- @outputs = File.open(output_list).readlines.map do |line|
41
- line.strip
42
- end.select do |line|
43
- File.fnmatch? filter, File.basename(line.strip)
39
+ produced_file_list = File.join(project.full_path, "output", @name, "produced_file_list")
40
+ @outputs = if File.exist?(produced_file_list)
41
+ File.open(produced_file_list).readlines.map do |line|
42
+ line.strip
43
+ end.select do |line|
44
+ File.fnmatch? filter, File.basename(line.strip)
45
+ end
46
+ else
47
+ []
44
48
  end
45
49
  end
46
50
 
data/lib/gjp/project.rb CHANGED
@@ -38,19 +38,16 @@ module Gjp
38
38
  Dir.chdir(dir) do
39
39
  Gjp::Git.new(".").init
40
40
 
41
- Dir.mkdir "src"
42
- Dir.mkdir "kit"
41
+ FileUtils.mkdir_p "src"
42
+ FileUtils.mkdir_p "kit"
43
43
 
44
44
  # populate the project with templates and take a snapshot
45
45
  project = Project.new(".")
46
46
 
47
47
  template_manager = Gjp::TemplateManager.new
48
- template_manager.copy "archives", "."
49
- template_manager.copy "file_lists", "."
48
+ template_manager.copy "output", "."
50
49
  template_manager.copy "kit", "."
51
- template_manager.copy "specs", "."
52
50
  template_manager.copy "src", "."
53
- template_manager.copy ".gitignore", ".gitignore"
54
51
 
55
52
  project.take_snapshot "Template files added", :init
56
53
  end
@@ -86,7 +83,7 @@ module Gjp
86
83
  else
87
84
  take_snapshot "Changes during dry-run"
88
85
 
89
- update_output_file_lists
86
+ update_produced_file_lists
90
87
  take_snapshot "File list updates"
91
88
 
92
89
  @git.revert_whole_directory("src", latest_tag(:dry_run_started))
@@ -101,19 +98,29 @@ module Gjp
101
98
 
102
99
  # updates files that contain lists of the output files produced by
103
100
  # the build of each package
104
- def update_output_file_lists
105
- each_package_directory do |directory|
101
+ def update_produced_file_lists
102
+ each_package_directory do |name, path|
103
+ FileUtils.mkdir_p(File.join("output", name))
104
+
105
+ list_file = File.join("output", name, "produced_file_list")
106
+ tracked_files = if File.exists?(list_file)
107
+ File.readlines(list_file).map { |line| line.strip }
108
+ else
109
+ []
110
+ end
111
+
106
112
  files = (
107
113
  @git.changed_files_since(latest_tag(:dry_run_started))
108
- .select { |file| file.start_with?(directory) }
109
- .map { |file|file[directory.length + 1, file.length] }
114
+ .select { |file| file.start_with?(path) }
115
+ .map { |file|file[path.length + 1, file.length] }
116
+ .concat(tracked_files)
117
+ .uniq
110
118
  .sort
111
119
  )
112
120
 
113
- log.debug("writing file list for #{directory}: #{files.to_s}")
121
+ log.debug("writing file list for #{path}: #{files.to_s}")
114
122
 
115
- list_path = File.join("file_lists", "#{Pathname.new(directory).basename}_output")
116
- File.open(list_path, "w+") do |file_list|
123
+ File.open(list_file, "w+") do |file_list|
117
124
  files.each do |file|
118
125
  file_list.puts file
119
126
  end
@@ -185,7 +192,7 @@ module Gjp
185
192
  Dir.foreach("src") do |entry|
186
193
  if File.directory?(File.join(Dir.getwd, "src", entry)) and entry != "." and entry != ".."
187
194
  directory = File.join("src", entry)
188
- yield directory
195
+ yield entry, directory
189
196
  end
190
197
  end
191
198
  end
@@ -10,18 +10,17 @@ module Gjp
10
10
  end
11
11
 
12
12
  def generate_kit_spec
13
- spec_path = File.join("specs", "#{@project.name}-kit.spec")
13
+ destination_dir = File.join(@project.full_path, "output", "#{@project.name}-kit")
14
+ FileUtils.mkdir_p(destination_dir)
15
+ spec_path = File.join(destination_dir, "#{@project.name}-kit.spec")
14
16
  conflict_count = generate_merging("kit.spec", @project.get_binding, spec_path, :generate_kit_spec)
15
17
  [spec_path, conflict_count]
16
18
  end
17
19
 
18
20
  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
21
+ destination_dir = File.join(@project.full_path, "output", name)
22
+ FileUtils.mkdir_p(destination_dir)
23
+ spec_path = File.join(destination_dir, "#{name}.spec")
25
24
 
26
25
  adapter = Gjp::PackageSpecAdapter.new(@project, name, Gjp::Pom.new(pom), filter)
27
26
 
data/lib/gjp/version.rb CHANGED
@@ -1,5 +1,5 @@
1
1
  # encoding: UTF-8
2
2
 
3
3
  module Gjp
4
- VERSION = "0.20.0"
4
+ VERSION = "0.21.0"
5
5
  end
@@ -1,2 +1,2 @@
1
1
  *.gjp_user_edited
2
- archives/
2
+ *.tar.xz
@@ -0,0 +1,3 @@
1
+ gjp will save all output files it generates (specs, archives, etc.) here.
2
+
3
+ Feel free to use this directory as an OBS project root.
@@ -37,7 +37,7 @@ describe Gjp::Archiver do
37
37
 
38
38
  archiver.archive_kit
39
39
  @project.from_directory do
40
- `tar -Jtf archives/test-project-kit.tar.xz`.split.should include("kit_test")
40
+ `tar -Jtf output/test-project-kit/test-project-kit.tar.xz`.split.should include("kit_test")
41
41
  end
42
42
  end
43
43
  end
@@ -52,7 +52,7 @@ describe Gjp::Archiver do
52
52
 
53
53
  archiver.archive_package "package-name"
54
54
  @project.from_directory do
55
- `tar -Jtf archives/package-name.tar.xz`.split.should include("src_test")
55
+ `tar -Jtf output/package-name/package-name.tar.xz`.split.should include("src_test")
56
56
  end
57
57
  end
58
58
  end
@@ -99,7 +99,7 @@ describe Gjp::Project do
99
99
  @project.from_directory do
100
100
  `git rev-list --all`.split("\n").length.should eq 5
101
101
  File.read("src/abc/test").should eq "A\n"
102
- File.readlines(File.join("file_lists", "abc_output")).should include("test2\n")
102
+ File.readlines(File.join("output", "abc", "produced_file_list")).should include("test2\n")
103
103
 
104
104
  `git diff-tree --no-commit-id --name-only -r HEAD~`.split("\n").should_not include("src/abc/test2")
105
105
  File.exists?("src/abc/test2").should be_false
@@ -135,7 +135,7 @@ describe Gjp::Project do
135
135
  File.read("kit/test").should eq "A\n"
136
136
  File.exists?("kit/test2").should be_false
137
137
 
138
- File.exists?(File.join("file_lists", "abc_output")).should be_false
138
+ File.exists?(File.join("output", "abc", "produced_file_list")).should be_false
139
139
  end
140
140
  end
141
141
  end
@@ -29,7 +29,7 @@ describe Gjp::SpecGenerator do
29
29
  @spec_generator.generate_kit_spec.should be_true
30
30
 
31
31
  @project.from_directory do
32
- spec_lines = File.readlines(File.join("specs", "test-project-kit.spec"))
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
35
  spec_lines.should include("Source0: %{name}.tar.xz\n")
@@ -42,7 +42,7 @@ describe Gjp::SpecGenerator do
42
42
  test_file = File.join("kit", "test")
43
43
  File.open(test_file, "w") { |io| io.puts "changed kit content test file" }
44
44
 
45
- File.open(File.join("specs", "test-project-kit.spec"), "a") do |io|
45
+ File.open(File.join("output", "test-project-kit", "test-project-kit.spec"), "a") do |io|
46
46
  io.write("nonconflicting line")
47
47
  end
48
48
  end
@@ -51,7 +51,7 @@ describe Gjp::SpecGenerator do
51
51
  @spec_generator.generate_kit_spec.should be_true
52
52
 
53
53
  @project.from_directory do
54
- spec_lines = File.readlines(File.join("specs", "test-project-kit.spec"))
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
57
  spec_lines.should include("Source0: %{name}.tar.xz\n")
@@ -65,7 +65,7 @@ describe Gjp::SpecGenerator do
65
65
  test_file = File.join("kit", "test")
66
66
  File.open(test_file, "w") { |io| io.puts "changed kit content test file" }
67
67
 
68
- spec_path = File.join("specs", "test-project-kit.spec")
68
+ spec_path = File.join("output", "test-project-kit", "test-project-kit.spec")
69
69
  spec_contents = File.read spec_path
70
70
 
71
71
  spec_contents.gsub! /^Version:.*$/, "CONFLICTING!"
@@ -79,7 +79,7 @@ describe Gjp::SpecGenerator do
79
79
  @spec_generator.generate_kit_spec.should be_true
80
80
 
81
81
  @project.from_directory do
82
- spec_lines = File.readlines(File.join("specs", "test-project-kit.spec"))
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
84
  spec_lines.should include("Source0: %{name}.tar.xz\n")
85
85
  spec_lines.should include("<<<<<<< newly generated\n")
@@ -115,7 +115,7 @@ describe Gjp::SpecGenerator do
115
115
  @spec_generator.generate_package_spec "test", File.join("spec", "data", "nailgun", "pom.xml"), "*.jar"
116
116
 
117
117
  @project.from_directory do
118
- spec_lines = File.readlines(File.join("specs", "test.spec"))
118
+ spec_lines = File.readlines(File.join("output", "test", "test.spec"))
119
119
  spec_lines.should include("Name: test\n")
120
120
  spec_lines.should include("License: The Apache Software License, Version 2.0\n")
121
121
  spec_lines.should include("Summary: Nailgun is a client, protocol, and server for running Java\n")
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.20.0
4
+ version: 0.21.0
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -176,14 +176,12 @@ files:
176
176
  - lib/gjp/template_manager.rb
177
177
  - lib/gjp/version.rb
178
178
  - lib/gjp/version_matcher.rb
179
- - lib/template/.gitignore
180
- - lib/template/archives/CONTENTS
181
- - lib/template/file_lists/CONTENTS
182
179
  - lib/template/kit.spec
183
180
  - lib/template/kit/CONTENTS
184
181
  - lib/template/kit/m2/settings.xml
182
+ - lib/template/output/.gitignore
183
+ - lib/template/output/CONTENTS
185
184
  - lib/template/package.spec
186
- - lib/template/specs/CONTENTS
187
185
  - lib/template/src/CONTENTS
188
186
  - spec/data/ant-super-simple-code/build.xml
189
187
  - spec/data/ant-super-simple-code/build/HW.class
@@ -1,3 +0,0 @@
1
- gjp will generate file lists its internal use here.
2
-
3
- You should not edit them manually.
@@ -1,3 +0,0 @@
1
- gjp will generate spec files for all packages here.
2
-
3
- You can edit them manually, if you wish, and also let gjp regenerate them later. If you do that, gjp will use three-way merge if possible (prompting in case any conflict arise).