tetra 2.0.7 → 2.0.8

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 (222) hide show
  1. checksums.yaml +4 -4
  2. data/CONTRIBUTING.md +3 -3
  3. data/README.md +5 -4
  4. data/bin/tetra +6 -4
  5. data/lib/template/bashrc +19 -14
  6. data/lib/template/bundled/apache-maven-3.9.12/LICENSE +616 -0
  7. data/lib/template/bundled/{apache-maven-3.9.9 → apache-maven-3.9.12}/NOTICE +0 -6
  8. data/lib/template/bundled/{apache-maven-3.9.9 → apache-maven-3.9.12}/bin/mvn +9 -0
  9. data/lib/template/bundled/{apache-maven-3.9.9 → apache-maven-3.9.12}/bin/mvn.cmd +14 -0
  10. data/lib/template/bundled/{apache-maven-3.9.9/boot/plexus-classworlds-2.8.0.jar → apache-maven-3.9.12/boot/plexus-classworlds-2.9.0.jar} +0 -0
  11. data/lib/template/bundled/apache-maven-3.9.12/lib/asm-9.9.jar +0 -0
  12. data/lib/template/bundled/apache-maven-3.9.12/lib/asm.license +29 -0
  13. data/lib/template/bundled/apache-maven-3.9.12/lib/commons-cli-1.11.0.jar +0 -0
  14. data/lib/template/bundled/apache-maven-3.9.12/lib/commons-codec-1.20.0.jar +0 -0
  15. data/lib/template/bundled/apache-maven-3.9.12/lib/error_prone_annotations-2.41.0.jar +0 -0
  16. data/lib/template/bundled/apache-maven-3.9.12/lib/failureaccess-1.0.3.jar +0 -0
  17. data/lib/template/bundled/apache-maven-3.9.12/lib/gson-2.13.2.jar +0 -0
  18. data/lib/template/bundled/apache-maven-3.9.12/lib/guava-33.5.0-jre.jar +0 -0
  19. data/lib/template/bundled/apache-maven-3.9.12/lib/guice-5.1.0-classes.jar +0 -0
  20. data/lib/template/bundled/{apache-maven-3.9.9/lib/jansi-2.4.1.jar → apache-maven-3.9.12/lib/jansi-2.4.2.jar} +0 -0
  21. data/lib/template/bundled/{apache-maven-3.9.9/lib/jansi-native/Windows/arm64/libjansi.so → apache-maven-3.9.12/lib/jansi-native/Windows/arm64/jansi.dll} +0 -0
  22. data/lib/template/bundled/apache-maven-3.9.12/lib/jspecify-1.0.0.jar +0 -0
  23. data/lib/template/bundled/{apache-maven-3.9.9/lib/maven-artifact-3.9.9.jar → apache-maven-3.9.12/lib/maven-artifact-3.9.12.jar} +0 -0
  24. data/lib/template/bundled/{apache-maven-3.9.9/lib/maven-builder-support-3.9.9.jar → apache-maven-3.9.12/lib/maven-builder-support-3.9.12.jar} +0 -0
  25. data/lib/template/bundled/{apache-maven-3.9.9/lib/maven-compat-3.9.9.jar → apache-maven-3.9.12/lib/maven-compat-3.9.12.jar} +0 -0
  26. data/lib/template/bundled/{apache-maven-3.9.9/lib/maven-core-3.9.9.jar → apache-maven-3.9.12/lib/maven-core-3.9.12.jar} +0 -0
  27. data/lib/template/bundled/apache-maven-3.9.12/lib/maven-embedder-3.9.12.jar +0 -0
  28. data/lib/template/bundled/apache-maven-3.9.12/lib/maven-model-3.9.12.jar +0 -0
  29. data/lib/template/bundled/{apache-maven-3.9.9/lib/maven-model-builder-3.9.9.jar → apache-maven-3.9.12/lib/maven-model-builder-3.9.12.jar} +0 -0
  30. data/lib/template/bundled/apache-maven-3.9.12/lib/maven-plugin-api-3.9.12.jar +0 -0
  31. data/lib/template/bundled/apache-maven-3.9.12/lib/maven-repository-metadata-3.9.12.jar +0 -0
  32. data/lib/template/bundled/{apache-maven-3.9.9/lib/maven-resolver-api-1.9.22.jar → apache-maven-3.9.12/lib/maven-resolver-api-1.9.25.jar} +0 -0
  33. data/lib/template/bundled/apache-maven-3.9.12/lib/maven-resolver-connector-basic-1.9.25.jar +0 -0
  34. data/lib/template/bundled/{apache-maven-3.9.9/lib/maven-resolver-impl-1.9.22.jar → apache-maven-3.9.12/lib/maven-resolver-impl-1.9.25.jar} +0 -0
  35. data/lib/template/bundled/{apache-maven-3.9.9/lib/maven-resolver-named-locks-1.9.22.jar → apache-maven-3.9.12/lib/maven-resolver-named-locks-1.9.25.jar} +0 -0
  36. data/lib/template/bundled/{apache-maven-3.9.9/lib/maven-resolver-provider-3.9.9.jar → apache-maven-3.9.12/lib/maven-resolver-provider-3.9.12.jar} +0 -0
  37. data/lib/template/bundled/{apache-maven-3.9.9/lib/maven-resolver-spi-1.9.22.jar → apache-maven-3.9.12/lib/maven-resolver-spi-1.9.25.jar} +0 -0
  38. data/lib/template/bundled/apache-maven-3.9.12/lib/maven-resolver-transport-file-1.9.25.jar +0 -0
  39. data/lib/template/bundled/apache-maven-3.9.12/lib/maven-resolver-transport-http-1.9.25.jar +0 -0
  40. data/lib/template/bundled/{apache-maven-3.9.9/lib/maven-resolver-transport-wagon-1.9.22.jar → apache-maven-3.9.12/lib/maven-resolver-transport-wagon-1.9.25.jar} +0 -0
  41. data/lib/template/bundled/{apache-maven-3.9.9/lib/maven-resolver-util-1.9.22.jar → apache-maven-3.9.12/lib/maven-resolver-util-1.9.25.jar} +0 -0
  42. data/lib/template/bundled/apache-maven-3.9.12/lib/maven-settings-3.9.12.jar +0 -0
  43. data/lib/template/bundled/{apache-maven-3.9.9/lib/maven-settings-builder-3.9.9.jar → apache-maven-3.9.12/lib/maven-settings-builder-3.9.12.jar} +0 -0
  44. data/lib/template/bundled/{apache-maven-3.9.9/lib/maven-slf4j-provider-3.9.9.jar → apache-maven-3.9.12/lib/maven-slf4j-provider-3.9.12.jar} +0 -0
  45. data/lib/template/bundled/{apache-maven-3.9.9/lib/org.eclipse.sisu.inject-0.9.0.M3.jar → apache-maven-3.9.12/lib/org.eclipse.sisu.inject-0.9.0.M4.jar} +0 -0
  46. data/lib/template/bundled/{apache-maven-3.9.9/lib/org.eclipse.sisu.plexus-0.9.0.M3.jar → apache-maven-3.9.12/lib/org.eclipse.sisu.plexus-0.9.0.M4.jar} +0 -0
  47. data/lib/template/bundled/apache-maven-3.9.12/lib/plexus-component-annotations-2.2.0.jar +0 -0
  48. data/lib/template/bundled/{apache-maven-3.9.9/lib/plexus-interpolation-1.27.jar → apache-maven-3.9.12/lib/plexus-interpolation-1.29.jar} +0 -0
  49. data/lib/template/bundled/apache-maven-3.9.12/lib/plexus-sec-dispatcher.license +202 -0
  50. data/lib/template/bundled/apache-maven-3.9.12/lib/plexus-utils-3.6.0.jar +0 -0
  51. data/lib/template/bundled/apache-maven-3.9.12/lib/plexus-utils.license +202 -0
  52. data/lib/template/kit.spec +3 -3
  53. data/lib/template/package.spec +13 -10
  54. data/lib/tetra/constants.rb +10 -1
  55. data/lib/tetra/data/license_map.yml +124 -0
  56. data/lib/tetra/facades/ant.rb +4 -7
  57. data/lib/tetra/facades/bash.rb +28 -19
  58. data/lib/tetra/facades/git.rb +69 -34
  59. data/lib/tetra/facades/gradle.rb +3 -2
  60. data/lib/tetra/facades/mvn.rb +8 -8
  61. data/lib/tetra/facades/process_runner.rb +58 -37
  62. data/lib/tetra/facades/tar.rb +5 -4
  63. data/lib/tetra/facades/unzip.rb +5 -4
  64. data/lib/tetra/generatable.rb +4 -3
  65. data/lib/tetra/kit.rb +12 -6
  66. data/lib/tetra/license_mapper.rb +34 -0
  67. data/lib/tetra/logger.rb +7 -4
  68. data/lib/tetra/maven_website.rb +64 -27
  69. data/lib/tetra/packages/kit_package.rb +4 -4
  70. data/lib/tetra/packages/package.rb +47 -8
  71. data/lib/tetra/packages/scriptable.rb +12 -8
  72. data/lib/tetra/packages/speccable.rb +7 -1
  73. data/lib/tetra/pom.rb +38 -16
  74. data/lib/tetra/pom_getter.rb +55 -43
  75. data/lib/tetra/project.rb +14 -15
  76. data/lib/tetra/project_initer.rb +32 -20
  77. data/lib/tetra/ui/change_sources_subcommand.rb +13 -7
  78. data/lib/tetra/ui/dry_run_subcommand.rb +5 -3
  79. data/lib/tetra/ui/generate_all_subcommand.rb +1 -1
  80. data/lib/tetra/ui/generate_kit_subcommand.rb +2 -1
  81. data/lib/tetra/ui/generate_script_subcommand.rb +2 -3
  82. data/lib/tetra/ui/generate_spec_subcommand.rb +3 -2
  83. data/lib/tetra/ui/get_pom_subcommand.rb +17 -12
  84. data/lib/tetra/ui/init_subcommand.rb +12 -4
  85. data/lib/tetra/ui/main.rb +6 -1
  86. data/lib/tetra/ui/move_jars_to_kit_subcommand.rb +2 -2
  87. data/lib/tetra/ui/patch_subcommand.rb +1 -1
  88. data/lib/tetra/ui/subcommand.rb +37 -31
  89. data/lib/tetra/version.rb +2 -3
  90. data/lib/tetra/version_matcher.rb +62 -44
  91. data/lib/tetra.rb +10 -6
  92. metadata +184 -274
  93. data/.github/ISSUE_TEMPLATE/bug_report.md +0 -26
  94. data/.github/ISSUE_TEMPLATE/feature_request.md +0 -15
  95. data/.github/dependabot.yml +0 -24
  96. data/.github/workflows/action-lint.yml +0 -15
  97. data/.github/workflows/codeql-analysis.yml +0 -94
  98. data/.github/workflows/dependency-review.yml +0 -17
  99. data/.github/workflows/markdown.yml +0 -23
  100. data/.github/workflows/rubocop.yml +0 -51
  101. data/.github/workflows/test.yml +0 -62
  102. data/.gitignore +0 -27
  103. data/.markdownlint.yaml +0 -11
  104. data/.rubocop.yml +0 -35
  105. data/.rubocop_todo.yml +0 -438
  106. data/.sonarcloud.properties +0 -4
  107. data/Gemfile +0 -6
  108. data/Gemfile.lock +0 -228
  109. data/Rakefile +0 -9
  110. data/lib/template/bundled/apache-maven-3.9.9/LICENSE +0 -760
  111. data/lib/template/bundled/apache-maven-3.9.9/lib/commons-cli-1.8.0.jar +0 -0
  112. data/lib/template/bundled/apache-maven-3.9.9/lib/commons-codec-1.17.1.jar +0 -0
  113. data/lib/template/bundled/apache-maven-3.9.9/lib/failureaccess-1.0.2.jar +0 -0
  114. data/lib/template/bundled/apache-maven-3.9.9/lib/guava-33.2.1-jre.jar +0 -0
  115. data/lib/template/bundled/apache-maven-3.9.9/lib/guice-5.1.0.jar +0 -0
  116. data/lib/template/bundled/apache-maven-3.9.9/lib/maven-embedder-3.9.9.jar +0 -0
  117. data/lib/template/bundled/apache-maven-3.9.9/lib/maven-model-3.9.9.jar +0 -0
  118. data/lib/template/bundled/apache-maven-3.9.9/lib/maven-plugin-api-3.9.9.jar +0 -0
  119. data/lib/template/bundled/apache-maven-3.9.9/lib/maven-repository-metadata-3.9.9.jar +0 -0
  120. data/lib/template/bundled/apache-maven-3.9.9/lib/maven-resolver-connector-basic-1.9.22.jar +0 -0
  121. data/lib/template/bundled/apache-maven-3.9.9/lib/maven-resolver-transport-file-1.9.22.jar +0 -0
  122. data/lib/template/bundled/apache-maven-3.9.9/lib/maven-resolver-transport-http-1.9.22.jar +0 -0
  123. data/lib/template/bundled/apache-maven-3.9.9/lib/maven-settings-3.9.9.jar +0 -0
  124. data/lib/template/bundled/apache-maven-3.9.9/lib/plexus-component-annotations-2.1.0.jar +0 -0
  125. data/lib/template/bundled/apache-maven-3.9.9/lib/plexus-utils-3.5.1.jar +0 -0
  126. data/lib/template/bundled/apache-maven-3.9.9/lib/plexus-xml-3.0.1.jar +0 -0
  127. data/lib/template/kit/.keep +0 -1
  128. data/lib/template/kit/jars/.keep +0 -1
  129. data/lib/template/packages/.keep +0 -1
  130. data/lib/template/src/.keep +0 -1
  131. data/spec/data/ant-super-simple-code/build/HW.class +0 -0
  132. data/spec/data/ant-super-simple-code/build/mypackage/HW.class +0 -0
  133. data/spec/data/ant-super-simple-code/build.xml +0 -133
  134. data/spec/data/ant-super-simple-code/dist/antsimple-20130618.jar +0 -0
  135. data/spec/data/ant-super-simple-code/lib/junit-4.11.jar +0 -0
  136. data/spec/data/ant-super-simple-code/lib/log4j-1.2.13.jar +0 -0
  137. data/spec/data/ant-super-simple-code/src/mypackage/HW.java +0 -15
  138. data/spec/data/antlr/antlr-2.7.2.jar +0 -0
  139. data/spec/data/antlr/pom.xml +0 -6
  140. data/spec/data/commons-collections4-4.5.0-M2-src.tar.gz +0 -0
  141. data/spec/data/commons-collections4-4.5.0-M2-src.zip +0 -0
  142. data/spec/data/commons-logging/commons-logging-1.3.4.jar +0 -0
  143. data/spec/data/commons-logging/parent_pom.xml +0 -1995
  144. data/spec/data/commons-logging/pom.xml +0 -833
  145. data/spec/data/nailgun/nailgun-0.7.1.jar +0 -0
  146. data/spec/data/nailgun/pom.xml +0 -153
  147. data/spec/data/struts-apps/pom.xml +0 -1147
  148. data/spec/data/tomcat/pom.xml +0 -33
  149. data/spec/lib/coarse/dry_run_subcommand_spec.rb +0 -59
  150. data/spec/lib/coarse/generate_all_subcommand_spec.rb +0 -132
  151. data/spec/lib/coarse/generate_spec_subcommand_spec.rb +0 -30
  152. data/spec/lib/coarse/init_subcommand_spec.rb +0 -101
  153. data/spec/lib/coarse/main_spec.rb +0 -21
  154. data/spec/lib/fine/ant_spec.rb +0 -25
  155. data/spec/lib/fine/git_spec.rb +0 -181
  156. data/spec/lib/fine/kit_package_spec.rb +0 -31
  157. data/spec/lib/fine/kit_spec.rb +0 -27
  158. data/spec/lib/fine/maven_website_spec.rb +0 -61
  159. data/spec/lib/fine/mvn_spec.rb +0 -27
  160. data/spec/lib/fine/package_spec.rb +0 -68
  161. data/spec/lib/fine/pom_getter_spec.rb +0 -36
  162. data/spec/lib/fine/pom_spec.rb +0 -98
  163. data/spec/lib/fine/project_spec.rb +0 -234
  164. data/spec/lib/fine/scriptable_spec.rb +0 -56
  165. data/spec/lib/fine/speccable_spec.rb +0 -93
  166. data/spec/lib/fine/tar_spec.rb +0 -22
  167. data/spec/lib/fine/unzip_spec.rb +0 -22
  168. data/spec/lib/fine/version_matcher_spec.rb +0 -64
  169. data/spec/spec_helper.rb +0 -90
  170. data/tetra.gemspec +0 -44
  171. data/utils/delete_nonet_user.sh +0 -8
  172. data/utils/setup_nonet_user.sh +0 -8
  173. /data/lib/template/bundled/{apache-maven-3.9.9 → apache-maven-3.9.12}/README.txt +0 -0
  174. /data/lib/template/bundled/{apache-maven-3.9.9 → apache-maven-3.9.12}/bin/m2.conf +0 -0
  175. /data/lib/template/bundled/{apache-maven-3.9.9 → apache-maven-3.9.12}/bin/mvnDebug +0 -0
  176. /data/lib/template/bundled/{apache-maven-3.9.9 → apache-maven-3.9.12}/bin/mvnDebug.cmd +0 -0
  177. /data/lib/template/bundled/{apache-maven-3.9.9 → apache-maven-3.9.12}/bin/mvnyjp +0 -0
  178. /data/lib/template/bundled/{apache-maven-3.9.9 → apache-maven-3.9.12}/boot/plexus-classworlds.license +0 -0
  179. /data/lib/template/bundled/{apache-maven-3.9.9 → apache-maven-3.9.12}/conf/logging/simplelogger.properties +0 -0
  180. /data/lib/template/bundled/{apache-maven-3.9.9 → apache-maven-3.9.12}/conf/settings.xml +0 -0
  181. /data/lib/template/bundled/{apache-maven-3.9.9 → apache-maven-3.9.12}/conf/toolchains.xml +0 -0
  182. /data/lib/template/bundled/{apache-maven-3.9.9 → apache-maven-3.9.12}/lib/aopalliance-1.0.jar +0 -0
  183. /data/lib/template/bundled/{apache-maven-3.9.9 → apache-maven-3.9.12}/lib/aopalliance.license +0 -0
  184. /data/lib/template/bundled/{apache-maven-3.9.9 → apache-maven-3.9.12}/lib/commons-cli.license +0 -0
  185. /data/lib/template/bundled/{apache-maven-3.9.9 → apache-maven-3.9.12}/lib/commons-codec.license +0 -0
  186. /data/lib/template/bundled/{apache-maven-3.9.9/lib/failureaccess.license → apache-maven-3.9.12/lib/error_prone_annotations.license} +0 -0
  187. /data/lib/template/bundled/{apache-maven-3.9.9 → apache-maven-3.9.12}/lib/ext/README.txt +0 -0
  188. /data/lib/template/bundled/{apache-maven-3.9.9 → apache-maven-3.9.12}/lib/ext/hazelcast/README.txt +0 -0
  189. /data/lib/template/bundled/{apache-maven-3.9.9 → apache-maven-3.9.12}/lib/ext/redisson/README.txt +0 -0
  190. /data/lib/template/bundled/{apache-maven-3.9.9/lib/guava.license → apache-maven-3.9.12/lib/failureaccess.license} +0 -0
  191. /data/lib/template/bundled/{apache-maven-3.9.9/lib/guice.license → apache-maven-3.9.12/lib/gson.license} +0 -0
  192. /data/lib/template/bundled/{apache-maven-3.9.9/lib/httpclient.license → apache-maven-3.9.12/lib/guava.license} +0 -0
  193. /data/lib/template/bundled/{apache-maven-3.9.9/lib/httpcore.license → apache-maven-3.9.12/lib/guice.license} +0 -0
  194. /data/lib/template/bundled/{apache-maven-3.9.9 → apache-maven-3.9.12}/lib/httpclient-4.5.14.jar +0 -0
  195. /data/lib/template/bundled/{apache-maven-3.9.9/lib/jansi.license → apache-maven-3.9.12/lib/httpclient.license} +0 -0
  196. /data/lib/template/bundled/{apache-maven-3.9.9 → apache-maven-3.9.12}/lib/httpcore-4.4.16.jar +0 -0
  197. /data/lib/template/bundled/{apache-maven-3.9.9/lib/javax.inject.license → apache-maven-3.9.12/lib/httpcore.license} +0 -0
  198. /data/lib/template/bundled/{apache-maven-3.9.9 → apache-maven-3.9.12}/lib/jansi-native/README.txt +0 -0
  199. /data/lib/template/bundled/{apache-maven-3.9.9 → apache-maven-3.9.12}/lib/jansi-native/Windows/x86/jansi.dll +0 -0
  200. /data/lib/template/bundled/{apache-maven-3.9.9 → apache-maven-3.9.12}/lib/jansi-native/Windows/x86_64/jansi.dll +0 -0
  201. /data/lib/template/bundled/{apache-maven-3.9.9/lib/jcl-over-slf4j.license → apache-maven-3.9.12/lib/jansi.license} +0 -0
  202. /data/lib/template/bundled/{apache-maven-3.9.9 → apache-maven-3.9.12}/lib/javax.annotation-api-1.3.2.jar +0 -0
  203. /data/lib/template/bundled/{apache-maven-3.9.9 → apache-maven-3.9.12}/lib/javax.annotation-api.license +0 -0
  204. /data/lib/template/bundled/{apache-maven-3.9.9 → apache-maven-3.9.12}/lib/javax.inject-1.jar +0 -0
  205. /data/lib/template/bundled/{apache-maven-3.9.9/lib/plexus-cipher.license → apache-maven-3.9.12/lib/javax.inject.license} +0 -0
  206. /data/lib/template/bundled/{apache-maven-3.9.9 → apache-maven-3.9.12}/lib/jcl-over-slf4j-1.7.36.jar +0 -0
  207. /data/lib/template/bundled/{apache-maven-3.9.9/lib/plexus-component-annotations.license → apache-maven-3.9.12/lib/jcl-over-slf4j.license} +0 -0
  208. /data/lib/template/bundled/{apache-maven-3.9.9/lib/plexus-interpolation.license → apache-maven-3.9.12/lib/jspecify.license} +0 -0
  209. /data/lib/template/bundled/{apache-maven-3.9.9 → apache-maven-3.9.12}/lib/maven-shared-utils-3.4.2.jar +0 -0
  210. /data/lib/template/bundled/{apache-maven-3.9.9 → apache-maven-3.9.12}/lib/org.eclipse.sisu.inject.license +0 -0
  211. /data/lib/template/bundled/{apache-maven-3.9.9 → apache-maven-3.9.12}/lib/org.eclipse.sisu.plexus.license +0 -0
  212. /data/lib/template/bundled/{apache-maven-3.9.9 → apache-maven-3.9.12}/lib/plexus-cipher-2.0.jar +0 -0
  213. /data/lib/template/bundled/{apache-maven-3.9.9/lib/plexus-sec-dispatcher.license → apache-maven-3.9.12/lib/plexus-cipher.license} +0 -0
  214. /data/lib/template/bundled/{apache-maven-3.9.9/lib/plexus-utils.license → apache-maven-3.9.12/lib/plexus-component-annotations.license} +0 -0
  215. /data/lib/template/bundled/{apache-maven-3.9.9/lib/plexus-xml.license → apache-maven-3.9.12/lib/plexus-interpolation.license} +0 -0
  216. /data/lib/template/bundled/{apache-maven-3.9.9 → apache-maven-3.9.12}/lib/plexus-sec-dispatcher-2.0.jar +0 -0
  217. /data/lib/template/bundled/{apache-maven-3.9.9 → apache-maven-3.9.12}/lib/slf4j-api-1.7.36.jar +0 -0
  218. /data/lib/template/bundled/{apache-maven-3.9.9 → apache-maven-3.9.12}/lib/slf4j-api.license +0 -0
  219. /data/lib/template/bundled/{apache-maven-3.9.9 → apache-maven-3.9.12}/lib/wagon-file-3.5.3.jar +0 -0
  220. /data/lib/template/bundled/{apache-maven-3.9.9 → apache-maven-3.9.12}/lib/wagon-http-3.5.3.jar +0 -0
  221. /data/lib/template/bundled/{apache-maven-3.9.9 → apache-maven-3.9.12}/lib/wagon-http-shared-3.5.3.jar +0 -0
  222. /data/lib/template/bundled/{apache-maven-3.9.9 → apache-maven-3.9.12}/lib/wagon-provider-api-3.5.3.jar +0 -0
@@ -1,4 +1,4 @@
1
- # encoding: UTF-8
1
+ # frozen_string_literal: true
2
2
 
3
3
  module Tetra
4
4
  # implements common options and utility methods
@@ -24,12 +24,12 @@ module Tetra
24
24
  end
25
25
 
26
26
  # maps verbosity options to log level
27
- def configure_log_level(v, vv, vvv)
28
- if vvv
27
+ def configure_log_level(verbose, very_verbose, very_very_verbose)
28
+ if very_very_verbose
29
29
  log.level = ::Logger::DEBUG
30
- elsif vv
30
+ elsif very_verbose
31
31
  log.level = ::Logger::INFO
32
- elsif v
32
+ elsif verbose
33
33
  log.level = ::Logger::WARN
34
34
  else
35
35
  log.level = ::Logger::ERROR
@@ -52,56 +52,62 @@ module Tetra
52
52
  dry_running = project.dry_running?
53
53
  has_finished = !project.version.nil?
54
54
 
55
- if (state == :is_in_progress && dry_running) ||
56
- (state == :is_not_in_progress && !dry_running) ||
57
- (state == :has_finished && !dry_running && has_finished)
55
+ condition_met = case state
56
+ when :is_in_progress
57
+ dry_running
58
+ when :is_not_in_progress
59
+ !dry_running
60
+ when :has_finished
61
+ !dry_running && has_finished
62
+ end
63
+
64
+ if condition_met
58
65
  yield
59
66
  else
60
- if (state == :is_in_progress) ||
61
- (state == :has_finished && !dry_running && !has_finished)
62
- puts "Please start a dry-run first, use \"tetra dry-run\""
63
- elsif (state == :is_not_in_progress) ||
64
- (state == :has_finished && dry_running)
65
- puts "There is a dry-run in progress, please finish it (^D) or abort it (^C^D)"
66
- end
67
+ handle_dry_run_error(state, dry_running, has_finished)
67
68
  end
68
69
  end
69
70
 
70
71
  # outputs output of a file generation
71
72
  def print_generation_result(project, result_path, conflict_count = 0)
72
73
  puts "#{format_path(result_path, project)} generated"
73
- puts "Warning: #{conflict_count} unresolved conflicts, please review and commit" if conflict_count > 0
74
+ puts "Warning: #{conflict_count} unresolved conflicts, please review and commit" if conflict_count.positive?
74
75
  end
75
76
 
76
77
  # generates a version of path relative to the current directory
77
78
  def format_path(path, project)
78
- full_path = (
79
- if Pathname.new(path).relative?
80
- File.join(project.full_path, path)
81
- else
82
- path
83
- end
84
- )
79
+ path_obj = Pathname.new(path)
80
+ full_path = if path_obj.relative?
81
+ File.join(project.full_path, path)
82
+ else
83
+ path
84
+ end
85
85
  Pathname.new(full_path).relative_path_from(Pathname.new(Dir.pwd))
86
86
  end
87
87
 
88
88
  # handles most fatal exceptions
89
89
  def checking_exceptions
90
90
  yield
91
- rescue Errno::EACCES => e
92
- $stderr.puts e
93
- rescue Errno::ENOENT => e
91
+ rescue Errno::EACCES, Errno::ENOENT, Errno::EEXIST => e
94
92
  $stderr.puts e
95
- rescue Errno::EEXIST => e
96
- $stderr.puts e
97
- rescue NoProjectDirectoryError => e
93
+ rescue Tetra::NoProjectDirectoryError => e
98
94
  $stderr.puts "#{e.directory} is not a tetra project directory, see \"tetra init\""
99
- rescue GitAlreadyInitedError
95
+ rescue Tetra::GitAlreadyInitedError
100
96
  $stderr.puts "This directory is already a tetra project"
101
- rescue ExecutionFailed => e
97
+ rescue Tetra::ExecutionFailed => e
102
98
  $stderr.puts "Failed to run `#{e.commandline}` (exit status #{e.status})"
103
99
  rescue Interrupt
104
100
  $stderr.puts "Execution interrupted by the user"
105
101
  end
102
+
103
+ private
104
+
105
+ def handle_dry_run_error(state, dry_running, has_finished)
106
+ if (state == :is_in_progress) || (state == :has_finished && !dry_running && !has_finished)
107
+ puts "Please start a dry-run first, use \"tetra dry-run\""
108
+ elsif (state == :is_not_in_progress) || (state == :has_finished && dry_running)
109
+ puts "There is a dry-run in progress, please finish it (^D) or abort it (^C^D)"
110
+ end
111
+ end
106
112
  end
107
113
  end
data/lib/tetra/version.rb CHANGED
@@ -1,6 +1,5 @@
1
- # encoding: UTF-8
2
-
1
+ # frozen_string_literal: true
3
2
  # base module for tetra
4
3
  module Tetra
5
- VERSION = "2.0.7"
4
+ VERSION = "2.0.8"
6
5
  end
@@ -1,4 +1,4 @@
1
- # encoding: UTF-8
1
+ # frozen_string_literal: true
2
2
 
3
3
  module Tetra
4
4
  # heuristically matches version strings
@@ -10,62 +10,68 @@ module Tetra
10
10
  # by a ., -, _, ~ or space
11
11
  # returns a [name, version] pair
12
12
  def split_version(full_name)
13
- matches = full_name.match(/(.*?)(?:[\.\-\_ ~,]?([0-9].*))?$/)
14
- if !matches.nil? && matches.length > 1
15
- [matches[1], matches[2]]
13
+ # 1. Match from the start (\A)
14
+ # 2. Capture everything that is NOT a digit (ZERO or more times) -> *?
15
+ # 3. Handle the optional separator
16
+ # 4. Capture the version (MUST start with a digit)
17
+ matches = full_name.match(/\A(?<name>[^0-9]*?)(?:[.\-_ ~,]?(?<version>[0-9].*))\z/)
18
+
19
+ if matches
20
+ [matches[:name], matches[:version]]
16
21
  else
17
- [full_string, nil]
22
+ [full_name, nil]
18
23
  end
19
24
  end
20
25
 
21
26
  # returns the "best match" between a version number and a set of available version numbers
22
- # using a heuristic criterion. Idea:
23
- # - split the version number in chunks divided by ., - etc.
24
- # - every chunk with same index is "compared", differences make up a score
25
- # - "comparison" is a subtraction if the chunk is an integer, a string distance measure otherwise
26
- # - score weighs differently on chunk index (first chunks are most important)
27
- # - lowest score wins
27
+ # using a heuristic criterion.
28
28
  def best_match(my_version, their_versions)
29
+ return nil if their_versions.nil? || their_versions.empty?
30
+
29
31
  log.debug("version comparison: #{my_version} vs #{their_versions.join(', ')}")
30
32
 
31
- my_chunks = my_version.split(/[\.\-\_ ~,]/)
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
- 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
45
- ]
46
-
47
- max_chunks_length = ([my_chunks.length] + their_chunks_hash.values.map(&:length)).max
48
-
49
- scoreboard = []
50
- their_versions.each do |their_version|
51
- their_chunks = their_chunks_hash[their_version]
33
+ my_chunks = my_version.split(Tetra::CHUNK_SEPARATOR_VERSION_MATCHER)
34
+
35
+ # Use to_h (Ruby 2.6+) instead of Hash[]
36
+ # Pre-calculate chunks for all versions to avoid re-splitting in the loop
37
+ their_chunks_map = their_versions.to_h do |their_version|
38
+ chunks = their_version ? their_version.split(Tetra::CHUNK_SEPARATOR_VERSION_MATCHER) : []
39
+
40
+ # Pad with nil to match my_chunks length if shorter
41
+ padding_needed = [my_chunks.length - chunks.length, 0].max
42
+ chunks.fill(nil, chunks.length, padding_needed)
43
+
44
+ [their_version, chunks]
45
+ end
46
+
47
+ # Calculate max length across all candidates (including myself)
48
+ max_chunks_length = ([my_chunks.length] + their_chunks_map.values.map(&:length)).max
49
+
50
+ # Calculate scores
51
+ scoreboard = their_versions.map do |their_version|
52
+ their_chunks = their_chunks_map[their_version]
52
53
  score = 0
54
+
53
55
  their_chunks.each_with_index do |their_chunk, i|
56
+ # Weighting: Earlier chunks are vastly more important
54
57
  score_multiplier = 100**(max_chunks_length - i - 1)
55
58
  my_chunk = my_chunks[i]
59
+
56
60
  score += chunk_distance(my_chunk, their_chunk) * score_multiplier
57
61
  end
58
- scoreboard << { version: their_version, score: score }
62
+
63
+ { version: their_version, score: score }
59
64
  end
60
65
 
61
- scoreboard = scoreboard.sort_by { |element| element[:score] }
66
+ # Sort by lowest score (best match)
67
+ sorted_scoreboard = scoreboard.sort_by { |entry| entry[:score] }
62
68
 
63
69
  log.debug("scoreboard: ")
64
- scoreboard.each_with_index do |element, i|
65
- log.debug(" #{i + 1}. #{element[:version]} (score: #{element[:score]})")
70
+ sorted_scoreboard.each_with_index do |entry, i|
71
+ log.debug(" #{i + 1}. #{entry[:version]} (score: #{entry[:score]})")
66
72
  end
67
73
 
68
- return scoreboard.first[:version] unless scoreboard.first.nil?
74
+ sorted_scoreboard.first[:version]
69
75
  end
70
76
 
71
77
  # returns a score representing the distance between two version chunks
@@ -73,19 +79,31 @@ module Tetra
73
79
  # for strings, the score is the Levenshtein distance
74
80
  # in any case score is normalized between 0 (identical) and 99 (very different/uncomparable)
75
81
  def chunk_distance(my_chunk, their_chunk)
76
- my_chunk = "0" if my_chunk.nil?
77
- their_chunk = "0" if their_chunk.nil?
82
+ # Normalize nils to "0"
83
+ my_chunk ||= "0"
84
+ their_chunk ||= "0"
85
+
86
+ # If exact match, distance is 0
87
+ return 0 if my_chunk == their_chunk
78
88
 
79
- if i?(my_chunk) && i?(their_chunk)
80
- return [(my_chunk.to_i - their_chunk.to_i).abs, 99].min
89
+ if integer?(my_chunk) && integer?(their_chunk)
90
+ diff = (my_chunk.to_i - their_chunk.to_i).abs
91
+ [diff, 99].min
81
92
  else
82
- return [Text::Levenshtein.distance(my_chunk.upcase, their_chunk.upcase), 99].min
93
+ dist = Text::Levenshtein.distance(my_chunk.upcase, their_chunk.upcase)
94
+ [dist, 99].min
83
95
  end
84
96
  end
85
97
 
98
+ private
99
+
86
100
  # true for integer strings
87
- def i?(string)
88
- string =~ /^[0-9]+$/
101
+ def integer?(string)
102
+ # Faster than regex for simple digit checks
103
+ Integer(string, 10)
104
+ true
105
+ rescue ArgumentError, TypeError
106
+ false
89
107
  end
90
108
  end
91
109
  end
data/lib/tetra.rb CHANGED
@@ -1,23 +1,26 @@
1
- # encoding: UTF-8
1
+ # frozen_string_literal: true
2
2
 
3
3
  # ruby standard library
4
4
  require "digest/sha1"
5
5
  require "English"
6
6
  require "erb"
7
- require "find"
8
7
  require "forwardable"
8
+ require "json"
9
9
  require "logger"
10
+ require "net/http"
11
+ require "open3"
10
12
  require "open-uri"
11
13
  require "pathname"
12
- require "singleton"
13
14
  require "rexml/document"
14
- require "net/http"
15
+ require "singleton"
16
+ require "stringio"
17
+ require "tempfile"
18
+ require "uri"
15
19
 
16
20
  # third party libraries
17
21
  require "clamp"
18
- require "json"
19
- require "open4"
20
22
  require "text"
23
+ require "yaml"
21
24
  require "zip"
22
25
 
23
26
  # base components
@@ -46,6 +49,7 @@ require "tetra/maven_website"
46
49
  require "tetra/pom_getter"
47
50
 
48
51
  # package building
52
+ require "tetra/license_mapper"
49
53
  require "tetra/packages/speccable"
50
54
  require "tetra/packages/scriptable"
51
55
  require "tetra/packages/kit_package"