tetra 0.43.0 → 0.44.0
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/.rubocop.yml +1 -1
- data/README.md +2 -2
- data/SPECIAL_CASES.md +8 -8
- data/integration-tests/build-commons.sh +5 -6
- data/lib/template/gitignore +1 -1
- data/lib/template/{output → packages}/CONTENTS +0 -0
- data/lib/template/packages/kit/CONTENTS +3 -0
- data/lib/tetra.rb +14 -14
- data/lib/tetra/commands/generate_all.rb +7 -11
- data/lib/tetra/commands/{generate_package_archive.rb → generate_archive.rb} +3 -3
- data/lib/tetra/commands/{generate_kit_spec.rb → generate_kit.rb} +5 -2
- data/lib/tetra/commands/generate_script.rb +18 -0
- data/lib/tetra/commands/{generate_package_spec.rb → generate_spec.rb} +3 -3
- data/lib/tetra/git.rb +0 -8
- data/lib/tetra/main.rb +9 -15
- data/lib/tetra/packages/archivable.rb +26 -0
- data/lib/tetra/{package.rb → packages/built_package.rb} +11 -25
- data/lib/tetra/{glue_kit_item.rb → packages/glue_kit_item.rb} +14 -15
- data/lib/tetra/{jar_kit_item.rb → packages/jar_kit_item.rb} +13 -15
- data/lib/tetra/{kit.rb → packages/kit.rb} +0 -0
- data/lib/tetra/{maven_kit_item.rb → packages/maven_kit_item.rb} +13 -13
- data/lib/tetra/packages/scriptable.rb +48 -0
- data/lib/tetra/{spec_generator.rb → packages/speccable.rb} +12 -22
- data/lib/tetra/project.rb +19 -10
- data/lib/tetra/version.rb +1 -1
- data/spec/lib/archivable_spec.rb +36 -0
- data/spec/lib/{package_spec.rb → built_package_spec.rb} +4 -4
- data/spec/lib/git_spec.rb +0 -6
- data/spec/lib/glue_kit_item_spec.rb +1 -1
- data/spec/lib/maven_kit_item_spec.rb +2 -2
- data/spec/lib/project_spec.rb +8 -0
- data/spec/lib/{script_generator_spec.rb → scriptable_spec.rb} +8 -11
- data/spec/lib/{spec_generator_spec.rb → speccable.rb} +11 -20
- metadata +20 -20
- data/lib/tetra/archiver.rb +0 -31
- data/lib/tetra/commands/generate_kit_archive.rb +0 -18
- data/lib/tetra/commands/generate_package_script.rb +0 -18
- data/lib/tetra/script_generator.rb +0 -58
- data/spec/lib/archiver_spec.rb +0 -50
@@ -4,21 +4,14 @@ module Tetra
|
|
4
4
|
# represents a prebuilt package dependency from a jar file
|
5
5
|
# in a kit
|
6
6
|
class JarKitItem
|
7
|
-
|
8
|
-
include
|
7
|
+
include Archivable
|
8
|
+
include Speccable
|
9
|
+
|
9
10
|
attr_reader :project
|
10
11
|
attr_reader :package_name
|
11
|
-
attr_reader :spec_dir
|
12
|
-
attr_reader :template_spec_name
|
13
12
|
attr_reader :conflicts
|
14
|
-
|
15
|
-
# implement to_archive
|
16
|
-
include Archiver
|
17
13
|
attr_reader :source_dir
|
18
14
|
attr_reader :source_paths
|
19
|
-
attr_reader :destination_dir
|
20
|
-
|
21
|
-
# template-specific attributes
|
22
15
|
attr_reader :provides_symbol
|
23
16
|
attr_reader :provides_version
|
24
17
|
attr_reader :install_dir
|
@@ -29,17 +22,22 @@ module Tetra
|
|
29
22
|
|
30
23
|
@project = project
|
31
24
|
@package_name = "kit-item-#{name.to_s.gsub(".", "-")}"
|
32
|
-
@spec_dir = "kit"
|
33
|
-
@template_spec_name = "kit_item.spec"
|
34
25
|
@conflicts = false
|
35
|
-
|
36
26
|
@source_dir = File.join("kit", "jars")
|
37
27
|
@source_paths = [path]
|
38
|
-
@destination_dir = @package_name
|
39
|
-
|
40
28
|
@provides_symbol = "tetra-jar(#{name})"
|
41
29
|
@provides_version = hash
|
42
30
|
@install_dir = "jars"
|
43
31
|
end
|
32
|
+
|
33
|
+
def to_archive
|
34
|
+
_to_archive(@project, @package_name, @source_dir,
|
35
|
+
@source_paths, @project.kit_packages_dir)
|
36
|
+
end
|
37
|
+
|
38
|
+
def to_spec
|
39
|
+
_to_spec(@project, @package_name, "kit_item.spec",
|
40
|
+
@project.kit_packages_dir)
|
41
|
+
end
|
44
42
|
end
|
45
43
|
end
|
File without changes
|
@@ -4,21 +4,14 @@ module Tetra
|
|
4
4
|
# represents a prebuilt package dependency from a Maven local repo
|
5
5
|
# in a kit
|
6
6
|
class MavenKitItem
|
7
|
-
|
8
|
-
include
|
7
|
+
include Archivable
|
8
|
+
include Speccable
|
9
|
+
|
9
10
|
attr_reader :project
|
10
11
|
attr_reader :package_name
|
11
|
-
attr_reader :spec_dir
|
12
|
-
attr_reader :template_spec_name
|
13
12
|
attr_reader :conflicts
|
14
|
-
|
15
|
-
# implement to_archive
|
16
|
-
include Archiver
|
17
13
|
attr_reader :source_dir
|
18
14
|
attr_reader :source_paths
|
19
|
-
attr_reader :destination_dir
|
20
|
-
|
21
|
-
# template-specific attributes
|
22
15
|
attr_reader :provides_symbol
|
23
16
|
attr_reader :provides_version
|
24
17
|
attr_reader :install_dir
|
@@ -31,8 +24,6 @@ module Tetra
|
|
31
24
|
|
32
25
|
@project = project
|
33
26
|
@package_name = "kit-item-#{group_id.gsub(".", "-")}-#{artifact_id}-#{version}"
|
34
|
-
@spec_dir = "kit"
|
35
|
-
@template_spec_name = "kit_item.spec"
|
36
27
|
@conflicts = false
|
37
28
|
|
38
29
|
@provides_symbol = "tetra-mvn(#{group_id}:#{artifact_id})"
|
@@ -41,7 +32,16 @@ module Tetra
|
|
41
32
|
|
42
33
|
@source_dir = File.join("kit", "m2")
|
43
34
|
@source_paths = source_paths
|
44
|
-
|
35
|
+
end
|
36
|
+
|
37
|
+
def to_archive
|
38
|
+
_to_archive(@project, @package_name, @source_dir,
|
39
|
+
@source_paths, @project.kit_packages_dir)
|
40
|
+
end
|
41
|
+
|
42
|
+
def to_spec
|
43
|
+
_to_spec(@project, @package_name, "kit_item.spec",
|
44
|
+
@project.kit_packages_dir)
|
45
45
|
end
|
46
46
|
|
47
47
|
private
|
@@ -0,0 +1,48 @@
|
|
1
|
+
# encoding: UTF-8
|
2
|
+
|
3
|
+
module Tetra
|
4
|
+
# generates a package build script from bash_history
|
5
|
+
module Scriptable
|
6
|
+
def _to_script(project, history_path)
|
7
|
+
ant_runner = Tetra::AntRunner.new(project)
|
8
|
+
maven_runner = Tetra::MavenRunner.new(project)
|
9
|
+
|
10
|
+
project.from_directory do
|
11
|
+
history_lines = File.readlines(history_path).map { |e| e.strip }
|
12
|
+
relevant_lines =
|
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? }
|
19
|
+
|
20
|
+
script_lines = [
|
21
|
+
"#!/bin/bash",
|
22
|
+
"set -xe",
|
23
|
+
"PROJECT_PREFIX=`readlink -e .`",
|
24
|
+
"cd #{project.latest_dry_run_directory}"
|
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
|
35
|
+
|
36
|
+
new_content = script_lines.join("\n") + "\n"
|
37
|
+
|
38
|
+
result_dir = File.join(project.packages_dir, project.name)
|
39
|
+
FileUtils.mkdir_p(result_dir)
|
40
|
+
result_path = File.join(result_dir, "build.sh")
|
41
|
+
conflict_count = project.merge_new_content(new_content, result_path, "Build script generated",
|
42
|
+
"generate_build_script")
|
43
|
+
|
44
|
+
[result_path, conflict_count]
|
45
|
+
end
|
46
|
+
end
|
47
|
+
end
|
48
|
+
end
|
@@ -1,40 +1,31 @@
|
|
1
1
|
# encoding: UTF-8
|
2
2
|
|
3
3
|
module Tetra
|
4
|
-
#
|
5
|
-
module
|
6
|
-
# expected attributes:
|
7
|
-
# project (Tetra::Project)
|
8
|
-
# package_name (string)
|
9
|
-
# spec_dir (string)
|
10
|
-
# template_spec_name (string)
|
11
|
-
|
4
|
+
# adds methods to generate a spec file from a package object
|
5
|
+
module Speccable
|
12
6
|
# saves a specfile for this object in correct directories
|
13
7
|
# returns the spec path and the conflict count with the previously generated
|
14
8
|
# version, if any
|
15
|
-
|
9
|
+
# destination_dir/name/name.spec
|
10
|
+
def _to_spec(project, name, template_spec_name, destination_dir)
|
16
11
|
project.from_directory do
|
17
|
-
spec_name = "#{
|
12
|
+
spec_name = "#{name}.spec"
|
13
|
+
spec_dir = File.join(destination_dir, name)
|
14
|
+
FileUtils.mkdir_p(spec_dir)
|
15
|
+
|
18
16
|
spec_path = File.join(spec_dir, spec_name)
|
19
17
|
|
20
18
|
new_content = generate(template_spec_name, binding)
|
21
|
-
label = "Spec for #{
|
19
|
+
label = "Spec for #{name} generated"
|
22
20
|
conflict_count = project.merge_new_content(new_content, spec_path,
|
23
|
-
label, "generate_#{
|
24
|
-
|
25
|
-
output_dir = File.join("output", package_name)
|
26
|
-
FileUtils.mkdir_p(output_dir)
|
27
|
-
|
28
|
-
spec_link_path = File.join(output_dir, spec_name)
|
29
|
-
FileUtils.symlink(File.expand_path(spec_path), spec_link_path, force: true)
|
30
|
-
|
31
|
-
[spec_link_path, conflict_count]
|
21
|
+
label, "generate_#{name}_spec")
|
22
|
+
[spec_path, conflict_count]
|
32
23
|
end
|
33
24
|
end
|
34
25
|
|
35
26
|
# returns the spec template path, exposed for testing
|
36
27
|
def template_path
|
37
|
-
File.join(File.dirname(__FILE__), "..", "template")
|
28
|
+
File.join(File.dirname(__FILE__), "..", "..", "template")
|
38
29
|
end
|
39
30
|
|
40
31
|
private
|
@@ -43,7 +34,6 @@ module Tetra
|
|
43
34
|
# if destination_path is given, write it to that file, otherwise just
|
44
35
|
# return it
|
45
36
|
def generate(template_name, object_binding, destination_path = nil)
|
46
|
-
template_path = File.join(File.dirname(__FILE__), "..", "template")
|
47
37
|
erb = ERB.new File.read(File.join(template_path, template_name)), nil, "<>"
|
48
38
|
new_content = erb.result(object_binding)
|
49
39
|
|
data/lib/tetra/project.rb
CHANGED
@@ -21,6 +21,14 @@ module Tetra
|
|
21
21
|
latest_tag_count(:dry_run_finished)
|
22
22
|
end
|
23
23
|
|
24
|
+
def packages_dir
|
25
|
+
"packages"
|
26
|
+
end
|
27
|
+
|
28
|
+
def kit_packages_dir
|
29
|
+
File.join(packages_dir, "kit")
|
30
|
+
end
|
31
|
+
|
24
32
|
# finds the project directory up in the tree, like git does
|
25
33
|
def self.find_project_dir(starting_dir)
|
26
34
|
result = starting_dir
|
@@ -54,8 +62,8 @@ module Tetra
|
|
54
62
|
template_path = File.join(File.dirname(__FILE__), "..", "template")
|
55
63
|
|
56
64
|
templates = {
|
57
|
-
"output" => ".",
|
58
65
|
"kit" => ".",
|
66
|
+
"packages" => ".",
|
59
67
|
"src" => ".",
|
60
68
|
"gitignore" => ".gitignore"
|
61
69
|
}
|
@@ -107,6 +115,16 @@ module Tetra
|
|
107
115
|
|
108
116
|
# takes a revertable snapshot of this project
|
109
117
|
def take_snapshot(message, tag_prefix, tag_message = nil)
|
118
|
+
# rename all .gitignore files by default as
|
119
|
+
# they prevent snapshotting
|
120
|
+
from_directory("src") do
|
121
|
+
Find.find(".") do |file|
|
122
|
+
next unless file =~ /\.gitignore$/
|
123
|
+
|
124
|
+
FileUtils.mv(file, "#{file}_disabled_by_tetra")
|
125
|
+
end
|
126
|
+
end
|
127
|
+
|
110
128
|
@git.commit_whole_directory(message, next_tag(tag_prefix), tag_message)
|
111
129
|
end
|
112
130
|
|
@@ -219,13 +237,4 @@ module Tetra
|
|
219
237
|
@directory = directory
|
220
238
|
end
|
221
239
|
end
|
222
|
-
|
223
|
-
# current directory is not a tetra package directory
|
224
|
-
class NoPackageDirectoryError < StandardError
|
225
|
-
attr_reader :directory
|
226
|
-
|
227
|
-
def initialize(directory)
|
228
|
-
@directory = directory
|
229
|
-
end
|
230
|
-
end
|
231
240
|
end
|
data/lib/tetra/version.rb
CHANGED
@@ -0,0 +1,36 @@
|
|
1
|
+
# encoding: UTF-8
|
2
|
+
|
3
|
+
require "spec_helper"
|
4
|
+
|
5
|
+
describe Tetra::Archivable do
|
6
|
+
include Tetra::Mockers
|
7
|
+
|
8
|
+
# mock
|
9
|
+
class TestArchivableClass
|
10
|
+
include Tetra::Archivable
|
11
|
+
end
|
12
|
+
|
13
|
+
before(:each) do
|
14
|
+
create_mock_project
|
15
|
+
end
|
16
|
+
|
17
|
+
let(:instance) { TestArchivableClass.new }
|
18
|
+
|
19
|
+
after(:each) do
|
20
|
+
delete_mock_project
|
21
|
+
end
|
22
|
+
|
23
|
+
describe "#to_archive" do
|
24
|
+
it "generates an archive" do
|
25
|
+
@project.from_directory("kit") do
|
26
|
+
FileUtils.touch("kit_test")
|
27
|
+
end
|
28
|
+
|
29
|
+
instance._to_archive(@project, "test-package", "kit", ["*"], @project.packages_dir)
|
30
|
+
|
31
|
+
@project.from_directory do
|
32
|
+
expect(`tar -Jtf packages/test-package/test-package.tar.xz`.split).to include("kit_test")
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
@@ -2,7 +2,7 @@
|
|
2
2
|
|
3
3
|
require "spec_helper"
|
4
4
|
|
5
|
-
describe Tetra::
|
5
|
+
describe Tetra::BuiltPackage do
|
6
6
|
include Tetra::Mockers
|
7
7
|
|
8
8
|
before(:each) do
|
@@ -33,7 +33,7 @@ describe Tetra::Package do
|
|
33
33
|
|
34
34
|
FileUtils.copy(File.join("spec", "data", "nailgun", "pom.xml"), @project_path)
|
35
35
|
|
36
|
-
@package = Tetra::
|
36
|
+
@package = Tetra::BuiltPackage.new(@project, File.join(@project_path, "pom.xml"), "*.jar")
|
37
37
|
end
|
38
38
|
|
39
39
|
after(:each) do
|
@@ -45,7 +45,7 @@ describe Tetra::Package do
|
|
45
45
|
@package.to_spec
|
46
46
|
|
47
47
|
@project.from_directory do
|
48
|
-
spec_lines = File.readlines(File.join("
|
48
|
+
spec_lines = File.readlines(File.join("packages", "test-project", "test-project.spec"))
|
49
49
|
expect(spec_lines).to include("Name: test-project\n")
|
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")
|
@@ -68,7 +68,7 @@ da39a3ee5e6b4b0d3255bfef95601890afd80709\n")
|
|
68
68
|
|
69
69
|
@package.to_archive
|
70
70
|
@project.from_directory do
|
71
|
-
expect(`tar -Jtf
|
71
|
+
expect(`tar -Jtf packages/test-project/test-project.tar.xz`.split).to include("src_test")
|
72
72
|
end
|
73
73
|
end
|
74
74
|
end
|
data/spec/lib/git_spec.rb
CHANGED
@@ -30,17 +30,11 @@ describe Tetra::Git do
|
|
30
30
|
file.write "test"
|
31
31
|
end
|
32
32
|
|
33
|
-
# check that gitignore files are moved correctly
|
34
|
-
File.open(".gitignore", "w") do |file|
|
35
|
-
file.write "file1o"
|
36
|
-
end
|
37
|
-
|
38
33
|
@git.commit_whole_directory("test", :test)
|
39
34
|
|
40
35
|
files = `git ls-tree --name-only -r HEAD`.split("\n")
|
41
36
|
|
42
37
|
expect(files).to include("file1")
|
43
|
-
expect(files).to include(".gitignore_disabled_by_tetra")
|
44
38
|
end
|
45
39
|
end
|
46
40
|
end
|
@@ -21,7 +21,7 @@ describe Tetra::GlueKitItem do
|
|
21
21
|
|
22
22
|
@project.from_directory do
|
23
23
|
package_name = instance.package_name
|
24
|
-
spec_lines = File.readlines(File.join("
|
24
|
+
spec_lines = File.readlines(File.join("packages", "kit", package_name, "#{package_name}.spec"))
|
25
25
|
|
26
26
|
expect(spec_lines).to include("Conflicts: otherproviders(tetra-glue)\n")
|
27
27
|
expect(spec_lines).to include("Provides: tetra-glue == test-project-0\n")
|
@@ -39,7 +39,7 @@ describe Tetra::MavenKitItem do
|
|
39
39
|
expect(maven_kit_item.to_spec).to be_truthy
|
40
40
|
|
41
41
|
@project.from_directory do
|
42
|
-
spec_lines = File.readlines(File.join("
|
42
|
+
spec_lines = File.readlines(File.join("packages", "kit", package_name, "#{package_name}.spec"))
|
43
43
|
|
44
44
|
expect(spec_lines).to include("# spec file for a build-time dependency of project \"test-project\"\n")
|
45
45
|
expect(spec_lines).to include("Name: kit-item-com-company-project-artifact-1.0\n")
|
@@ -65,7 +65,7 @@ describe Tetra::MavenKitItem do
|
|
65
65
|
expect(maven_kit_item.to_archive).to end_with(expected_filename)
|
66
66
|
|
67
67
|
@project.from_directory do
|
68
|
-
contents = `tar -Jtf
|
68
|
+
contents = `tar -Jtf packages/kit/#{package_name}/#{package_name}.tar.xz`.split
|
69
69
|
expect(contents).to include("com/company/project/artifact/1.0/artifact-1.0.pom")
|
70
70
|
expect(contents).to include("com/company/project/artifact/1.0/artifact.jar")
|
71
71
|
end
|
data/spec/lib/project_spec.rb
CHANGED
@@ -68,8 +68,16 @@ describe Tetra::Project do
|
|
68
68
|
@project.from_directory do
|
69
69
|
FileUtils.touch(File.join("kit", "test"))
|
70
70
|
|
71
|
+
# check that gitignore files are moved correctly
|
72
|
+
File.open(File.join("src", ".gitignore"), "w") do |file|
|
73
|
+
file.write "file"
|
74
|
+
end
|
75
|
+
|
71
76
|
@project.take_snapshot("test", :revertable)
|
72
77
|
|
78
|
+
files = `git ls-tree --name-only -r HEAD`.split("\n")
|
79
|
+
expect(files).to include("src/.gitignore_disabled_by_tetra")
|
80
|
+
|
73
81
|
expect(`git rev-list --all`.split("\n").length).to eq 2
|
74
82
|
expect(@project.latest_tag(:revertable)).to eq "revertable_1"
|
75
83
|
end
|
@@ -2,13 +2,11 @@
|
|
2
2
|
|
3
3
|
require "spec_helper"
|
4
4
|
|
5
|
-
describe Tetra::
|
6
|
-
|
7
|
-
@project_path = File.join("spec", "data", "test-project")
|
8
|
-
Dir.mkdir(@project_path)
|
5
|
+
describe Tetra::Scriptable do
|
6
|
+
include Tetra::Mockers
|
9
7
|
|
10
|
-
|
11
|
-
|
8
|
+
before(:each) do
|
9
|
+
create_mock_project
|
12
10
|
|
13
11
|
@project.from_directory do
|
14
12
|
File.open("history", "w") do |io|
|
@@ -22,23 +20,22 @@ describe Tetra::ScriptGenerator do
|
|
22
20
|
|
23
21
|
FileUtils.mkdir_p(File.join("src", "test-package"))
|
24
22
|
@project.dry_run
|
25
|
-
|
26
|
-
@generator = Tetra::ScriptGenerator.new(@project, "history")
|
27
23
|
end
|
28
24
|
|
29
25
|
mock_maven_executable
|
30
26
|
end
|
31
27
|
|
32
28
|
after(:each) do
|
33
|
-
|
29
|
+
delete_mock_project
|
34
30
|
end
|
35
31
|
|
36
32
|
describe "#generate_build_script" do
|
37
33
|
it "generates a build script from the history" do
|
38
34
|
@project.from_directory do
|
39
|
-
@
|
35
|
+
@package = Tetra::BuiltPackage.new(@project)
|
36
|
+
@package.to_script("history")
|
40
37
|
|
41
|
-
lines = File.readlines(File.join("
|
38
|
+
lines = File.readlines(File.join("packages", "test-project", "build.sh"))
|
42
39
|
|
43
40
|
expect(lines).to include("#!/bin/bash\n")
|
44
41
|
expect(lines).to include("cd somewhere significant\n")
|