gjp 0.36.0 → 0.37.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (60) hide show
  1. data/.gitignore +4 -0
  2. data/.rubocop.yml +7 -0
  3. data/.rubocop_todo.yml +241 -0
  4. data/SPECIAL_CASES.md +2 -5
  5. data/integration-tests/commons.sh +2 -0
  6. data/lib/gjp.rb +22 -1
  7. data/lib/gjp/ant_runner.rb +1 -1
  8. data/lib/gjp/archiver.rb +11 -11
  9. data/lib/gjp/commands/ant.rb +21 -0
  10. data/lib/gjp/commands/base.rb +94 -0
  11. data/lib/gjp/commands/download-maven-source-jars.rb +28 -0
  12. data/lib/gjp/commands/dry-run.rb +16 -0
  13. data/lib/gjp/commands/finish.rb +22 -0
  14. data/lib/gjp/commands/generate-all.rb +38 -0
  15. data/lib/gjp/commands/generate-kit-archive.rb +18 -0
  16. data/lib/gjp/commands/generate-kit-spec.rb +16 -0
  17. data/lib/gjp/commands/generate-package-archive.rb +19 -0
  18. data/lib/gjp/commands/generate-package-script.rb +21 -0
  19. data/lib/gjp/commands/generate-package-spec.rb +22 -0
  20. data/lib/gjp/commands/get-pom.rb +31 -0
  21. data/lib/gjp/commands/get-source.rb +35 -0
  22. data/lib/gjp/commands/init.rb +15 -0
  23. data/lib/gjp/commands/list-kit-missing-sources.rb +21 -0
  24. data/lib/gjp/commands/move-jars-to-kit.rb +18 -0
  25. data/lib/gjp/commands/mvn.rb +22 -0
  26. data/lib/gjp/git.rb +18 -8
  27. data/lib/gjp/kit_checker.rb +6 -6
  28. data/lib/gjp/kit_runner.rb +2 -2
  29. data/lib/gjp/kit_spec_adapter.rb +1 -1
  30. data/lib/gjp/main.rb +103 -0
  31. data/lib/gjp/maven_runner.rb +1 -1
  32. data/lib/gjp/maven_website.rb +8 -6
  33. data/lib/gjp/package_spec_adapter.rb +1 -1
  34. data/lib/gjp/pom.rb +3 -1
  35. data/lib/gjp/pom_getter.rb +12 -4
  36. data/lib/gjp/project.rb +4 -2
  37. data/lib/gjp/script_generator.rb +2 -1
  38. data/lib/gjp/spec_generator.rb +2 -2
  39. data/lib/gjp/version.rb +1 -1
  40. data/lib/gjp/version_matcher.rb +3 -3
  41. data/lib/template/kit.spec +1 -0
  42. data/lib/template/package.spec +1 -0
  43. data/spec/lib/ant_runner_spec.rb +3 -3
  44. data/spec/lib/archiver_spec.rb +1 -1
  45. data/spec/lib/git_spec.rb +25 -3
  46. data/spec/lib/kit_checker_spec.rb +6 -6
  47. data/spec/lib/kit_runner_spec.rb +1 -1
  48. data/spec/lib/maven_runner_spec.rb +6 -5
  49. data/spec/lib/maven_website_spec.rb +2 -2
  50. data/spec/lib/pom_getter_spec.rb +1 -1
  51. data/spec/lib/pom_spec.rb +5 -3
  52. data/spec/lib/project_spec.rb +15 -14
  53. data/spec/lib/script_generator_spec.rb +4 -2
  54. data/spec/lib/source_getter_spec.rb +1 -1
  55. data/spec/lib/spec_generator_spec.rb +2 -2
  56. data/spec/lib/template_manager_spec.rb +6 -6
  57. data/spec/lib/version_matcher_spec.rb +1 -1
  58. data/spec/spec_helper.rb +25 -23
  59. metadata +22 -3
  60. data/lib/gjp/cli.rb +0 -384
@@ -0,0 +1,28 @@
1
+ # encoding: UTF-8
2
+
3
+ module Gjp
4
+ class DownloadMavenSourceJarsCommand < Gjp::BaseCommand
5
+ def execute
6
+ checking_exceptions do
7
+ project = Gjp::Project.new(".")
8
+ source_getter = Gjp::SourceGetter.new
9
+
10
+ ensure_dry_running(false, project) do
11
+ puts "Getting sources from Maven..."
12
+ succeeded, failed = source_getter.get_maven_source_jars(project)
13
+
14
+ puts "\n**SUMMARY**\n"
15
+ puts "Sources found for:"
16
+ succeeded.each do |path|
17
+ puts " #{format_path(path, project)}"
18
+ end
19
+
20
+ puts "\nSources not found for:"
21
+ failed.each do |path|
22
+ puts " #{format_path(path, project)}"
23
+ end
24
+ end
25
+ end
26
+ end
27
+ end
28
+ end
@@ -0,0 +1,16 @@
1
+ # encoding: UTF-8
2
+
3
+ module Gjp
4
+ class DryRunCommand < Gjp::BaseCommand
5
+ def execute
6
+ checking_exceptions do
7
+ if Gjp::Project.new(".").dry_run
8
+ puts "Now dry-running, please start your build."
9
+ puts "To run a Maven installation from the kit, use \"gjp mvn\"."
10
+ puts "If the build succeedes end this dry run with \"gjp finish\"."
11
+ puts "If the build does not succeed use \"gjp finish --abort\" to restore files."
12
+ end
13
+ end
14
+ end
15
+ end
16
+ end
@@ -0,0 +1,22 @@
1
+ # encoding: UTF-8
2
+
3
+ module Gjp
4
+ class FinishCommand < Gjp::BaseCommand
5
+
6
+ option ["-a", "--abort"], :flag, "build abort, restore files as before dry-run"
7
+
8
+ def execute
9
+ checking_exceptions do
10
+ if Gjp::Project.new(".").finish(abort?)
11
+ if abort?
12
+ puts "Project reverted as before dry-run."
13
+ else
14
+ puts "Dry-run finished."
15
+ end
16
+ else
17
+ puts "No dry-run is in progress."
18
+ end
19
+ end
20
+ end
21
+ end
22
+ end
@@ -0,0 +1,38 @@
1
+ # encoding: UTF-8
2
+
3
+ module Gjp
4
+ class GenerateAllCommand < Gjp::BaseCommand
5
+
6
+ option ["-f", "--filter"], "FILTER", "filter files to be installed by this package spec", :default => "*.jar"
7
+ option ["-f", "--full"], :flag, "create a full archive (not incremental)"
8
+ parameter "[DIRECTORY]", "path to a package directory (src/<package name>)", :default => "."
9
+ parameter "[POM]", "a package pom file path", :default => "pom.xml"
10
+
11
+ def execute
12
+ checking_exceptions do
13
+ project = Gjp::Project.new(".")
14
+ ensure_dry_running(false, project) do
15
+ package_name = project.get_package_name(directory)
16
+
17
+ result_path = Gjp::Archiver.new(project).archive_kit(full?)
18
+ print_generation_result(project, result_path)
19
+
20
+ result_path, conflict_count = Gjp::SpecGenerator.new(project).generate_kit_spec
21
+ print_generation_result(project, result_path, conflict_count)
22
+
23
+ history_file = File.join(Dir.home, ".bash_history")
24
+ result_path, conflict_count = Gjp::ScriptGenerator.new(project, history_file)
25
+ .generate_build_script(package_name)
26
+ print_generation_result(project, result_path, conflict_count)
27
+
28
+ result_path = Gjp::Archiver.new(project).archive_package package_name
29
+ print_generation_result(project, result_path)
30
+
31
+ result_path, conflict_count = Gjp::SpecGenerator.new(project)
32
+ .generate_package_spec package_name, pom, filter
33
+ print_generation_result(project, result_path, conflict_count)
34
+ end
35
+ end
36
+ end
37
+ end
38
+ end
@@ -0,0 +1,18 @@
1
+ # encoding: UTF-8
2
+
3
+ module Gjp
4
+ class GenerateKitArchiveCommand < Gjp::BaseCommand
5
+
6
+ option ["-f", "--full"], :flag, "create a full archive (not incremental)"
7
+
8
+ def execute
9
+ checking_exceptions do
10
+ project = Gjp::Project.new(".")
11
+ ensure_dry_running(false, project) do
12
+ result_path = Gjp::Archiver.new(project).archive_kit(full?)
13
+ print_generation_result(project, result_path)
14
+ end
15
+ end
16
+ end
17
+ end
18
+ end
@@ -0,0 +1,16 @@
1
+ # encoding: UTF-8
2
+
3
+ module Gjp
4
+ class GenerateKitSpecCommand < Gjp::BaseCommand
5
+
6
+ def execute
7
+ checking_exceptions do
8
+ project = Gjp::Project.new(".")
9
+ ensure_dry_running(false, project) do
10
+ result_path, conflict_count = Gjp::SpecGenerator.new(project).generate_kit_spec
11
+ print_generation_result(project, result_path, conflict_count)
12
+ end
13
+ end
14
+ end
15
+ end
16
+ end
@@ -0,0 +1,19 @@
1
+ # encoding: UTF-8
2
+
3
+ module Gjp
4
+ class GeneratePackageArchiveCommand < Gjp::BaseCommand
5
+
6
+ parameter "[DIRECTORY]", "path to a package directory (src/<package name>)", :default => "."
7
+
8
+ def execute
9
+ checking_exceptions do
10
+ project = Gjp::Project.new(".")
11
+ ensure_dry_running(false, project) do
12
+ package_name = project.get_package_name(directory)
13
+ result_path = Gjp::Archiver.new(project).archive_package package_name
14
+ print_generation_result(project, result_path)
15
+ end
16
+ end
17
+ end
18
+ end
19
+ end
@@ -0,0 +1,21 @@
1
+ # encoding: UTF-8
2
+
3
+ module Gjp
4
+ class GeneratePackageScriptCommand < Gjp::BaseCommand
5
+
6
+ parameter "[DIRECTORY]", "path to a package directory (src/<package name>)", :default => "."
7
+
8
+ def execute
9
+ checking_exceptions do
10
+ project = Gjp::Project.new(".")
11
+ ensure_dry_running(false, project) do
12
+ package_name = project.get_package_name(directory)
13
+ history_file = File.join(Dir.home, ".bash_history")
14
+ result_path, conflict_count = Gjp::ScriptGenerator.new(project, history_file)
15
+ .generate_build_script(package_name)
16
+ print_generation_result(project, result_path, conflict_count)
17
+ end
18
+ end
19
+ end
20
+ end
21
+ end
@@ -0,0 +1,22 @@
1
+ # encoding: UTF-8
2
+
3
+ module Gjp
4
+ class GeneratePackageSpecCommand < Gjp::BaseCommand
5
+
6
+ option ["-f", "--filter"], "FILTER", "filter files to be installed by this spec", :default => "*.jar"
7
+ parameter "[DIRECTORY]", "path to a package directory (src/<package name>)", :default => "."
8
+ parameter "[POM]", "a pom file path", :default => "pom.xml"
9
+
10
+ def execute
11
+ checking_exceptions do
12
+ project = Gjp::Project.new(".")
13
+ ensure_dry_running(false, project) do
14
+ package_name = project.get_package_name(directory)
15
+ result_path, conflict_count = Gjp::SpecGenerator.new(project)
16
+ .generate_package_spec(package_name, pom, filter)
17
+ print_generation_result(project, result_path, conflict_count)
18
+ end
19
+ end
20
+ end
21
+ end
22
+ end
@@ -0,0 +1,31 @@
1
+ # encoding: UTF-8
2
+
3
+ module Gjp
4
+ class GetPomCommand < Gjp::BaseCommand
5
+
6
+ parameter "NAME", "a jar file name or a `name-version` string (heuristic)"
7
+
8
+ def execute
9
+ checking_exceptions do
10
+ project = Gjp::Project.new(".")
11
+ pom_getter = Gjp::PomGetter.new
12
+
13
+ path, status = pom_getter.get_pom(name)
14
+ if path
15
+ text_status = if status == :found_in_jar
16
+ "was inside the jar"
17
+ elsif status == :found_via_sha1
18
+ "found by sha1 search from search.maven.org"
19
+ elsif status == :found_via_heuristic
20
+ "found by heuristic search from search.maven.org"
21
+ end
22
+
23
+ puts "#{format_path(path, project)} written, #{text_status}"
24
+ else
25
+ puts "#{name}'s pom not found. Try:"
26
+ puts "http://google.com/#q=#{URI::encode(pom_getter.cleanup_name(name) + " pom")}"
27
+ end
28
+ end
29
+ end
30
+ end
31
+ end
@@ -0,0 +1,35 @@
1
+ # encoding: UTF-8
2
+
3
+ module Gjp
4
+ class GetSourceCommand < Gjp::BaseCommand
5
+
6
+ parameter "POM", "a pom file path or URI"
7
+
8
+ def execute
9
+ checking_exceptions do
10
+ project = Gjp::Project.new(".")
11
+ source_getter = Gjp::SourceGetter.new
12
+
13
+ puts "Attempting to find source through Maven..."
14
+ if source_getter.get_maven_source_jar(project, pom)
15
+ puts "Source jar found and added to Maven repository."
16
+ else
17
+ effective_pom_path = Gjp::MavenRunner.new(project).get_effective_pom(pom)
18
+ puts "Source jar not found in Maven. Try looking here:"
19
+ pom = Gjp::Pom.new(effective_pom_path)
20
+ if pom.url && !pom.url.empty?
21
+ puts "Website: #{pom.url}"
22
+ end
23
+ if pom.scm_connection && !pom.scm_connection.empty?
24
+ puts "SCM connection: #{pom.scm_connection}"
25
+ end
26
+ if pom.scm_url && !pom.scm_url.empty?
27
+ puts "SCM connection: #{pom.scm_url}"
28
+ end
29
+ puts "The effective POM: #{effective_pom_path}"
30
+ puts "Google: http://google.com/#q=#{URI::encode(pom.name + " sources")}"
31
+ end
32
+ end
33
+ end
34
+ end
35
+ end
@@ -0,0 +1,15 @@
1
+ # encoding: UTF-8
2
+
3
+ module Gjp
4
+ class InitCommand < Gjp::BaseCommand
5
+
6
+ def execute
7
+ checking_exceptions do
8
+ Gjp::Project.init(".")
9
+ puts "Project inited."
10
+ puts "Add sources to src/<package name>, binary dependencies to kit/."
11
+ puts "When you are ready to test a build, use \"gjp dry-run\"."
12
+ end
13
+ end
14
+ end
15
+ end
@@ -0,0 +1,21 @@
1
+ # encoding: UTF-8
2
+
3
+ module Gjp
4
+ class ListKitMissingSourcesCommand < Gjp::BaseCommand
5
+
6
+ def execute
7
+ checking_exceptions do
8
+ project = Gjp::Project.new(".")
9
+ kit_checker = Gjp::KitChecker.new(project)
10
+
11
+ ensure_dry_running(false, project) do
12
+ puts "Some source files were not found in these archives:"
13
+ kit_checker.unsourced_archives.each do |archive|
14
+ percentage = "%.2f" % (100.0 * archive[:unsourced_class_names].length()/archive[:class_names].length())
15
+ puts "#{format_path(archive[:archive], project)} (~#{percentage}% missing)"
16
+ end
17
+ end
18
+ end
19
+ end
20
+ end
21
+ end
@@ -0,0 +1,18 @@
1
+ # encoding: UTF-8
2
+
3
+ module Gjp
4
+ class MoveJarsToKitCommand < Gjp::BaseCommand
5
+
6
+ def execute
7
+ checking_exceptions do
8
+ project = Gjp::Project.new(".")
9
+
10
+ ensure_dry_running(false, project) do
11
+ project.purge_jars.each do |original, final|
12
+ puts "Replaced #{original} with symlink pointing to to #{final}"
13
+ end
14
+ end
15
+ end
16
+ end
17
+ end
18
+ end
@@ -0,0 +1,22 @@
1
+ # encoding: UTF-8
2
+
3
+ module Gjp
4
+ class MavenCommand < Gjp::BaseCommand
5
+
6
+ parameter "[MAVEN OPTIONS] ...", "mvn options", :attribute_name => "dummy"
7
+
8
+ # override parsing in order to pipe everything to mvn
9
+ def parse(args)
10
+ @options = args
11
+ end
12
+
13
+ def execute
14
+ checking_exceptions do
15
+ project = Gjp::Project.new(".")
16
+ ensure_dry_running(true, project) do
17
+ Gjp::MavenRunner.new(project).mvn(@options)
18
+ end
19
+ end
20
+ end
21
+ end
22
+ end
@@ -39,7 +39,8 @@ module Gjp
39
39
  else
40
40
  "HEAD"
41
41
  end
42
- `git diff-tree --no-commit-id --name-only -r #{prefixed_start_tag} #{prefixed_end_tag} -- #{directory}`.split("\n")
42
+ `git diff-tree --no-commit-id --name-only -r #{prefixed_start_tag} #{prefixed_end_tag} -- #{directory}`
43
+ .split("\n")
43
44
  end
44
45
  end
45
46
 
@@ -50,6 +51,14 @@ module Gjp
50
51
  Dir.chdir(@directory) do
51
52
  log.debug "committing with message: #{message}"
52
53
 
54
+ # rename all .gitignore files by default as
55
+ # they prevent snapshotting
56
+ Find.find(".") do |file|
57
+ if file =~ /\.gitignore$/
58
+ FileUtils.mv(file, "#{file}_disabled_by_gjp")
59
+ end
60
+ end
61
+
53
62
  `git rm -r --cached --ignore-unmatch .`
54
63
  `git add .`
55
64
  `git commit -m "#{message}"`
@@ -68,12 +77,12 @@ module Gjp
68
77
  def get_tag_maximum_suffix(prefix)
69
78
  Dir.chdir(@directory) do
70
79
  `git tag`.split.map do |tag|
71
- if tag =~ /^gjp_#{prefix}_([0-9]+)$/
72
- $1.to_i
73
- else
74
- 0
75
- end
76
- end.max or 0
80
+ if tag =~ /^gjp_#{prefix}_([0-9]+)$/
81
+ $1.to_i
82
+ else
83
+ 0
84
+ end
85
+ end.max || 0
77
86
  end
78
87
  end
79
88
 
@@ -103,7 +112,8 @@ module Gjp
103
112
  log.debug "calling git show gjp_#{tag}:#{path} > #{path}.old_version, output follows"
104
113
  `git show gjp_#{tag}:#{path} > #{path}.old_version`
105
114
  log.debug "calling git merge-file #{path} #{path}.old_version #{new_path}, output follows"
106
- `git merge-file #{path} #{path}.old_version #{new_path} -L "newly generated" -L "previously generated" -L "user edited"`
115
+ `git merge-file #{path} #{path}.old_version #{new_path} \
116
+ -L "newly generated" -L "previously generated" -L "user edited"`
107
117
  conflict_count = $?.exitstatus
108
118
  File.delete "#{path}.old_version"
109
119
  return conflict_count
@@ -23,7 +23,7 @@ module Gjp
23
23
  end
24
24
 
25
25
  archived_file_paths = plain_file_paths.select do |path, archive|
26
- path. =~ /\.(zip)|([jwe]ar)$/
26
+ path. =~ (/\.(zip)|([jwe]ar)$/)
27
27
  end.map do |path, archive|
28
28
  result = []
29
29
  Zip::File.foreach(path) do |entry|
@@ -40,7 +40,7 @@ module Gjp
40
40
 
41
41
  # returns a list of class names for which
42
42
  # we have source files in kit/
43
- def get_source_class_names(paths)
43
+ def source_class_names(paths)
44
44
  source_paths = paths.select do |path, archive|
45
45
  path =~ /\.java$/
46
46
  end
@@ -63,7 +63,7 @@ module Gjp
63
63
 
64
64
  # returns a list of class names for which
65
65
  # we have binary files in kit/
66
- def get_compiled_classes(paths)
66
+ def compiled_classes(paths)
67
67
  result = {}
68
68
  compiled_paths = paths.select do |path, archive|
69
69
  path =~ /\.class$/
@@ -81,10 +81,10 @@ module Gjp
81
81
 
82
82
  # returns a hash that associates archive names and
83
83
  # the unsourced classes within them
84
- def get_unsourced
84
+ def unsourced_archives
85
85
  paths = kit_file_paths
86
- source_class_names = get_source_class_names(paths)
87
- archive_paths_to_class_names = get_compiled_classes(paths)
86
+ source_class_names = source_class_names(paths)
87
+ archive_paths_to_class_names = compiled_classes(paths)
88
88
 
89
89
  result = archive_paths_to_class_names.map do |archive, class_names|
90
90
  unsourced_class_names = class_names.select do |class_name|