tetra 0.45.0 → 0.46.0

Sign up to get free protection for your applications and to get access to all the features.
data/.rubocop.yml CHANGED
@@ -7,6 +7,9 @@ LineLength:
7
7
  MethodLength:
8
8
  Max: 40
9
9
 
10
+ AbcSize:
11
+ Max: 50
12
+
10
13
  StringLiterals:
11
14
  EnforcedStyle: double_quotes
12
15
 
data/README.md CHANGED
@@ -72,7 +72,7 @@ Finally, generate build scripts, spec files and tarballs in the `packages/` dire
72
72
 
73
73
  tetra generate-all
74
74
 
75
- Note that `tetra` will generate files for the commons-collections package and all binary-only build-time dependencies in the `kit/` folder.
75
+ Note that `tetra` will generate files for the commons-collections package and all binary-only build-time dependencies in the `packages/` folder.
76
76
 
77
77
  ## In-depth information
78
78
 
data/SPECIAL_CASES.md CHANGED
@@ -11,11 +11,11 @@ You can do any manual changes to spec and build.sh files and regenerate them lat
11
11
  * `tetra generate-script`: (re)generates the `build.sh` file from the latest bash history (assumes `tetra dry-run` and `tetra finish` have been used);
12
12
  * `tetra generate-archive`: (re)generates the package tarball;
13
13
  * `tetra generate-spec`: (re)generates the package spec;
14
- * `tetra generate-kit`: (re)generates all kit tarballs and specs;
14
+ * `tetra generate-kit`: (re)generates the kit tarball and spec;
15
15
 
16
16
  ## Kit sources
17
17
 
18
- Your kit packages are basically binary blobs. If its sources are needed for proper packaging, for example to comply with the GPL, some extra steps are needed.
18
+ Your kit package is basically a binary blob. If its sources are needed for proper packaging, for example to comply with the GPL, some extra steps are needed.
19
19
 
20
20
  If you use Maven, most (~90%) of the sources can be automatically downloaded:
21
21
 
@@ -55,26 +55,27 @@ Other build tools are currently unsupported but will be added in the future. You
55
55
 
56
56
  ## [OBS](build.opensuse.org) integration
57
57
 
58
- If you want to submit your package to OBS, you can do so by copying contents of the `packages` and `packages/kit` in proper OBS project directories.
58
+ If you want to submit your package to OBS, you can do so by copying contents of the `packages` in a proper OBS project directory.
59
59
 
60
60
  Packages will rebuild cleanly in OBS because no Internet access is needed - all files were already downloaded during dry-run and are included in the kit.
61
61
 
62
- Note that packages in `kit` are only needed at build time only by OBS, no end user should ever install them, so you can place them in non-public repositories.
63
-
64
- Also note that you can mix and match packages from `kit` with other `tetra`-built packages, even from other users, as they are designed to be immutable and will not break your builds.
62
+ Note that the kit packages is only needed at build time by OBS, no end user should ever install it, so you can place it in a non-public project/repository if you so wish.
65
63
 
66
64
  ## Gotchas
67
65
 
68
66
  * `tetra` internally uses `git` to keep track of files, any tetra project is actually also a `git` repo. Feel free to navigate it, you can commit, push and pull as long as the `tetra` tags are preserved. You can also delete commits and tags, effectively rewinding tetra history (just make sure to delete all tags pointing to a certain commit when you discard it);
69
67
  * some Maven plugins like the Eclipse Project ones ([Tycho](https://www.eclipse.org/tycho/)) will save data in `/tmp` downloaded from the Internet and will produce errors if this data is not there during offline builds. One way to work around that is to force Java to use a kit subdirectory as `/tmp`. Add the following option to `tetra mvn` during your build:
70
68
 
71
- -DskipTests=true -Djava.io.tmpdir=<full path to project>/kit/tmp
69
+ -Djava.io.tmpdir=<full path to project>/kit/tmp
72
70
 
73
71
  Use the following option in `mvn` in your build.sh file to make it reproducible:
74
72
 
75
- -DskipTests=true -Djava.io.tmpdir=$PROJECT_PREFIX/kit/tmp
73
+ -Djava.io.tmpdir=$PROJECT_PREFIX/kit/tmp
76
74
 
77
75
  * Tycho builds may also require NSS, so if you get NSS errors be sure to add `mozilla-nss` or an equivalent package in a BuildRequires: line;
76
+ * some badly designed testsuites might not work in OBS. If you are using `tetra mvn` you can add the following option to disable them:
77
+
78
+ -DskipTests=true
78
79
 
79
80
  * if you want to be 100% sure your package builds without network access, you can use scripts in the `utils/` folder to create a special `nonet` user that cannot use the Internet and retry the build from that user.
80
81
 
@@ -8,14 +8,12 @@
8
8
  set -e
9
9
 
10
10
  OBS_HOST=obs-client
11
- OBS_PROJECT_DIR=/home/silvio/obs/home\:SilvioMoioli
11
+ OBS_PROJECT_DIR=/home/silvio/obs/home\:SilvioMoioli\:tetra-test
12
12
 
13
- scp -r commons/output/* $OBS_HOST:/$OBS_PROJECT_DIR
13
+ scp -r commons-collections/packages/* $OBS_HOST:/$OBS_PROJECT_DIR
14
14
  ssh -t $OBS_HOST <<EOF
15
- cd $OBS_PROJECT_DIR/commons-kit/ &&\
16
- osc build -k../rpms -p../rpms &&\
17
- cd ../commons-collections/ &&\
18
- osc build -k../rpms -p../rpms &&\
19
- cd ../commons-fileupload/ &&\
20
- osc build -k../rpms -p../rpms
15
+ cd $OBS_PROJECT_DIR/commons-collections-kit &&\
16
+ osc build -k../../rpms -p../../rpms &&\
17
+ cd $OBS_PROJECT_DIR/commons-collections &&\
18
+ osc build -k../../rpms -p../../rpms
21
19
  EOF
@@ -12,21 +12,19 @@
12
12
  # license that conforms to the Open Source Definition (Version 1.9)
13
13
  # published by the Open Source Initiative.
14
14
 
15
- Name: <%= package_name %>
16
- Version: 1
15
+ Name: <%= name %>
16
+ Version: <%= version %>
17
17
  Release: 1
18
18
  License: SUSE-NonFree
19
- Summary: Build-time dependency of project "<%= project.name %>"
19
+ Summary: Build-time dependency of project "<%= project_name %>"
20
20
  Url: https://github.com/SilvioMoioli/tetra
21
21
  Group: Development/Libraries/Java
22
22
  Source0: %{name}.tar.xz
23
23
  BuildRoot: %{_tmppath}/%{name}-%{version}-build
24
24
  BuildArch: noarch
25
25
  BuildRequires: xz
26
- Provides: <%= provides_symbol %> == <%= provides_version %>
27
- <% if conflicts %>
28
- Conflicts: otherproviders(<%= provides_symbol %>)
29
- <% end %>
26
+ Provides: tetra-kit
27
+ Conflicts: otherproviders(tetra-kit)
30
28
 
31
29
  %description
32
30
  This package has been automatically created by tetra in order to
@@ -42,12 +40,11 @@ thus it should never be installed on end users' systems.
42
40
 
43
41
  %install
44
42
  export NO_BRP_CHECK_BYTECODE_VERSION=true
45
- install -d -m 0755 %{buildroot}%{_datadir}/tetra/<%= install_dir %>
46
- cp -a * %{buildroot}%{_datadir}/tetra/<%= install_dir %>
43
+ install -d -m 0755 %{buildroot}%{_datadir}/tetra/
44
+ cp -a * %{buildroot}%{_datadir}/tetra/
47
45
 
48
46
  %files
49
47
  %defattr(-,root,root)
50
- %{_datadir}/tetra
51
- %{_datadir}/tetra/<%= install_dir %>
48
+ %{_datadir}/tetra/
52
49
 
53
50
  %changelog
@@ -27,9 +27,7 @@ Source1: build.sh
27
27
  BuildRoot: %{_tmppath}/%{name}-%{version}-build
28
28
  BuildRequires: xz
29
29
  BuildRequires: java-devel
30
- <% kit_items.each do |item| %>
31
- BuildRequires: <%= item.provides_symbol %> == <%= item.provides_version %>
32
- <% end %>
30
+ BuildRequires: <%= kit_name %> == <%= kit_version %>
33
31
  BuildArch: noarch
34
32
  Provides: mvn(<%= group_id %>:<%= artifact_id %>) == <%= version %>
35
33
  Requires: java
@@ -1,3 +1 @@
1
1
  tetra will save all output files it generates (specs, archives, etc.) here.
2
-
3
- Feel free to use this directory as an OBS project root.
data/lib/tetra.rb CHANGED
@@ -38,9 +38,6 @@ require "tetra/kit_checker"
38
38
  require "tetra/packages/archivable"
39
39
  require "tetra/packages/speccable"
40
40
  require "tetra/packages/scriptable"
41
- require "tetra/packages/maven_kit_item"
42
- require "tetra/packages/jar_kit_item"
43
- require "tetra/packages/glue_kit_item"
44
41
  require "tetra/packages/kit"
45
42
  require "tetra/packages/built_package"
46
43
 
@@ -7,7 +7,7 @@ module Tetra
7
7
 
8
8
  # runs ant in a subprocess
9
9
  def ant(options)
10
- run_executable("#{get_ant_commandline(@project.full_path)} #{options.join(" ")}")
10
+ run_executable("#{get_ant_commandline(@project.full_path)} #{options.join(' ')}")
11
11
  end
12
12
 
13
13
  # returns a command line for running Ant from the specified
@@ -7,13 +7,12 @@ module Tetra
7
7
  checking_exceptions do
8
8
  project = Tetra::Project.new(".")
9
9
  ensure_dry_running(false, project) do
10
- Tetra::Kit.new(project).items.each do |item|
11
- result_path, conflict_count = item.to_spec
12
- print_generation_result(project, result_path, conflict_count)
10
+ kit = Tetra::Kit.new(project)
11
+ result_path, conflict_count = kit.to_spec
12
+ print_generation_result(project, result_path, conflict_count)
13
13
 
14
- result_path = item.to_archive
15
- print_generation_result(project, result_path)
16
- end
14
+ result_path = kit.to_archive
15
+ print_generation_result(project, result_path)
17
16
  end
18
17
  end
19
18
  end
@@ -25,7 +25,7 @@ module Tetra
25
25
  puts "#{format_path(path, project)} written, #{text_status}"
26
26
  else
27
27
  puts "#{name}'s pom not found. Try:"
28
- puts "http://google.com/#q=#{URI.encode(pom_getter.cleanup_name(name) + " pom")}"
28
+ puts "http://google.com/#q=#{URI.encode(pom_getter.cleanup_name(name) + ' pom')}"
29
29
  end
30
30
  end
31
31
  end
@@ -12,7 +12,7 @@ module Tetra
12
12
  puts "Some source files were not found in these archives:"
13
13
  kit_checker.unsourced_archives.each do |archive|
14
14
  percentage = 100.0 * archive[:unsourced_class_names].length / archive[:class_names].length
15
- puts "#{format_path(archive[:archive], project)} (~#{format("%.2f", percentage)}% missing)"
15
+ puts "#{format_path(archive[:archive], project)} (~#{format('%.2f', percentage)}% missing)"
16
16
  end
17
17
  end
18
18
  end
@@ -21,11 +21,7 @@ module Tetra
21
21
  def get_effective_pom(pom_path)
22
22
  effective_pom_path = "#{pom_path}.effective"
23
23
  success = mvn(["help:effective-pom", "-f#{pom_path}", "-Doutput=#{File.split(effective_pom_path)[1]}"])
24
- if success
25
- effective_pom_path
26
- else
27
- nil
28
- end
24
+ effective_pom_path if success
29
25
  end
30
26
 
31
27
  # returns a command line for running Maven from the specified
@@ -38,7 +34,7 @@ module Tetra
38
34
  repo_path = File.join(prefix, "kit", "m2")
39
35
  config_path = File.join(prefix, "kit", "m2", "settings.xml")
40
36
 
41
- "#{mvn_path} -Dmaven.repo.local=#{repo_path} -s#{config_path} #{options.join(" ")}"
37
+ "#{mvn_path} -Dmaven.repo.local=#{repo_path} -s#{config_path} #{options.join(' ')}"
42
38
  else
43
39
  fail ExecutableNotFoundError, "mvn"
44
40
  end
@@ -51,7 +51,7 @@ module Tetra
51
51
 
52
52
  # downloads a POM from a search.maven.com search result
53
53
  def download_pom(group_id, artifact_id, version)
54
- path = "#{group_id.gsub(".", "/")}/#{artifact_id}/#{version}/#{artifact_id}-#{version}.pom"
54
+ path = "#{group_id.gsub('.', '/')}/#{artifact_id}/#{version}/#{artifact_id}-#{version}.pom"
55
55
  log.debug("downloading #{path}...")
56
56
  (RestClient.get "http://search.maven.org/remotecontent", params: { filepath: path }).to_s
57
57
  end
@@ -6,9 +6,9 @@ module Tetra
6
6
  include Logging
7
7
 
8
8
  # generates an archive and returns its name
9
- # this will archive source_paths starting from source_dir in
9
+ # this will archive files in source_dir in
10
10
  # destination_dir/name/name.tar.xz
11
- def _to_archive(project, name, source_dir, source_paths, destination_dir)
11
+ def _to_archive(project, name, source_dir, destination_dir)
12
12
  full_destination_dir = File.join(project.full_path, destination_dir, name)
13
13
  log.debug "creating #{full_destination_dir}"
14
14
  FileUtils.mkdir_p(full_destination_dir)
@@ -17,7 +17,7 @@ module Tetra
17
17
  destination_path = File.join(full_destination_dir, "#{name}.tar.xz")
18
18
  log.debug "tarring to #{destination_path}"
19
19
 
20
- `tar -cJf #{destination_path} #{source_paths.join(" ")}`
20
+ `tar -cJf #{destination_path} *`
21
21
 
22
22
  destination_path
23
23
  end
@@ -1,7 +1,7 @@
1
1
  # encoding: UTF-8
2
2
 
3
3
  module Tetra
4
- # represents a Java project packaged in Tetra
4
+ # represents a Java project packaged in tetra
5
5
  class BuiltPackage
6
6
  extend Forwardable
7
7
  include Archivable
@@ -9,7 +9,8 @@ module Tetra
9
9
  include Scriptable
10
10
 
11
11
  def_delegator :@project, :name, :name
12
- def_delegator :@kit, :items, :kit_items
12
+ def_delegator :@kit, :name, :kit_name
13
+ def_delegator :@kit, :version, :kit_version
13
14
  def_delegator :@pom, :license_name, :license
14
15
  def_delegator :@pom, :url
15
16
  def_delegator :@pom, :group_id
@@ -51,7 +52,7 @@ module Tetra
51
52
  end
52
53
 
53
54
  def to_archive
54
- _to_archive(@project, name, "src", ["*"], @project.packages_dir)
55
+ _to_archive(@project, name, "src", @project.packages_dir)
55
56
  end
56
57
 
57
58
  def to_spec
@@ -1,73 +1,31 @@
1
1
  # encoding: UTF-8
2
2
 
3
3
  module Tetra
4
- # represents a set of binary dependency packages
4
+ # a packaged set of binary build-time dependencies
5
5
  class Kit
6
- include Logging
6
+ extend Forwardable
7
+ include Archivable
8
+ include Speccable
9
+
10
+ attr_reader :name
11
+ attr_reader :version
12
+ def_delegator :@project, :name, :project_name
7
13
 
8
14
  def initialize(project)
9
15
  @project = project
10
- end
11
-
12
- def items
13
- managed_items = maven_kit_items + jar_kit_items
14
-
15
- managed_items + glue_kit_items(managed_items)
16
- end
17
16
 
18
- def maven_kit_items
19
- @project.from_directory(File.join("kit", "m2")) do
20
- files_in_dir = {}
21
- poms = []
22
- Find.find(".") do |file|
23
- dir = File.dirname(file)
24
- if files_in_dir.key?(dir)
25
- files_in_dir[dir] << file
26
- else
27
- files_in_dir[dir] = [file]
28
- end
29
-
30
- if file =~ /\.pom$/
31
- log.debug "pom found in #{file}"
32
- poms << file
33
- end
34
- end
35
-
36
- poms.map do |pom|
37
- Tetra::MavenKitItem.new(@project, pom, files_in_dir[File.dirname(pom)])
38
- end
39
- end
17
+ @name = "#{project.name}-kit"
18
+ @version = "#{project.version}"
40
19
  end
41
20
 
42
- def jar_kit_items
43
- @project.from_directory(File.join("kit", "jars")) do
44
- Pathname.new(".").children.select do |child|
45
- child.to_s =~ /.jar$/
46
- end.sort.map do |jar|
47
- Tetra::JarKitItem.new(@project, jar)
48
- end
49
- end
21
+ def to_archive
22
+ _to_archive(@project, name, "kit",
23
+ @project.packages_dir)
50
24
  end
51
25
 
52
- def glue_kit_items(managed_items)
53
- managed_files = managed_items.map do |item|
54
- item.source_paths.map do |e|
55
- Pathname.new(File.join(item.source_dir, e)).cleanpath
56
- end
57
- end.flatten
58
-
59
- unmanaged_files = []
60
-
61
- @project.from_directory do
62
- Find.find("kit") do |file|
63
- pathname = Pathname.new(file)
64
- if !managed_files.include?(pathname) && !File.directory?(pathname)
65
- unmanaged_files << pathname.relative_path_from(Pathname.new("kit"))
66
- end
67
- end
68
- end
69
-
70
- [Tetra::GlueKitItem.new(@project, unmanaged_files)]
26
+ def to_spec
27
+ _to_spec(@project, name, "kit.spec",
28
+ @project.packages_dir)
71
29
  end
72
30
  end
73
31
  end
@@ -8,14 +8,14 @@ module Tetra
8
8
  maven_runner = Tetra::MavenRunner.new(project)
9
9
 
10
10
  project.from_directory do
11
- history_lines = File.readlines(history_path).map { |e| e.strip }
11
+ history_lines = File.readlines(history_path).map(&:strip)
12
12
  relevant_lines =
13
13
  history_lines
14
- .reverse
15
- .take_while { |e| e.match(/tetra +dry-run/).nil? }
16
- .reverse
17
- .take_while { |e| e.match(/tetra +finish/).nil? }
18
- .select { |e| e.match(/^#/).nil? }
14
+ .reverse
15
+ .take_while { |e| e.match(/tetra +dry-run/).nil? }
16
+ .reverse
17
+ .take_while { |e| e.match(/tetra +finish/).nil? }
18
+ .select { |e| e.match(/^#/).nil? }
19
19
 
20
20
  script_lines = [
21
21
  "#!/bin/bash",
@@ -23,15 +23,15 @@ module Tetra
23
23
  "PROJECT_PREFIX=`readlink -e .`",
24
24
  "cd #{project.latest_dry_run_directory}"
25
25
  ] +
26
- relevant_lines.map do |line|
27
- if line =~ /tetra +mvn/
28
- line.gsub(/tetra +mvn/, "#{maven_runner.get_maven_commandline("$PROJECT_PREFIX", ["-o"])}")
29
- elsif line =~ /tetra +ant/
30
- line.gsub(/tetra +ant/, "#{ant_runner.get_ant_commandline("$PROJECT_PREFIX")}")
31
- else
32
- line
33
- end
34
- end
26
+ relevant_lines.map do |line|
27
+ if line =~ /tetra +mvn/
28
+ line.gsub(/tetra +mvn/, "#{maven_runner.get_maven_commandline('$PROJECT_PREFIX', ['-o'])}")
29
+ elsif line =~ /tetra +ant/
30
+ line.gsub(/tetra +ant/, "#{ant_runner.get_ant_commandline('$PROJECT_PREFIX')}")
31
+ else
32
+ line
33
+ end
34
+ end
35
35
 
36
36
  new_content = script_lines.join("\n") + "\n"
37
37
 
@@ -45,7 +45,7 @@ module Tetra
45
45
  result = results.first
46
46
  unless result.nil?
47
47
  log.info("pom.xml for #{file} found on search.maven.org for sha1 #{sha1}\
48
- (#{result["g"]}:#{result["a"]}:#{result["v"]})"
48
+ (#{result['g']}:#{result['a']}:#{result['v']})"
49
49
  )
50
50
  group_id, artifact_id, version = site.get_maven_id_from result
51
51
  return site.download_pom(group_id, artifact_id, version), :found_via_sha1
data/lib/tetra/project.rb CHANGED
@@ -25,10 +25,6 @@ module Tetra
25
25
  "packages"
26
26
  end
27
27
 
28
- def kit_packages_dir
29
- File.join(packages_dir, "kit")
30
- end
31
-
32
28
  # finds the project directory up in the tree, like git does
33
29
  def self.find_project_dir(starting_dir)
34
30
  result = starting_dir
@@ -44,8 +40,8 @@ module Tetra
44
40
  # returns true if the specified directory is a valid tetra project
45
41
  def self.project?(dir)
46
42
  File.directory?(File.join(dir, "src")) &&
47
- File.directory?(File.join(dir, "kit")) &&
48
- File.directory?(File.join(dir, ".git"))
43
+ File.directory?(File.join(dir, "kit")) &&
44
+ File.directory?(File.join(dir, ".git"))
49
45
  end
50
46
 
51
47
  # inits a new project directory structure
@@ -217,8 +213,8 @@ module Tetra
217
213
  FileUtils.mv(file, new_location)
218
214
 
219
215
  link_target = Pathname.new(new_location)
220
- .relative_path_from(Pathname.new(file).split.first)
221
- .to_s
216
+ .relative_path_from(Pathname.new(file).split.first)
217
+ .to_s
222
218
 
223
219
  File.symlink(link_target, file)
224
220
  result << [file, new_location]
data/lib/tetra/version.rb CHANGED
@@ -2,5 +2,5 @@
2
2
 
3
3
  # base module for tetra
4
4
  module Tetra
5
- VERSION = "0.45.0"
5
+ VERSION = "0.46.0"
6
6
  end
@@ -26,24 +26,25 @@ module Tetra
26
26
  # - score weighs differently on chunk index (first chunks are most important)
27
27
  # - lowest score wins
28
28
  def best_match(my_version, their_versions)
29
- log.debug("version comparison: #{my_version} vs #{their_versions.join(", ")}")
29
+ log.debug("version comparison: #{my_version} vs #{their_versions.join(', ')}")
30
30
 
31
31
  my_chunks = my_version.split(/[\.\-\_ ~,]/)
32
32
  their_chunks_hash = Hash[
33
- their_versions.map do |their_version|
34
- their_chunks_for_version = (
35
- if !their_version.nil?
36
- their_version.split(/[\.\-\_ ~,]/)
37
- else
38
- []
39
- end
40
- )
41
- their_chunks_for_version += [nil] * [my_chunks.length - their_chunks_for_version.length, 0].max
42
- [their_version, their_chunks_for_version]
43
- end
33
+ their_versions.map do |their_version|
34
+ their_chunks_for_version = (
35
+ if !their_version.nil?
36
+ their_version.split(/[\.\-\_ ~,]/)
37
+ else
38
+ []
39
+ end
40
+ )
41
+ chunks_count = [my_chunks.length - their_chunks_for_version.length, 0].max
42
+ their_chunks_for_version += [nil] * chunks_count
43
+ [their_version, their_chunks_for_version]
44
+ end
44
45
  ]
45
46
 
46
- max_chunks_length = ([my_chunks.length] + their_chunks_hash.values.map { |chunk| chunk.length }).max
47
+ max_chunks_length = ([my_chunks.length] + their_chunks_hash.values.map(&:length)).max
47
48
 
48
49
  scoreboard = []
49
50
  their_versions.each do |their_version|
@@ -26,7 +26,7 @@ describe Tetra::Archivable do
26
26
  FileUtils.touch("kit_test")
27
27
  end
28
28
 
29
- instance._to_archive(@project, "test-package", "kit", ["*"], @project.packages_dir)
29
+ instance._to_archive(@project, "test-package", "kit", @project.packages_dir)
30
30
 
31
31
  @project.from_directory do
32
32
  expect(`tar -Jtf packages/test-package/test-package.tar.xz`.split).to include("kit_test")
@@ -50,9 +50,7 @@ describe Tetra::BuiltPackage do
50
50
  expect(spec_lines).to include("License: The Apache Software License, Version 2.0\n")
51
51
  expect(spec_lines).to include("Summary: Nailgun is a client, protocol, and server for running Java\n")
52
52
  expect(spec_lines).to include("Url: http://martiansoftware.com/nailgun\n")
53
- expect(spec_lines).to include("BuildRequires: tetra-jar(test.jar) == \
54
- da39a3ee5e6b4b0d3255bfef95601890afd80709\n")
55
- expect(spec_lines).to include("BuildRequires: tetra-glue == test-project-2\n")
53
+ expect(spec_lines).to include("BuildRequires: test-project-kit == 2\n")
56
54
  expect(spec_lines).to include("Provides: mvn(com.martiansoftware:nailgun-all) == 0.9.1\n")
57
55
  expect(spec_lines).to include("cp -a out/test3.jar %{buildroot}%{_javadir}/test3.jar\n")
58
56
  end
data/spec/lib/kit_spec.rb CHANGED
@@ -7,61 +7,41 @@ describe Tetra::Kit do
7
7
 
8
8
  before(:each) do
9
9
  create_mock_project
10
-
11
- @project.dry_run
12
- @project.finish(false)
13
-
14
- @kit = Tetra::Kit.new(@project)
15
10
  end
16
11
 
17
12
  after(:each) do
18
13
  delete_mock_project
19
14
  end
20
15
 
21
- describe "#maven_kit_items" do
22
- it "finds binary packages" do
23
- @project.from_directory(File.join("kit", "m2")) do
24
- maven_kit_item_path = File.join(".", "com", "company",
25
- "project", "artifact", "1.0")
26
- FileUtils.mkdir_p(maven_kit_item_path)
16
+ let(:instance) { Tetra::Kit.new(@project) }
17
+ let(:package_name) { instance.name }
27
18
 
28
- expected_source_paths = [
29
- File.join(maven_kit_item_path, "artifact-1.0.jar"),
30
- File.join(maven_kit_item_path, "artifact-1.0.pom"),
31
- File.join(maven_kit_item_path, "artifact-1.0.sha1")
32
- ]
19
+ describe "#to_spec" do
20
+ it "generates a specfile" do
21
+ expect(instance.to_spec).to be_truthy
33
22
 
34
- expected_source_paths.each do |file|
35
- FileUtils.touch(file)
36
- end
23
+ @project.from_directory do
24
+ spec_lines = File.readlines(File.join("packages", package_name, "#{package_name}.spec"))
37
25
 
38
- actual_maven_kit_item = @kit.maven_kit_items.first
39
- expect(actual_maven_kit_item.source_paths.sort).to eql(expected_source_paths)
26
+ expect(spec_lines).to include("Conflicts: otherproviders(tetra-kit)\n")
27
+ expect(spec_lines).to include("Provides: tetra-kit\n")
40
28
  end
41
29
  end
42
30
  end
43
31
 
44
- describe "#jar_kit_items" do
45
- it "finds binary packages" do
46
- @project.from_directory(File.join("kit", "jars")) do
47
- FileUtils.touch("test1.jar")
32
+ describe "#to_archive" do
33
+ it "generates an archive" do
34
+ @project.from_directory(File.join("kit", "m2")) do
35
+ FileUtils.touch("kit.content")
48
36
  end
49
37
 
50
- actual_jar_kit_item = @kit.jar_kit_items.first
51
- expect(actual_jar_kit_item.source_paths).to eql([Pathname.new("test1.jar")])
52
- end
53
- end
38
+ expected_filename = File::SEPARATOR + "#{package_name}.tar.xz"
39
+ expect(instance.to_archive).to end_with(expected_filename)
54
40
 
55
- describe "#glue_kit_items" do
56
- it "finds binary packages" do
57
- @project.from_directory(File.join("kit")) do
58
- FileUtils.touch(File.join("jars", "test1.jar"))
59
- FileUtils.touch("test2.jar")
41
+ @project.from_directory do
42
+ contents = `tar --list -f packages/#{package_name}/#{package_name}.tar.xz`.split
43
+ expect(contents).to include("m2/kit.content")
60
44
  end
61
-
62
- actual_glue_kit_items = @kit.glue_kit_items(@kit.jar_kit_items).first
63
- expect(actual_glue_kit_items.source_paths).not_to include(Pathname.new("test1.jar"))
64
- expect(actual_glue_kit_items.source_paths).to include(Pathname.new("test2.jar"))
65
45
  end
66
46
  end
67
47
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: tetra
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.45.0
4
+ version: 0.46.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: 2014-10-24 00:00:00.000000000 Z
12
+ date: 2014-12-31 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: rake
@@ -163,13 +163,12 @@ files:
163
163
  - integration-tests/build-obs.sh
164
164
  - integration-tests/commons-collections-3.2.1-src.zip
165
165
  - lib/template/gitignore
166
+ - lib/template/kit.spec
166
167
  - lib/template/kit/CONTENTS
167
168
  - lib/template/kit/jars/CONTENTS
168
169
  - lib/template/kit/m2/settings.xml
169
- - lib/template/kit_item.spec
170
170
  - lib/template/package.spec
171
171
  - lib/template/packages/CONTENTS
172
- - lib/template/packages/kit/CONTENTS
173
172
  - lib/template/src/CONTENTS
174
173
  - lib/tetra.rb
175
174
  - lib/tetra/ant_runner.rb
@@ -198,10 +197,7 @@ files:
198
197
  - lib/tetra/maven_website.rb
199
198
  - lib/tetra/packages/archivable.rb
200
199
  - lib/tetra/packages/built_package.rb
201
- - lib/tetra/packages/glue_kit_item.rb
202
- - lib/tetra/packages/jar_kit_item.rb
203
200
  - lib/tetra/packages/kit.rb
204
- - lib/tetra/packages/maven_kit_item.rb
205
201
  - lib/tetra/packages/scriptable.rb
206
202
  - lib/tetra/packages/speccable.rb
207
203
  - lib/tetra/pom.rb
@@ -230,10 +226,8 @@ files:
230
226
  - spec/lib/archivable_spec.rb
231
227
  - spec/lib/built_package_spec.rb
232
228
  - spec/lib/git_spec.rb
233
- - spec/lib/glue_kit_item_spec.rb
234
229
  - spec/lib/kit_checker_spec.rb
235
230
  - spec/lib/kit_spec.rb
236
- - spec/lib/maven_kit_item_spec.rb
237
231
  - spec/lib/maven_runner_spec.rb
238
232
  - spec/lib/maven_website_spec.rb
239
233
  - spec/lib/pom_getter_spec.rb
@@ -1,3 +0,0 @@
1
- tetra will save all binary build dependency packages here.
2
-
3
- Feel free to use this as a subproject in OBS.
@@ -1,41 +0,0 @@
1
- # encoding: UTF-8
2
-
3
- module Tetra
4
- # represents a prebuilt package dependency from a jar file
5
- # in a kit
6
- class GlueKitItem
7
- include Archivable
8
- include Speccable
9
-
10
- attr_reader :project
11
- attr_reader :package_name
12
- attr_reader :conflicts
13
- attr_reader :source_dir
14
- attr_reader :source_paths
15
- attr_reader :provides_symbol
16
- attr_reader :provides_version
17
- attr_reader :install_dir
18
-
19
- def initialize(project, source_paths)
20
- @project = project
21
- @package_name = "kit-item-glue-#{project.name}"
22
- @conflicts = true
23
- @source_dir = "kit"
24
- @source_paths = source_paths
25
-
26
- @provides_symbol = "tetra-glue"
27
- @provides_version = "#{project.name}-#{project.version}"
28
- @install_dir = ""
29
- end
30
-
31
- def to_archive
32
- _to_archive(@project, @package_name, @source_dir,
33
- @source_paths, @project.kit_packages_dir)
34
- end
35
-
36
- def to_spec
37
- _to_spec(@project, @package_name, "kit_item.spec",
38
- @project.kit_packages_dir)
39
- end
40
- end
41
- end
@@ -1,44 +0,0 @@
1
- # encoding: UTF-8
2
-
3
- module Tetra
4
- # represents a prebuilt package dependency from a jar file
5
- # in a kit
6
- class JarKitItem
7
- include Archivable
8
- include Speccable
9
-
10
- attr_reader :project
11
- attr_reader :package_name
12
- attr_reader :conflicts
13
- attr_reader :source_dir
14
- attr_reader :source_paths
15
- attr_reader :provides_symbol
16
- attr_reader :provides_version
17
- attr_reader :install_dir
18
-
19
- def initialize(project, path)
20
- _, name = Pathname.new(path).split
21
- hash = Digest::SHA1.file(path).hexdigest
22
- short_hash = hash.slice(0, 5)
23
-
24
- @project = project
25
- @package_name = "kit-item-#{name.to_s.gsub(".", "-")}-#{short_hash}"
26
- @conflicts = false
27
- @source_dir = File.join("kit", "jars")
28
- @source_paths = [path]
29
- @provides_symbol = "tetra-jar(#{name})"
30
- @provides_version = hash
31
- @install_dir = "jars"
32
- end
33
-
34
- def to_archive
35
- _to_archive(@project, @package_name, @source_dir,
36
- @source_paths, @project.kit_packages_dir)
37
- end
38
-
39
- def to_spec
40
- _to_spec(@project, @package_name, "kit_item.spec",
41
- @project.kit_packages_dir)
42
- end
43
- end
44
- end
@@ -1,66 +0,0 @@
1
- # encoding: UTF-8
2
-
3
- module Tetra
4
- # represents a prebuilt package dependency from a Maven local repo
5
- # in a kit
6
- class MavenKitItem
7
- include Archivable
8
- include Speccable
9
-
10
- attr_reader :project
11
- attr_reader :package_name
12
- attr_reader :conflicts
13
- attr_reader :source_dir
14
- attr_reader :source_paths
15
- attr_reader :provides_symbol
16
- attr_reader :provides_version
17
- attr_reader :install_dir
18
-
19
- def initialize(project, pom, source_paths)
20
- path, _ = path_split(pom)
21
- rest, version = path_split(path)
22
- group_directory, artifact_id = path_split(rest)
23
- group_id = path_to_group(group_directory)
24
- hash = Digest::SHA1.hexdigest(source_paths.to_s)
25
- short_hash = hash.slice(0, 5)
26
-
27
- @project = project
28
- @package_name = "kit-item-#{artifact_id}-#{short_hash}"
29
- @conflicts = false
30
-
31
- @provides_symbol = "tetra-mvn(#{group_id}:#{artifact_id}:#{version})"
32
- @provides_version = hash
33
- @install_dir = "m2"
34
-
35
- @source_dir = File.join("kit", "m2")
36
- @source_paths = source_paths
37
- end
38
-
39
- def to_archive
40
- _to_archive(@project, @package_name, @source_dir,
41
- @source_paths, @project.kit_packages_dir)
42
- end
43
-
44
- def to_spec
45
- _to_spec(@project, @package_name, "kit_item.spec",
46
- @project.kit_packages_dir)
47
- end
48
-
49
- private
50
-
51
- # splits a path string into a [head, tail] string couple
52
- def path_split(path)
53
- Pathname.new(path).split.map { |e| e.to_s }
54
- end
55
-
56
- # transforms a path into a Maven group
57
- def path_to_group(path)
58
- splits = path_split(path)
59
- if splits[0] == "."
60
- return splits[1]
61
- else
62
- return "#{path_to_group(splits[0])}.#{splits[1]}"
63
- end
64
- end
65
- end
66
- end
@@ -1,31 +0,0 @@
1
- # encoding: UTF-8
2
-
3
- require "spec_helper"
4
-
5
- describe Tetra::GlueKitItem do
6
- include Tetra::Mockers
7
-
8
- before(:each) do
9
- create_mock_project
10
- end
11
-
12
- after(:each) do
13
- delete_mock_project
14
- end
15
-
16
- let(:instance) { Tetra::GlueKitItem.new(@project, []) }
17
-
18
- describe "#to_spec" do
19
- it "generates a specfile" do
20
- expect(instance.to_spec).to be_truthy
21
-
22
- @project.from_directory do
23
- package_name = instance.package_name
24
- spec_lines = File.readlines(File.join("packages", "kit", package_name, "#{package_name}.spec"))
25
-
26
- expect(spec_lines).to include("Conflicts: otherproviders(tetra-glue)\n")
27
- expect(spec_lines).to include("Provides: tetra-glue == test-project-0\n")
28
- end
29
- end
30
- end
31
- end
@@ -1,76 +0,0 @@
1
- # encoding: UTF-8
2
-
3
- require "spec_helper"
4
-
5
- describe Tetra::MavenKitItem do
6
- include Tetra::Mockers
7
-
8
- before(:each) do
9
- create_mock_project
10
- end
11
-
12
- after(:each) do
13
- delete_mock_project
14
- end
15
-
16
- let(:group_id) { "com.company.project" }
17
- let(:artifact_id) { "artifact" }
18
- let(:version) { "1.0" }
19
- let(:dir) { File.join(group_id.gsub(".", File::SEPARATOR), artifact_id, version) }
20
- let(:pom) { File.join(dir, "#{artifact_id}-#{version}.pom") }
21
- let(:jar) { File.join(dir, "#{artifact_id}.jar") }
22
- let(:hash) { Digest::SHA1.hexdigest([pom, jar].to_s) }
23
- let(:short_hash) { hash.slice(0, 5) }
24
- let(:package_name) { "kit-item-#{artifact_id}-#{short_hash}" }
25
- let(:maven_kit_item) { Tetra::MavenKitItem.new(@project, pom, [pom, jar]) }
26
-
27
- describe "#provides_symbol" do
28
- it "returns the sepec Provides: symbol" do
29
- expect(maven_kit_item.provides_symbol).to eq("tetra-mvn(com.company.project:artifact:1.0)")
30
- end
31
- end
32
-
33
- describe "#provides_version" do
34
- it "returns the spec Provides: version" do
35
- expect(maven_kit_item.provides_version).to eq(hash)
36
- end
37
- end
38
-
39
- describe "#to_spec" do
40
- it "generates a specfile" do
41
- expect(maven_kit_item.to_spec).to be_truthy
42
-
43
- @project.from_directory do
44
- spec_lines = File.readlines(File.join("packages", "kit", package_name, "#{package_name}.spec"))
45
-
46
- expect(spec_lines).to include("# spec file for a build-time dependency of project \"test-project\"\n")
47
- expect(spec_lines).to include("Name: #{package_name}\n")
48
- expect(spec_lines).to include("Summary: Build-time dependency of project \"test-project\"\n")
49
- expect(spec_lines).to include("Provides: tetra-mvn(#{group_id}:#{artifact_id}:#{version}) == #{hash}\n")
50
-
51
- expect(spec_lines).to include("install -d -m 0755 %{buildroot}%{_datadir}/tetra/m2\n")
52
- expect(spec_lines).to include("cp -a * %{buildroot}%{_datadir}/tetra/m2\n")
53
- expect(spec_lines).to include("%{_datadir}/tetra/m2\n")
54
- end
55
- end
56
- end
57
-
58
- describe "#to_archive" do
59
- it "generates an archive" do
60
- @project.from_directory(File.join("kit", "m2")) do
61
- FileUtils.mkdir_p(dir)
62
- FileUtils.touch(pom)
63
- FileUtils.touch(jar)
64
- end
65
-
66
- expected_filename = File::SEPARATOR + "#{package_name}.tar.xz"
67
- expect(maven_kit_item.to_archive).to end_with(expected_filename)
68
-
69
- @project.from_directory do
70
- contents = `tar -Jtf packages/kit/#{package_name}/#{package_name}.tar.xz`.split
71
- expect(contents).to include("com/company/project/artifact/1.0/artifact-1.0.pom")
72
- expect(contents).to include("com/company/project/artifact/1.0/artifact.jar")
73
- end
74
- end
75
- end
76
- end