gjp 0.37.0 → 0.38.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.
Files changed (56) hide show
  1. data/.rubocop.yml +3 -0
  2. data/.rubocop_todo.yml +0 -130
  3. data/Rakefile +2 -2
  4. data/gjp.gemspec +2 -2
  5. data/integration-tests/commons.sh +1 -1
  6. data/lib/gjp.rb +12 -12
  7. data/lib/gjp/ant_runner.rb +2 -2
  8. data/lib/gjp/archiver.rb +13 -11
  9. data/lib/gjp/commands/ant.rb +1 -1
  10. data/lib/gjp/commands/base.rb +25 -26
  11. data/lib/gjp/commands/{download-maven-source-jars.rb → download_maven_source_jars.rb} +0 -0
  12. data/lib/gjp/commands/{dry-run.rb → dry_run.rb} +0 -0
  13. data/lib/gjp/commands/finish.rb +0 -1
  14. data/lib/gjp/commands/{generate-all.rb → generate_all.rb} +3 -4
  15. data/lib/gjp/commands/{generate-kit-archive.rb → generate_kit_archive.rb} +0 -1
  16. data/lib/gjp/commands/{generate-kit-spec.rb → generate_kit_spec.rb} +0 -1
  17. data/lib/gjp/commands/{generate-package-archive.rb → generate_package_archive.rb} +1 -2
  18. data/lib/gjp/commands/{generate-package-script.rb → generate_package_script.rb} +1 -2
  19. data/lib/gjp/commands/{generate-package-spec.rb → generate_package_spec.rb} +3 -4
  20. data/lib/gjp/commands/{get-pom.rb → get_pom.rb} +10 -9
  21. data/lib/gjp/commands/{get-source.rb → get_source.rb} +4 -5
  22. data/lib/gjp/commands/init.rb +0 -1
  23. data/lib/gjp/commands/{list-kit-missing-sources.rb → list_kit_missing_sources.rb} +1 -2
  24. data/lib/gjp/commands/{move-jars-to-kit.rb → move_jars_to_kit.rb} +0 -1
  25. data/lib/gjp/commands/mvn.rb +1 -2
  26. data/lib/gjp/git.rb +16 -14
  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 -2
  30. data/lib/gjp/logger.rb +16 -13
  31. data/lib/gjp/main.rb +0 -1
  32. data/lib/gjp/maven_runner.rb +2 -2
  33. data/lib/gjp/maven_website.rb +14 -14
  34. data/lib/gjp/package_spec_adapter.rb +9 -8
  35. data/lib/gjp/pom.rb +13 -14
  36. data/lib/gjp/pom_getter.rb +18 -16
  37. data/lib/gjp/project.rb +21 -22
  38. data/lib/gjp/script_generator.rb +8 -8
  39. data/lib/gjp/source_getter.rb +3 -3
  40. data/lib/gjp/spec_generator.rb +3 -3
  41. data/lib/gjp/template_manager.rb +2 -2
  42. data/lib/gjp/version.rb +1 -1
  43. data/lib/gjp/version_matcher.rb +32 -35
  44. data/spec/lib/archiver_spec.rb +3 -3
  45. data/spec/lib/git_spec.rb +1 -1
  46. data/spec/lib/kit_checker_spec.rb +10 -10
  47. data/spec/lib/pom_getter_spec.rb +2 -3
  48. data/spec/lib/pom_spec.rb +2 -3
  49. data/spec/lib/project_spec.rb +10 -10
  50. data/spec/lib/script_generator_spec.rb +1 -2
  51. data/spec/lib/source_getter_spec.rb +0 -1
  52. data/spec/lib/spec_generator_spec.rb +0 -1
  53. data/spec/lib/template_manager_spec.rb +1 -1
  54. data/spec/lib/version_matcher_spec.rb +8 -9
  55. data/spec/spec_helper.rb +0 -3
  56. metadata +13 -13
@@ -1,4 +1,4 @@
1
- # encoding: UTF-8
1
+ # encoding: UTF-8
2
2
 
3
3
  module Gjp
4
4
  # encapsulates details of a package needed by the spec file
@@ -21,11 +21,13 @@ module Gjp
21
21
  def initialize(project, package_name, pom, filter)
22
22
  @name = package_name
23
23
  @version = pom.version
24
- @license = if pom.license_name != ""
25
- pom.license_name
26
- else
27
- "Apache-2.0"
28
- end
24
+ @license = (
25
+ if pom.license_name != ""
26
+ pom.license_name
27
+ else
28
+ "Apache-2.0"
29
+ end
30
+ )
29
31
  @summary = cleanup_description(pom.description, 60)
30
32
  @url = pom.url
31
33
  @project_name = project.name
@@ -49,10 +51,9 @@ module Gjp
49
51
  raw
50
52
  .gsub(/[\s]+/, " ")
51
53
  .strip
52
- .slice(0..max_length -1)
54
+ .slice(0..max_length - 1)
53
55
  .sub(/\s\w+$/, "")
54
56
  .sub(/\.+$/, "")
55
57
  end
56
58
  end
57
59
  end
58
-
data/lib/gjp/pom.rb CHANGED
@@ -1,4 +1,4 @@
1
- # encoding: UTF-8
1
+ # encoding: UTF-8
2
2
 
3
3
  require "nokogiri"
4
4
  require "open-uri"
@@ -10,33 +10,33 @@ module Gjp
10
10
  @doc = Nokogiri::XML(open(filename).read)
11
11
  @doc.remove_namespaces!
12
12
  end
13
-
13
+
14
14
  def group_id
15
- @doc.xpath("project/groupId").text
15
+ @doc.xpath("project/groupId").text || ""
16
16
  end
17
-
17
+
18
18
  def artifact_id
19
- @doc.xpath("project/artifactId").text
19
+ @doc.xpath("project/artifactId").text || ""
20
20
  end
21
-
21
+
22
22
  def name
23
- @doc.xpath("project/name").text
23
+ @doc.xpath("project/name").text || ""
24
24
  end
25
25
 
26
26
  def version
27
- @doc.xpath("project/version").text
27
+ @doc.xpath("project/version").text || ""
28
28
  end
29
29
 
30
30
  def description
31
- @doc.xpath("project/description").text
31
+ @doc.xpath("project/description").text || ""
32
32
  end
33
33
 
34
34
  def url
35
- @doc.xpath("project/url").text
35
+ @doc.xpath("project/url").text || ""
36
36
  end
37
37
 
38
38
  def license_name
39
- @doc.xpath("project/licenses/license/name").text
39
+ @doc.xpath("project/licenses/license/name").text || ""
40
40
  end
41
41
 
42
42
  def runtime_dependency_ids
@@ -48,12 +48,11 @@ module Gjp
48
48
  end
49
49
 
50
50
  def scm_connection
51
- @doc.xpath("project/scm/connection").text
51
+ @doc.xpath("project/scm/connection").text || ""
52
52
  end
53
53
 
54
54
  def scm_url
55
- @doc.xpath("project/scm/url").text
55
+ @doc.xpath("project/scm/url").text || ""
56
56
  end
57
57
  end
58
58
  end
59
-
@@ -11,7 +11,7 @@ require "gjp/version_matcher"
11
11
  module Gjp
12
12
  # attempts to get java projects' pom file
13
13
  class PomGetter
14
- include Logger
14
+ include Logging
15
15
 
16
16
  # saves a jar poms in <jar_filename>.pom
17
17
  # returns filename and status if found, else nil
@@ -39,9 +39,9 @@ module Gjp
39
39
  rescue TypeError
40
40
  log.warn("#{file} seems to be a valid jar archive but is corrupt, skipping")
41
41
  end
42
- return nil
42
+ nil
43
43
  end
44
-
44
+
45
45
  # returns a pom from search.maven.org with a jar sha1 search
46
46
  def get_pom_from_sha1(file)
47
47
  log.debug("Attempting SHA1 POM lookup for #{file}")
@@ -49,9 +49,9 @@ module Gjp
49
49
  if File.file?(file)
50
50
  site = MavenWebsite.new
51
51
  sha1 = Digest::SHA1.hexdigest File.read(file)
52
- results = site.search_by_sha1(sha1).select {|result| result["ec"].include?(".pom")}
53
- result = results.first
54
- if result != nil
52
+ results = site.search_by_sha1(sha1).select { |result| result["ec"].include?(".pom") }
53
+ result = results.first
54
+ unless result.nil?
55
55
  log.info("pom.xml for #{file} found on search.maven.org for sha1 #{sha1}\
56
56
  (#{result["g"]}:#{result["a"]}:#{result["v"]})"
57
57
  )
@@ -77,23 +77,25 @@ module Gjp
77
77
 
78
78
  result = site.search_by_name(my_artifact_id).first
79
79
  log.debug("Artifact id search result: #{result}")
80
- if result != nil
80
+ unless result.nil?
81
81
  group_id, artifact_id, version = site.get_maven_id_from result
82
82
  results = site.search_by_group_id_and_artifact_id(group_id, artifact_id)
83
83
  log.debug("All versions: #{results}")
84
- their_versions = results.map {|doc| doc["v"]}
85
- best_matched_version = if my_version != nil
86
- version_matcher.best_match(my_version, their_versions)
87
- else
88
- their_versions.max
89
- end
90
- best_matched_result = (results.select{|result| result["v"] == best_matched_version}).first
91
-
84
+ their_versions = results.map { |doc| doc["v"] }
85
+ best_matched_version = (
86
+ if !my_version.nil?
87
+ version_matcher.best_match(my_version, their_versions)
88
+ else
89
+ their_versions.max
90
+ end
91
+ )
92
+ best_matched_result = (results.select { |result| result["v"] == best_matched_version }).first
93
+
92
94
  group_id, artifact_id, version = site.get_maven_id_from(best_matched_result)
93
95
  log.warn("pom.xml for #{filename} found on search.maven.org with heuristic search\
94
96
  (#{group_id}:#{artifact_id}:#{version})"
95
97
  )
96
-
98
+
97
99
  return site.download_pom(group_id, artifact_id, version), :found_via_heuristic
98
100
  end
99
101
  rescue RestClient::ResourceNotFound
data/lib/gjp/project.rb CHANGED
@@ -5,12 +5,12 @@ require "find"
5
5
  module Gjp
6
6
  # encapsulates a Gjp project directory
7
7
  class Project
8
- include Logger
8
+ include Logging
9
9
 
10
10
  attr_accessor :full_path
11
11
  attr_accessor :git
12
12
 
13
- def initialize(path)
13
+ def initialize(path)
14
14
  @full_path = Gjp::Project.find_project_dir(File.expand_path(path))
15
15
  @git = Gjp::Git.new(@full_path)
16
16
  end
@@ -45,20 +45,17 @@ module Gjp
45
45
  # returns the package name corresponding to the specified dir, if any
46
46
  # raises NoPackageDirectoryError if dir is not a (sub)directory of a package
47
47
  def get_package_name(dir)
48
- begin
49
- dir_path = Pathname.new(File.expand_path(dir)).relative_path_from(Pathname.new(@full_path))
50
- components = dir_path.to_s.split(File::SEPARATOR)
51
-
52
- if components.count >= 2 &&
53
- components.first == "src" &&
54
- Dir.exist?(File.join(@full_path, components[0], components[1]))
55
- components[1]
56
- else
57
- raise NoPackageDirectoryError
58
- end
59
- rescue ArgumentError, NoProjectDirectoryError
60
- raise NoPackageDirectoryError.new(dir)
61
- end
48
+ dir_path = Pathname.new(File.expand_path(dir)).relative_path_from(Pathname.new(@full_path))
49
+ components = dir_path.to_s.split(File::SEPARATOR)
50
+ if components.count >= 2 &&
51
+ components.first == "src" &&
52
+ Dir.exist?(File.join(@full_path, components[0], components[1]))
53
+ components[1]
54
+ else
55
+ raise NoPackageDirectoryError
56
+ end
57
+ rescue ArgumentError, NoProjectDirectoryError
58
+ raise NoPackageDirectoryError.new(dir)
62
59
  end
63
60
 
64
61
  # inits a new project directory structure
@@ -123,11 +120,13 @@ module Gjp
123
120
 
124
121
  # takes a revertable snapshot of this project
125
122
  def take_snapshot(message, tag_prefix = nil, tag_message = nil)
126
- tag = if tag_prefix
127
- "#{tag_prefix}_#{latest_tag_count(tag_prefix) + 1}"
128
- else
129
- nil
130
- end
123
+ tag = (
124
+ if tag_prefix
125
+ "#{tag_prefix}_#{latest_tag_count(tag_prefix) + 1}"
126
+ else
127
+ nil
128
+ end
129
+ )
131
130
 
132
131
  @git.commit_whole_directory(message, tag, tag_message)
133
132
  end
@@ -208,7 +207,7 @@ module Gjp
208
207
  end
209
208
 
210
209
  # moves any .jar from src/ to kit/ and links it back
211
- def purge_jars
210
+ def purge_jars
212
211
  from_directory do
213
212
  result = []
214
213
  Find.find("src") do |file|
@@ -3,7 +3,7 @@
3
3
  module Gjp
4
4
  # generates build scripts from bash_history
5
5
  class ScriptGenerator
6
- include Logger
6
+ include Logging
7
7
 
8
8
  def initialize(project, history_path)
9
9
  @project = project
@@ -11,17 +11,17 @@ module Gjp
11
11
  @maven_runner = Gjp::MavenRunner.new(project)
12
12
  @history_path = history_path
13
13
  end
14
-
14
+
15
15
  def generate_build_script(name)
16
16
  @project.from_directory do
17
17
  history_lines = File.readlines(@history_path).map { |e| e.strip }
18
18
  relevant_lines =
19
19
  history_lines
20
20
  .reverse
21
- .take_while { |e| e.match(/gjp +dry-run/) == nil }
21
+ .take_while { |e| e.match(/gjp +dry-run/).nil? }
22
22
  .reverse
23
- .take_while { |e| e.match(/gjp +finish/) == nil }
24
- .select { |e| e.match(/^#/) == nil }
23
+ .take_while { |e| e.match(/gjp +finish/).nil? }
24
+ .select { |e| e.match(/^#/).nil? }
25
25
 
26
26
  script_lines = [
27
27
  "#!/bin/bash",
@@ -42,13 +42,13 @@ module Gjp
42
42
 
43
43
  script_name = "build.sh"
44
44
  result_path = File.join("src", name, script_name)
45
- conflict_count = @project.merge_new_content(new_content, result_path, "Build script generated",
45
+ conflict_count = @project.merge_new_content(new_content, result_path, "Build script generated",
46
46
  "generate_#{name}_build_script")
47
47
 
48
48
  destination_dir = File.join("output", name)
49
49
  FileUtils.mkdir_p(destination_dir)
50
- destination_script_path = File.join(destination_dir, script_name)
51
- FileUtils.symlink(File.expand_path(result_path), destination_script_path, :force => true)
50
+ destination_script_path = File.join(destination_dir, script_name)
51
+ FileUtils.symlink(File.expand_path(result_path), destination_script_path, force: true)
52
52
 
53
53
  [result_path, conflict_count]
54
54
  end
@@ -5,7 +5,7 @@ require "rest_client"
5
5
  module Gjp
6
6
  # attempts to get java projects' sources
7
7
  class SourceGetter
8
- include Logger
8
+ include Logging
9
9
 
10
10
  # attempts to download a project's sources
11
11
  def get_maven_source_jar(project, pom_path)
@@ -20,7 +20,7 @@ module Gjp
20
20
  maven_runner = Gjp::MavenRunner.new(project)
21
21
 
22
22
  project.from_directory do
23
- paths = Find.find(".").reject {|path| artifact_from_path(path) == nil}.sort
23
+ paths = Find.find(".").reject { |path| artifact_from_path(path).nil? }.sort
24
24
 
25
25
  succeded_paths = paths.select.with_index do |path, i|
26
26
  group_id, artifact_id, version = artifact_from_path(path)
@@ -37,7 +37,7 @@ module Gjp
37
37
  # if possible, turn path into a Maven artifact name, otherwise return nil
38
38
  def artifact_from_path(path)
39
39
  match = path.match(/\.\/kit\/m2\/(.+)\/(.+)\/(.+)\/\2-\3.*\.jar$/)
40
- if match != nil
40
+ unless match.nil?
41
41
  [match[1].gsub("/", "."), match[2], match[3]]
42
42
  end
43
43
  end
@@ -3,7 +3,7 @@
3
3
  module Gjp
4
4
  # creates and updates spec files
5
5
  class SpecGenerator
6
- include Logger
6
+ include Logging
7
7
 
8
8
  def initialize(project)
9
9
  @project = project
@@ -47,14 +47,14 @@ module Gjp
47
47
  # generates a spec file from a template and 3-way merges it
48
48
  def generate_merging(template, binding, path, tag_prefix)
49
49
  new_content = TemplateManager.new.generate(template, binding)
50
- @project.merge_new_content(new_content, path, "Spec generated", tag_prefix)
50
+ @project.merge_new_content(new_content, path, "Spec generated", tag_prefix)
51
51
  end
52
52
 
53
53
  # links a spec file in a subdirectory of output/
54
54
  def symlink_to_output(spec_path, destination_dir)
55
55
  spec_name = Pathname.new(spec_path).basename.to_s
56
56
  destination_spec_path = File.join(destination_dir, spec_name)
57
- FileUtils.symlink(File.expand_path(spec_path), destination_spec_path, :force => true)
57
+ FileUtils.symlink(File.expand_path(spec_path), destination_spec_path, force: true)
58
58
  end
59
59
  end
60
60
  end
@@ -5,7 +5,7 @@ require "erb"
5
5
  module Gjp
6
6
  # operates on files in template/
7
7
  class TemplateManager
8
- include Logger
8
+ include Logging
9
9
 
10
10
  attr_reader :template_path
11
11
 
@@ -25,7 +25,7 @@ module Gjp
25
25
  erb = ERB.new File.read(File.join(template_path, template_name)), nil, "<>"
26
26
  new_content = erb.result(object_binding)
27
27
 
28
- if destination_path != nil
28
+ unless destination_path.nil?
29
29
  File.open(destination_path, "w") { |io| io.write new_content }
30
30
  end
31
31
 
data/lib/gjp/version.rb CHANGED
@@ -1,5 +1,5 @@
1
1
  # encoding: UTF-8
2
2
 
3
3
  module Gjp
4
- VERSION = "0.37.0"
4
+ VERSION = "0.38.0"
5
5
  end
@@ -4,23 +4,23 @@ require "text"
4
4
 
5
5
  module Gjp
6
6
  # heuristically matches version strings
7
- class VersionMatcher
8
- include Logger
7
+ class VersionMatcher
8
+ include Logging
9
9
 
10
- # heuristically splits a full name into an artifact name and version string
10
+ # heuristically splits a full name into an artifact name and version string
11
11
  # assumes that version strings begin with a numeric character and are separated
12
12
  # by a ., -, _, ~ or space
13
13
  # returns a [name, version] pair
14
- def split_version(full_name)
14
+ def split_version(full_name)
15
15
  matches = full_name.match(/(.*?)(?:[\.\-\_ ~,]?([0-9].*))?$/)
16
- if matches != nil && matches.length > 1
16
+ if !matches.nil? && matches.length > 1
17
17
  [matches[1], matches[2]]
18
- else
19
- [full_string, nil]
20
- end
21
- end
18
+ else
19
+ [full_string, nil]
20
+ end
21
+ end
22
22
 
23
- # returns the "best match" between a version number and a set of available version numbers
23
+ # returns the "best match" between a version number and a set of available version numbers
24
24
  # using a heuristic criterion. Idea:
25
25
  # - split the version number in chunks divided by ., - etc.
26
26
  # - every chunk with same index is "compared", differences make up a score
@@ -29,57 +29,55 @@ module Gjp
29
29
  # - lowest score wins
30
30
  def best_match(my_version, their_versions)
31
31
  log.debug("version comparison: #{my_version} vs #{their_versions.join(", ")}")
32
-
32
+
33
33
  my_chunks = my_version.split(/[\.\-\_ ~,]/)
34
34
  their_chunks_hash = Hash[
35
35
  their_versions.map do |their_version|
36
- their_chunks_for_version = if their_version != nil
37
- their_version.split(/[\.\-\_ ~,]/)
38
- else
39
- []
40
- end
41
- their_chunks_for_version += [nil]*[my_chunks.length - their_chunks_for_version.length, 0].max
36
+ their_chunks_for_version = (
37
+ if !their_version.nil?
38
+ their_version.split(/[\.\-\_ ~,]/)
39
+ else
40
+ []
41
+ end
42
+ )
43
+ their_chunks_for_version += [nil] * [my_chunks.length - their_chunks_for_version.length, 0].max
42
44
  [their_version, their_chunks_for_version]
43
45
  end
44
46
  ]
45
-
46
- max_chunks_length = ([my_chunks.length] + their_chunks_hash.values.map {|chunk| chunk.length}).max
47
-
47
+
48
+ max_chunks_length = ([my_chunks.length] + their_chunks_hash.values.map { |chunk| chunk.length }).max
49
+
48
50
  scoreboard = []
49
51
  their_versions.each do |their_version|
50
52
  their_chunks = their_chunks_hash[their_version]
51
53
  score = 0
52
54
  their_chunks.each_with_index do |their_chunk, i|
53
- score_multiplier = 100**(max_chunks_length -i -1)
55
+ score_multiplier = 100**(max_chunks_length - i - 1)
54
56
  my_chunk = my_chunks[i]
55
57
  score += chunk_distance(my_chunk, their_chunk) * score_multiplier
56
58
  end
57
- scoreboard << {:version => their_version, :score => score}
59
+ scoreboard << { version: their_version, score: score }
58
60
  end
59
-
60
- scoreboard = scoreboard.sort_by {|element| element[:score]}
61
+
62
+ scoreboard = scoreboard.sort_by { |element| element[:score] }
61
63
 
62
64
  log.debug("scoreboard: ")
63
65
  scoreboard.each_with_index do |element, i|
64
- log.debug(" #{i+1}. #{element[:version]} (score: #{element[:score]})")
65
- end
66
-
67
- winner = scoreboard.first
68
-
69
- if winner != nil
70
- return winner[:version]
66
+ log.debug(" #{i + 1}. #{element[:version]} (score: #{element[:score]})")
71
67
  end
68
+
69
+ return scoreboard.first[:version] unless scoreboard.first.nil?
72
70
  end
73
-
71
+
74
72
  # returns a score representing the distance between two version chunks
75
73
  # for integers, the score is the difference between their values
76
74
  # for strings, the score is the Levenshtein distance
77
75
  # in any case score is normalized between 0 (identical) and 99 (very different/uncomparable)
78
76
  def chunk_distance(my_chunk, their_chunk)
79
- if my_chunk == nil
77
+ if my_chunk.nil?
80
78
  my_chunk = "0"
81
79
  end
82
- if their_chunk == nil
80
+ if their_chunk.nil?
83
81
  their_chunk = "0"
84
82
  end
85
83
  if my_chunk.is_i? && their_chunk.is_i?
@@ -89,7 +87,6 @@ module Gjp
89
87
  end
90
88
  end
91
89
  end
92
-
93
90
  end
94
91
 
95
92
  class String