eac_tools 0.86.1 → 0.86.2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (369) hide show
  1. checksums.yaml +4 -4
  2. data/Gemfile.lock +40 -35
  3. data/lib/eac_tools/version.rb +1 -1
  4. data/sub/avm/avm.gemspec +2 -2
  5. data/sub/avm/lib/avm/rspec/setup/launcher.rb +1 -0
  6. data/sub/avm/lib/avm/scms/base/branches.rb +22 -0
  7. data/sub/avm/lib/avm/scms/base/remotes.rb +22 -0
  8. data/sub/avm/lib/avm/scms/branch.rb +26 -0
  9. data/sub/avm/lib/avm/scms/remote.rb +11 -0
  10. data/sub/avm/lib/avm/sources/issues/deliver.rb +52 -0
  11. data/sub/avm/lib/avm/sources/issues.rb +11 -0
  12. data/sub/avm/lib/avm/version.rb +1 -1
  13. data/sub/avm-git/avm-git.gemspec +23 -0
  14. data/sub/avm-git/lib/avm/git/application_scms/base/assert_main_at.rb +49 -0
  15. data/sub/avm-git/lib/avm/git/application_scms/base.rb +21 -0
  16. data/sub/{avm-eac_php_base0/lib/avm/eac_php_base0/sources.rb → avm-git/lib/avm/git/application_scms.rb} +2 -2
  17. data/sub/avm-git/lib/avm/git/commit/class_methods.rb +31 -0
  18. data/sub/avm-git/lib/avm/git/commit/diff_tree_line.rb +32 -0
  19. data/sub/avm-git/lib/avm/git/commit/file.rb +46 -0
  20. data/sub/avm-git/lib/avm/git/commit.rb +59 -0
  21. data/sub/avm-git/lib/avm/git/issue/complete/commits.rb +42 -0
  22. data/sub/avm-git/lib/avm/git/issue/complete/git_subrepos.rb +23 -0
  23. data/sub/avm-git/lib/avm/git/issue/complete/local_branch.rb +61 -0
  24. data/sub/avm-git/lib/avm/git/issue/complete/local_tag.rb +39 -0
  25. data/sub/avm-git/lib/avm/git/issue/complete/push.rb +60 -0
  26. data/sub/avm-git/lib/avm/git/issue/complete/remote.rb +33 -0
  27. data/sub/avm-git/lib/avm/git/issue/complete/test.rb +40 -0
  28. data/sub/avm-git/lib/avm/git/issue/complete/tracker.rb +28 -0
  29. data/sub/avm-git/lib/avm/git/issue/complete/validation.rb +39 -0
  30. data/sub/avm-git/lib/avm/git/issue/complete/validations.rb +53 -0
  31. data/sub/avm-git/lib/avm/git/issue/complete/working_tree.rb +19 -0
  32. data/sub/avm-git/lib/avm/git/issue/complete.rb +66 -0
  33. data/sub/avm-git/lib/avm/git/issue.rb +11 -0
  34. data/sub/avm-git/lib/avm/git/launcher/base/class_methods.rb +28 -0
  35. data/sub/avm-git/lib/avm/git/launcher/base/dirty_files.rb +23 -0
  36. data/sub/avm-git/lib/avm/git/launcher/base/remotes.rb +40 -0
  37. data/sub/avm-git/lib/avm/git/launcher/base/subrepo.rb +44 -0
  38. data/sub/avm-git/lib/avm/git/launcher/base/underlying.rb +59 -0
  39. data/sub/avm-git/lib/avm/git/launcher/base.rb +87 -0
  40. data/sub/avm-git/lib/avm/git/launcher/error.rb +15 -0
  41. data/sub/avm-git/lib/avm/git/launcher/mirror_update.rb +38 -0
  42. data/sub/avm-git/lib/avm/git/launcher/publish_base.rb +131 -0
  43. data/sub/avm-git/lib/avm/git/launcher/remote.rb +55 -0
  44. data/sub/avm-git/lib/avm/git/launcher/sub_warp_base.rb +33 -0
  45. data/sub/avm-git/lib/avm/git/launcher/warp_base.rb +68 -0
  46. data/sub/avm-git/lib/avm/git/launcher.rb +7 -0
  47. data/sub/avm-git/lib/avm/git/launcher_stereotypes/git/local_project_mixin.rb +19 -0
  48. data/sub/avm-git/lib/avm/git/launcher_stereotypes/git/publish.rb +15 -0
  49. data/sub/avm-git/lib/avm/git/launcher_stereotypes/git/warp.rb +27 -0
  50. data/sub/avm-git/lib/avm/git/launcher_stereotypes/git.rb +25 -0
  51. data/sub/avm-git/lib/avm/git/launcher_stereotypes/git_subrepo/publish.rb +31 -0
  52. data/sub/avm-git/lib/avm/git/launcher_stereotypes/git_subrepo/warp.rb +88 -0
  53. data/sub/avm-git/lib/avm/git/launcher_stereotypes/git_subrepo.rb +36 -0
  54. data/sub/avm-git/lib/avm/git/launcher_stereotypes/git_subtree/publish.rb +14 -0
  55. data/sub/avm-git/lib/avm/git/launcher_stereotypes/git_subtree/warp.rb +32 -0
  56. data/sub/avm-git/lib/avm/git/launcher_stereotypes/git_subtree.rb +51 -0
  57. data/sub/avm-git/lib/avm/git/launcher_stereotypes/provider.rb +22 -0
  58. data/sub/{avm-eac_php_base0/lib/avm/eac_php_base0/file_formats.rb → avm-git/lib/avm/git/launcher_stereotypes.rb} +2 -2
  59. data/sub/avm-git/lib/avm/git/organize/reference_update.rb +34 -0
  60. data/sub/avm-git/lib/avm/git/organize/repository.rb +77 -0
  61. data/sub/{avm-eac_php_base0/lib/avm/eac_php_base0/instances.rb → avm-git/lib/avm/git/organize.rb} +2 -2
  62. data/sub/avm-git/lib/avm/git/revision_test.rb +105 -0
  63. data/sub/avm-git/lib/avm/git/scms/git/branch.rb +31 -0
  64. data/sub/avm-git/lib/avm/git/scms/git/branches.rb +20 -0
  65. data/sub/avm-git/lib/avm/git/scms/git/change_tracker.rb +36 -0
  66. data/sub/avm-git/lib/avm/git/scms/git/changed_file.rb +16 -0
  67. data/sub/avm-git/lib/avm/git/scms/git/changed_files.rb +24 -0
  68. data/sub/avm-git/lib/avm/git/scms/git/commit/deploy.rb +43 -0
  69. data/sub/avm-git/lib/avm/git/scms/git/commit/deploy_methods.rb +30 -0
  70. data/sub/avm-git/lib/avm/git/scms/git/commit.rb +67 -0
  71. data/sub/avm-git/lib/avm/git/scms/git/commit_dirty.rb +36 -0
  72. data/sub/avm-git/lib/avm/git/scms/git/commits.rb +47 -0
  73. data/sub/avm-git/lib/avm/git/scms/git/interval.rb +31 -0
  74. data/sub/avm-git/lib/avm/git/scms/git/milestones.rb +21 -0
  75. data/sub/avm-git/lib/avm/git/scms/git/remote.rb +21 -0
  76. data/sub/avm-git/lib/avm/git/scms/git/remotes.rb +32 -0
  77. data/sub/avm-git/lib/avm/git/scms/git/run_commit.rb +57 -0
  78. data/sub/avm-git/lib/avm/git/scms/git.rb +44 -0
  79. data/sub/avm-git/lib/avm/git/scms/git_sub_base/changed_file.rb +21 -0
  80. data/sub/avm-git/lib/avm/git/scms/git_sub_base/commit.rb +27 -0
  81. data/sub/avm-git/lib/avm/git/scms/git_sub_base/interval.rb +28 -0
  82. data/sub/avm-git/lib/avm/git/scms/git_sub_base.rb +33 -0
  83. data/sub/avm-git/lib/avm/git/scms/git_subrepo.rb +37 -0
  84. data/sub/avm-git/lib/avm/git/scms/git_subtree.rb +26 -0
  85. data/sub/avm-git/lib/avm/git/scms/provider.rb +21 -0
  86. data/sub/{avm-eac_php_base0/lib/avm/eac_php_base0/source_generators.rb → avm-git/lib/avm/git/scms.rb} +2 -2
  87. data/sub/avm-git/lib/avm/git/subrepo_check/parent.rb +51 -0
  88. data/sub/avm-git/lib/avm/git/subrepo_check/remote.rb +89 -0
  89. data/sub/avm-git/lib/avm/git/subrepo_check/show_result.rb +32 -0
  90. data/sub/avm-git/lib/avm/git/subrepo_check.rb +38 -0
  91. data/sub/avm-git/lib/avm/git/subrepo_checks.rb +60 -0
  92. data/sub/avm-git/lib/avm/git/vendor/github.rb +20 -0
  93. data/sub/avm-git/lib/avm/git/vendor.rb +11 -0
  94. data/sub/{avm-eac_php_base0/lib/avm/eac_php_base0 → avm-git/lib/avm/git}/version.rb +2 -2
  95. data/sub/{avm-eac_php_base0/lib/avm/eac_php_base0.rb → avm-git/lib/avm/git.rb} +1 -1
  96. data/sub/avm-git/locale/en.yml +6 -0
  97. data/sub/avm-git/locale/pt-BR.yml +6 -0
  98. data/sub/avm-git/spec/lib/avm/git/commit/diff_tree_line_spec.rb +13 -0
  99. data/sub/avm-git/spec/lib/avm/git/commit/diff_tree_line_spec_files/add.source.out +1 -0
  100. data/sub/avm-git/spec/lib/avm/git/commit/diff_tree_line_spec_files/add.target.yaml +7 -0
  101. data/sub/avm-git/spec/lib/avm/git/commit/diff_tree_line_spec_files/modify.source.out +1 -0
  102. data/sub/avm-git/spec/lib/avm/git/commit/diff_tree_line_spec_files/modify.target.yaml +7 -0
  103. data/sub/avm-git/spec/lib/avm/git/commit/diff_tree_line_spec_files/remove.source.out +1 -0
  104. data/sub/avm-git/spec/lib/avm/git/commit/diff_tree_line_spec_files/remove.target.yaml +7 -0
  105. data/sub/avm-git/spec/lib/avm/git/commit/diff_tree_line_spec_files/rename.source.out +2 -0
  106. data/sub/avm-git/spec/lib/avm/git/commit/diff_tree_line_spec_files/rename.target.yaml +13 -0
  107. data/sub/avm-git/spec/lib/avm/git/commit/diff_tree_line_spec_files/rename_modify.source.out +2 -0
  108. data/sub/avm-git/spec/lib/avm/git/commit/diff_tree_line_spec_files/rename_modify.target.yaml +13 -0
  109. data/sub/avm-git/spec/lib/avm/git/commit_spec.rb +56 -0
  110. data/sub/avm-git/spec/lib/avm/git/launcher/base_spec.rb +45 -0
  111. data/sub/avm-git/spec/lib/avm/git/scms/git/commit/deploy_spec.rb +92 -0
  112. data/sub/avm-git/spec/lib/avm/git/scms/git_spec.rb +8 -0
  113. data/sub/avm-git/spec/lib/avm/git/scms/git_subrepo_spec.rb +8 -0
  114. data/sub/avm-git/spec/lib/avm/git/vendor/github_spec.rb +23 -0
  115. data/sub/avm-tools/avm-tools.gemspec +3 -3
  116. data/sub/avm-tools/lib/avm/tools/runner/source/issue/deliver.rb +3 -3
  117. data/sub/avm-tools/lib/avm/tools/version.rb +1 -1
  118. data/sub/eac_git/Gemfile +8 -0
  119. data/sub/eac_git/eac_git.gemspec +20 -0
  120. data/sub/eac_git/lib/eac_git/executables.rb +48 -0
  121. data/sub/eac_git/lib/eac_git/local/branch.rb +47 -0
  122. data/sub/eac_git/lib/eac_git/local/commit/archive.rb +19 -0
  123. data/sub/eac_git/lib/eac_git/local/commit/changed_file.rb +46 -0
  124. data/sub/eac_git/lib/eac_git/local/commit/diff_tree_line.rb +32 -0
  125. data/sub/eac_git/lib/eac_git/local/commit.rb +73 -0
  126. data/sub/eac_git/lib/eac_git/local/dirty_files.rb +48 -0
  127. data/sub/eac_git/lib/eac_git/local/log.rb +17 -0
  128. data/sub/eac_git/lib/eac_git/local/remote/push.rb +35 -0
  129. data/sub/eac_git/lib/eac_git/local/remote.rb +50 -0
  130. data/sub/eac_git/lib/eac_git/local/remotes.rb +20 -0
  131. data/sub/eac_git/lib/eac_git/local/subrepo/config.rb +43 -0
  132. data/sub/eac_git/lib/eac_git/local/subrepo.rb +49 -0
  133. data/sub/eac_git/lib/eac_git/local.rb +127 -0
  134. data/sub/eac_git/lib/eac_git/remote.rb +24 -0
  135. data/sub/eac_git/lib/eac_git/remote_like/ls_result.rb +20 -0
  136. data/sub/eac_git/lib/eac_git/remote_like.rb +32 -0
  137. data/sub/eac_git/lib/eac_git/rspec/setup.rb +23 -0
  138. data/sub/eac_git/lib/eac_git/rspec/stubbed_git_local_repo/directory.rb +36 -0
  139. data/sub/eac_git/lib/eac_git/rspec/stubbed_git_local_repo/file.rb +22 -0
  140. data/sub/eac_git/lib/eac_git/rspec/stubbed_git_local_repo/fs_object.rb +27 -0
  141. data/sub/eac_git/lib/eac_git/rspec/stubbed_git_local_repo/repository.rb +34 -0
  142. data/sub/eac_git/lib/eac_git/rspec/stubbed_git_local_repo.rb +29 -0
  143. data/sub/eac_git/lib/eac_git/rspec.rb +9 -0
  144. data/sub/eac_git/lib/eac_git/version.rb +5 -0
  145. data/sub/eac_git/lib/eac_git.rb +7 -0
  146. data/sub/eac_git/spec/lib/eac_git/executables_spec.rb +13 -0
  147. data/sub/eac_git/spec/lib/eac_git/local/commit/diff_tree_line_spec.rb +13 -0
  148. data/sub/eac_git/spec/lib/eac_git/local/commit/diff_tree_line_spec_files/add.source.out +1 -0
  149. data/sub/eac_git/spec/lib/eac_git/local/commit/diff_tree_line_spec_files/add.target.yaml +7 -0
  150. data/sub/eac_git/spec/lib/eac_git/local/commit/diff_tree_line_spec_files/modify.source.out +1 -0
  151. data/sub/eac_git/spec/lib/eac_git/local/commit/diff_tree_line_spec_files/modify.target.yaml +7 -0
  152. data/sub/eac_git/spec/lib/eac_git/local/commit/diff_tree_line_spec_files/remove.source.out +1 -0
  153. data/sub/eac_git/spec/lib/eac_git/local/commit/diff_tree_line_spec_files/remove.target.yaml +7 -0
  154. data/sub/eac_git/spec/lib/eac_git/local/commit/diff_tree_line_spec_files/rename.source.out +2 -0
  155. data/sub/eac_git/spec/lib/eac_git/local/commit/diff_tree_line_spec_files/rename.target.yaml +13 -0
  156. data/sub/eac_git/spec/lib/eac_git/local/commit/diff_tree_line_spec_files/rename_modify.source.out +2 -0
  157. data/sub/eac_git/spec/lib/eac_git/local/commit/diff_tree_line_spec_files/rename_modify.target.yaml +13 -0
  158. data/sub/eac_git/spec/lib/eac_git/local/commit_spec.rb +58 -0
  159. data/sub/eac_git/spec/lib/eac_git/local/dirty_files_spec.rb +20 -0
  160. data/sub/eac_git/spec/rubocop_spec.rb +3 -0
  161. data/sub/eac_git/spec/spec_helper.rb +4 -0
  162. data/sub/eac_git/vendor/git-subrepo/Changes +110 -0
  163. data/sub/eac_git/vendor/git-subrepo/Intro.pod +509 -0
  164. data/sub/eac_git/vendor/git-subrepo/License +21 -0
  165. data/sub/eac_git/vendor/git-subrepo/Makefile +82 -0
  166. data/sub/eac_git/vendor/git-subrepo/Meta +28 -0
  167. data/sub/eac_git/vendor/git-subrepo/ReadMe.pod +698 -0
  168. data/sub/eac_git/vendor/git-subrepo/doc/comparison.swim +35 -0
  169. data/sub/eac_git/vendor/git-subrepo/doc/git-subrepo.swim +608 -0
  170. data/sub/eac_git/vendor/git-subrepo/doc/intro-to-subrepo.swim +387 -0
  171. data/sub/eac_git/vendor/git-subrepo/ext/bashplus/Changes +15 -0
  172. data/sub/eac_git/vendor/git-subrepo/ext/bashplus/License +21 -0
  173. data/sub/eac_git/vendor/git-subrepo/ext/bashplus/Makefile +45 -0
  174. data/sub/eac_git/vendor/git-subrepo/ext/bashplus/Meta +28 -0
  175. data/sub/eac_git/vendor/git-subrepo/ext/bashplus/ReadMe.pod +77 -0
  176. data/sub/eac_git/vendor/git-subrepo/ext/bashplus/bin/bash+ +43 -0
  177. data/sub/eac_git/vendor/git-subrepo/ext/bashplus/doc/bash+.swim +61 -0
  178. data/sub/eac_git/vendor/git-subrepo/ext/bashplus/lib/bash+.bash +92 -0
  179. data/sub/eac_git/vendor/git-subrepo/ext/bashplus/man/man1/bash+.1 +134 -0
  180. data/sub/eac_git/vendor/git-subrepo/ext/bashplus/man/man3/bash+.3 +134 -0
  181. data/sub/eac_git/vendor/git-subrepo/ext/bashplus/test/base.t +12 -0
  182. data/sub/eac_git/vendor/git-subrepo/ext/bashplus/test/fcopy.t +22 -0
  183. data/sub/eac_git/vendor/git-subrepo/ext/bashplus/test/lib/foo/bar.bash +3 -0
  184. data/sub/eac_git/vendor/git-subrepo/ext/bashplus/test/lib/foo/foo.bash +3 -0
  185. data/sub/eac_git/vendor/git-subrepo/ext/bashplus/test/source-bash+-std.t +18 -0
  186. data/sub/eac_git/vendor/git-subrepo/ext/bashplus/test/source-bash+.t +23 -0
  187. data/sub/eac_git/vendor/git-subrepo/ext/bashplus/test/test.bash +70 -0
  188. data/sub/eac_git/vendor/git-subrepo/ext/bashplus/test/use.t +19 -0
  189. data/sub/eac_git/vendor/git-subrepo/ext/test-more-bash/Changes +15 -0
  190. data/sub/eac_git/vendor/git-subrepo/ext/test-more-bash/License +21 -0
  191. data/sub/eac_git/vendor/git-subrepo/ext/test-more-bash/Makefile +20 -0
  192. data/sub/eac_git/vendor/git-subrepo/ext/test-more-bash/Meta +30 -0
  193. data/sub/eac_git/vendor/git-subrepo/ext/test-more-bash/ReadMe.pod +115 -0
  194. data/sub/eac_git/vendor/git-subrepo/ext/test-more-bash/doc/test-more.swim +89 -0
  195. data/sub/eac_git/vendor/git-subrepo/ext/test-more-bash/ext/bashplus/Changes +15 -0
  196. data/sub/eac_git/vendor/git-subrepo/ext/test-more-bash/ext/bashplus/License +21 -0
  197. data/sub/eac_git/vendor/git-subrepo/ext/test-more-bash/ext/bashplus/Makefile +45 -0
  198. data/sub/eac_git/vendor/git-subrepo/ext/test-more-bash/ext/bashplus/Meta +28 -0
  199. data/sub/eac_git/vendor/git-subrepo/ext/test-more-bash/ext/bashplus/ReadMe.pod +77 -0
  200. data/sub/eac_git/vendor/git-subrepo/ext/test-more-bash/ext/bashplus/bin/bash+ +43 -0
  201. data/sub/eac_git/vendor/git-subrepo/ext/test-more-bash/ext/bashplus/doc/bash+.swim +61 -0
  202. data/sub/eac_git/vendor/git-subrepo/ext/test-more-bash/ext/bashplus/lib/bash+.bash +92 -0
  203. data/sub/eac_git/vendor/git-subrepo/ext/test-more-bash/ext/bashplus/man/man1/bash+.1 +134 -0
  204. data/sub/eac_git/vendor/git-subrepo/ext/test-more-bash/ext/bashplus/man/man3/bash+.3 +134 -0
  205. data/sub/eac_git/vendor/git-subrepo/ext/test-more-bash/ext/bashplus/test/base.t +12 -0
  206. data/sub/eac_git/vendor/git-subrepo/ext/test-more-bash/ext/bashplus/test/fcopy.t +22 -0
  207. data/sub/eac_git/vendor/git-subrepo/ext/test-more-bash/ext/bashplus/test/lib/foo/bar.bash +3 -0
  208. data/sub/eac_git/vendor/git-subrepo/ext/test-more-bash/ext/bashplus/test/lib/foo/foo.bash +3 -0
  209. data/sub/eac_git/vendor/git-subrepo/ext/test-more-bash/ext/bashplus/test/source-bash+-std.t +18 -0
  210. data/sub/eac_git/vendor/git-subrepo/ext/test-more-bash/ext/bashplus/test/source-bash+.t +23 -0
  211. data/sub/eac_git/vendor/git-subrepo/ext/test-more-bash/ext/bashplus/test/test.bash +70 -0
  212. data/sub/eac_git/vendor/git-subrepo/ext/test-more-bash/ext/bashplus/test/use.t +19 -0
  213. data/sub/eac_git/vendor/git-subrepo/ext/test-more-bash/ext/test-tap-bash/Changes +15 -0
  214. data/sub/eac_git/vendor/git-subrepo/ext/test-more-bash/ext/test-tap-bash/License +21 -0
  215. data/sub/eac_git/vendor/git-subrepo/ext/test-more-bash/ext/test-tap-bash/Makefile +37 -0
  216. data/sub/eac_git/vendor/git-subrepo/ext/test-more-bash/ext/test-tap-bash/Meta +28 -0
  217. data/sub/eac_git/vendor/git-subrepo/ext/test-more-bash/ext/test-tap-bash/ReadMe.pod +66 -0
  218. data/sub/eac_git/vendor/git-subrepo/ext/test-more-bash/ext/test-tap-bash/doc/test-tap.swim +48 -0
  219. data/sub/eac_git/vendor/git-subrepo/ext/test-more-bash/ext/test-tap-bash/lib/test/tap.bash +153 -0
  220. data/sub/eac_git/vendor/git-subrepo/ext/test-more-bash/ext/test-tap-bash/man/man3/test-tap.3 +119 -0
  221. data/sub/eac_git/vendor/git-subrepo/ext/test-more-bash/ext/test-tap-bash/test/bail_out.t +13 -0
  222. data/sub/eac_git/vendor/git-subrepo/ext/test-more-bash/ext/test-tap-bash/test/done.t +10 -0
  223. data/sub/eac_git/vendor/git-subrepo/ext/test-more-bash/ext/test-tap-bash/test/fail.t +20 -0
  224. data/sub/eac_git/vendor/git-subrepo/ext/test-more-bash/ext/test-tap-bash/test/fail_fast.t +15 -0
  225. data/sub/eac_git/vendor/git-subrepo/ext/test-more-bash/ext/test-tap-bash/test/helper.bash +9 -0
  226. data/sub/eac_git/vendor/git-subrepo/ext/test-more-bash/ext/test-tap-bash/test/pass.t +9 -0
  227. data/sub/eac_git/vendor/git-subrepo/ext/test-more-bash/ext/test-tap-bash/test/plan.t +10 -0
  228. data/sub/eac_git/vendor/git-subrepo/ext/test-more-bash/ext/test-tap-bash/test/skip_all.t +20 -0
  229. data/sub/eac_git/vendor/git-subrepo/ext/test-more-bash/ext/test-tap-bash/test/tap.t +13 -0
  230. data/sub/eac_git/vendor/git-subrepo/ext/test-more-bash/ext/test-tap-bash/test/test/bail.t +14 -0
  231. data/sub/eac_git/vendor/git-subrepo/ext/test-more-bash/ext/test-tap-bash/test/test/fail.t +7 -0
  232. data/sub/eac_git/vendor/git-subrepo/ext/test-more-bash/ext/test-tap-bash/test/test/fail_fast.t +12 -0
  233. data/sub/eac_git/vendor/git-subrepo/ext/test-more-bash/ext/test-tap-bash/test/test/skip-all-init.t +8 -0
  234. data/sub/eac_git/vendor/git-subrepo/ext/test-more-bash/ext/test-tap-bash/test/test/skip-all-plan.t +9 -0
  235. data/sub/eac_git/vendor/git-subrepo/ext/test-more-bash/lib/test/more.bash +95 -0
  236. data/sub/eac_git/vendor/git-subrepo/ext/test-more-bash/man/man3/test-more.3 +173 -0
  237. data/sub/eac_git/vendor/git-subrepo/ext/test-more-bash/test/fail.t +20 -0
  238. data/sub/eac_git/vendor/git-subrepo/ext/test-more-bash/test/more.t +20 -0
  239. data/sub/eac_git/vendor/git-subrepo/ext/test-more-bash/test/pass.t +9 -0
  240. data/sub/eac_git/vendor/git-subrepo/ext/test-more-bash/test/setup +8 -0
  241. data/sub/eac_git/vendor/git-subrepo/ext/test-more-bash/test/skip_all.t +11 -0
  242. data/sub/eac_git/vendor/git-subrepo/ext/test-more-bash/test/test/fail1.t +12 -0
  243. data/sub/eac_git/vendor/git-subrepo/ext/test-more-bash/test/test/skip_all.t +10 -0
  244. data/sub/eac_git/vendor/git-subrepo/lib/git-subrepo +1903 -0
  245. data/sub/eac_git/vendor/git-subrepo/lib/git-subrepo.d/bash+.bash +1 -0
  246. data/sub/eac_git/vendor/git-subrepo/lib/git-subrepo.d/help-functions.bash +339 -0
  247. data/sub/eac_git/vendor/git-subrepo/man/man1/git-subrepo.1 +743 -0
  248. data/sub/eac_git/vendor/git-subrepo/note/0.4.0 +12 -0
  249. data/sub/eac_git/vendor/git-subrepo/note/AllGitCmds +148 -0
  250. data/sub/eac_git/vendor/git-subrepo/note/Cases +32 -0
  251. data/sub/eac_git/vendor/git-subrepo/note/Commands +33 -0
  252. data/sub/eac_git/vendor/git-subrepo/note/Dags +199 -0
  253. data/sub/eac_git/vendor/git-subrepo/note/Gists +7 -0
  254. data/sub/eac_git/vendor/git-subrepo/note/Links +25 -0
  255. data/sub/eac_git/vendor/git-subrepo/note/Plugins +10 -0
  256. data/sub/eac_git/vendor/git-subrepo/note/Spec +39 -0
  257. data/sub/eac_git/vendor/git-subrepo/note/Story1 +57 -0
  258. data/sub/eac_git/vendor/git-subrepo/note/ToDo +55 -0
  259. data/sub/eac_git/vendor/git-subrepo/note/design.swim +137 -0
  260. data/sub/eac_git/vendor/git-subrepo/note/design2.swim +85 -0
  261. data/sub/eac_git/vendor/git-subrepo/note/init-test +38 -0
  262. data/sub/eac_git/vendor/git-subrepo/note/pull-dance.txt +18 -0
  263. data/sub/eac_git/vendor/git-subrepo/note/recreate-rebase-conflict.sh +56 -0
  264. data/sub/eac_git/vendor/git-subrepo/note/subtree-rebase-fail-example/test.bash +29 -0
  265. data/sub/eac_git/vendor/git-subrepo/note/test-subrepo-push.sh +69 -0
  266. data/sub/eac_git/vendor/git-subrepo/note/test.sh +58 -0
  267. data/sub/eac_git/vendor/git-subrepo/pkg/bin/generate-completion.pl +210 -0
  268. data/sub/eac_git/vendor/git-subrepo/pkg/bin/generate-help-functions.pl +89 -0
  269. data/sub/eac_git/vendor/git-subrepo/share/completion.bash +42 -0
  270. data/sub/eac_git/vendor/git-subrepo/share/enable-completion.sh +50 -0
  271. data/sub/eac_git/vendor/git-subrepo/share/git-completion.bash +2738 -0
  272. data/sub/eac_git/vendor/git-subrepo/share/zsh-completion/_git-subrepo +81 -0
  273. data/sub/eac_git/vendor/git-subrepo/test/branch-all.t +41 -0
  274. data/sub/eac_git/vendor/git-subrepo/test/branch-rev-list-one-path.t +43 -0
  275. data/sub/eac_git/vendor/git-subrepo/test/branch-rev-list.t +47 -0
  276. data/sub/eac_git/vendor/git-subrepo/test/branch.t +52 -0
  277. data/sub/eac_git/vendor/git-subrepo/test/clean.t +43 -0
  278. data/sub/eac_git/vendor/git-subrepo/test/clone-annotated-tag.t +45 -0
  279. data/sub/eac_git/vendor/git-subrepo/test/clone.t +107 -0
  280. data/sub/eac_git/vendor/git-subrepo/test/compile.t +19 -0
  281. data/sub/eac_git/vendor/git-subrepo/test/config.t +58 -0
  282. data/sub/eac_git/vendor/git-subrepo/test/encode.t +91 -0
  283. data/sub/eac_git/vendor/git-subrepo/test/error.t +171 -0
  284. data/sub/eac_git/vendor/git-subrepo/test/fetch.t +43 -0
  285. data/sub/eac_git/vendor/git-subrepo/test/gitignore.t +61 -0
  286. data/sub/eac_git/vendor/git-subrepo/test/init.t +64 -0
  287. data/sub/eac_git/vendor/git-subrepo/test/issue29.t +98 -0
  288. data/sub/eac_git/vendor/git-subrepo/test/issue95.t +98 -0
  289. data/sub/eac_git/vendor/git-subrepo/test/issue96.t +96 -0
  290. data/sub/eac_git/vendor/git-subrepo/test/pull-all.t +38 -0
  291. data/sub/eac_git/vendor/git-subrepo/test/pull-merge.t +113 -0
  292. data/sub/eac_git/vendor/git-subrepo/test/pull-message.t +88 -0
  293. data/sub/eac_git/vendor/git-subrepo/test/pull-new-branch.t +58 -0
  294. data/sub/eac_git/vendor/git-subrepo/test/pull-ours.t +90 -0
  295. data/sub/eac_git/vendor/git-subrepo/test/pull-theirs.t +82 -0
  296. data/sub/eac_git/vendor/git-subrepo/test/pull-twice.t +44 -0
  297. data/sub/eac_git/vendor/git-subrepo/test/pull-worktree.t +40 -0
  298. data/sub/eac_git/vendor/git-subrepo/test/pull.t +99 -0
  299. data/sub/eac_git/vendor/git-subrepo/test/push-after-init.t +51 -0
  300. data/sub/eac_git/vendor/git-subrepo/test/push-force.t +56 -0
  301. data/sub/eac_git/vendor/git-subrepo/test/push-new-branch.t +61 -0
  302. data/sub/eac_git/vendor/git-subrepo/test/push-no-changes.t +29 -0
  303. data/sub/eac_git/vendor/git-subrepo/test/push-squash.t +56 -0
  304. data/sub/eac_git/vendor/git-subrepo/test/push.t +176 -0
  305. data/sub/eac_git/vendor/git-subrepo/test/reclone.t +45 -0
  306. data/sub/eac_git/vendor/git-subrepo/test/repo/bar/HEAD +1 -0
  307. data/sub/eac_git/vendor/git-subrepo/test/repo/bar/config +4 -0
  308. data/sub/eac_git/vendor/git-subrepo/test/repo/bar/objects/1f/0c4b264caed0126814a0ede851a1e0b4e16ae6 +0 -0
  309. data/sub/eac_git/vendor/git-subrepo/test/repo/bar/objects/87/46903fdb1b9c2101377880125917c2e05b4d69 +0 -0
  310. data/sub/eac_git/vendor/git-subrepo/test/repo/bar/objects/94/c86ffc745232d89f78c6f895e11e71272518db +0 -0
  311. data/sub/eac_git/vendor/git-subrepo/test/repo/bar/objects/c6/76c57b6576743fa56278527aa60ebd2e202a7c +0 -0
  312. data/sub/eac_git/vendor/git-subrepo/test/repo/bar/objects/e6/9de29bb2d1d6434b8b29ae775ad8c2e48c5391 +0 -0
  313. data/sub/eac_git/vendor/git-subrepo/test/repo/bar/objects/f6/2a8ff3feadf39b0a98f1a86ec6d1eb33858ee9 +0 -0
  314. data/sub/eac_git/vendor/git-subrepo/test/repo/bar/refs/heads/master +1 -0
  315. data/sub/eac_git/vendor/git-subrepo/test/repo/bar/refs/tags/A +1 -0
  316. data/sub/eac_git/vendor/git-subrepo/test/repo/foo/HEAD +1 -0
  317. data/sub/eac_git/vendor/git-subrepo/test/repo/foo/config +4 -0
  318. data/sub/eac_git/vendor/git-subrepo/test/repo/foo/objects/a0/f4cdaaf533a936296cdebbed8206c3b9ededa8 +0 -0
  319. data/sub/eac_git/vendor/git-subrepo/test/repo/foo/objects/e2/1291a1ad392a9d4c51dd9586804f1467b28afd +0 -0
  320. data/sub/eac_git/vendor/git-subrepo/test/repo/foo/objects/e6/9de29bb2d1d6434b8b29ae775ad8c2e48c5391 +0 -0
  321. data/sub/eac_git/vendor/git-subrepo/test/repo/foo/refs/heads/master +1 -0
  322. data/sub/eac_git/vendor/git-subrepo/test/repo/init/HEAD +1 -0
  323. data/sub/eac_git/vendor/git-subrepo/test/repo/init/config +5 -0
  324. data/sub/eac_git/vendor/git-subrepo/test/repo/init/objects/11/523f5dcf03b4c89b592dc8a3d0308f68da2386 +0 -0
  325. data/sub/eac_git/vendor/git-subrepo/test/repo/init/objects/14/2addf8ec5f37334e837440122c62f2c68a29ad +0 -0
  326. data/sub/eac_git/vendor/git-subrepo/test/repo/init/objects/32/5180321750a21cd7a4e7ecda319e557a4f6a09 +2 -0
  327. data/sub/eac_git/vendor/git-subrepo/test/repo/init/objects/3d/918c6901c02f43af5d31779dd5e1f9166aeb36 +0 -0
  328. data/sub/eac_git/vendor/git-subrepo/test/repo/init/objects/3e/4cb596066dce63ba4d047abddb677389b65e19 +0 -0
  329. data/sub/eac_git/vendor/git-subrepo/test/repo/init/objects/4b/6e53022e7a04f07887697e4f3d7c377fd9822b +0 -0
  330. data/sub/eac_git/vendor/git-subrepo/test/repo/init/objects/58/931fc1bd559b59c41ea738fc7ad04f9ad01bd3 +0 -0
  331. data/sub/eac_git/vendor/git-subrepo/test/repo/init/objects/5e/c0c28e1b806f25efdca18fcf7a74b49c3755bd +0 -0
  332. data/sub/eac_git/vendor/git-subrepo/test/repo/init/objects/75/fa6584e748f57eff06eebdc55e9ac21d4fcbf2 +1 -0
  333. data/sub/eac_git/vendor/git-subrepo/test/repo/init/objects/80/2d5edbd5e1cb7fca82b5bd38e7c8a0a496fb20 +0 -0
  334. data/sub/eac_git/vendor/git-subrepo/test/repo/init/objects/94/7b3d714c38791e95ad6f928b48c98bb8708acd +0 -0
  335. data/sub/eac_git/vendor/git-subrepo/test/repo/init/objects/95/e1f2df3f4d5f3d7a60588c25a7ca8a913d3c2a +1 -0
  336. data/sub/eac_git/vendor/git-subrepo/test/repo/init/objects/b1/5f4a7666baf40d949548ead946a3370e273479 +0 -0
  337. data/sub/eac_git/vendor/git-subrepo/test/repo/init/objects/c3/ee8978c4c5d84c3b7d00ba8e5906933d027882 +0 -0
  338. data/sub/eac_git/vendor/git-subrepo/test/repo/init/objects/c8/b0bffbc405ef3fad7354ff833fbec36d67ddfa +3 -0
  339. data/sub/eac_git/vendor/git-subrepo/test/repo/init/objects/dd/8bdb934ec848137f011fe423b185505c343626 +2 -0
  340. data/sub/eac_git/vendor/git-subrepo/test/repo/init/objects/e2/9be58c767cfeb27235c995d293a7d71aac0135 +2 -0
  341. data/sub/eac_git/vendor/git-subrepo/test/repo/init/objects/ee/1224401fc6aac595145fa727dcf6706ac8aec1 +1 -0
  342. data/sub/eac_git/vendor/git-subrepo/test/repo/init/objects/f1/cc1a657b2e805c400f5dcaaa76bd29c6178b1b +0 -0
  343. data/sub/eac_git/vendor/git-subrepo/test/repo/init/refs/heads/master +1 -0
  344. data/sub/eac_git/vendor/git-subrepo/test/setup +205 -0
  345. data/sub/eac_git/vendor/git-subrepo/test/status.t +68 -0
  346. data/sub/eac_git/vendor/git-subrepo/test/submodule.t +45 -0
  347. metadata +352 -40
  348. data/sub/avm-eac_php_base0/avm-eac_php_base0.gemspec +0 -21
  349. data/sub/avm-eac_php_base0/lib/avm/eac_php_base0/executables.rb +0 -22
  350. data/sub/avm-eac_php_base0/lib/avm/eac_php_base0/file_formats/base.rb +0 -20
  351. data/sub/avm-eac_php_base0/lib/avm/eac_php_base0/instances/base.rb +0 -13
  352. data/sub/avm-eac_php_base0/lib/avm/eac_php_base0/source_generators/base.rb +0 -28
  353. data/sub/avm-eac_php_base0/lib/avm/eac_php_base0/sources/base.rb +0 -17
  354. data/sub/avm-eac_php_base0/spec/lib/avm/eac_php_base0/file_formats/base_spec.rb +0 -7
  355. data/sub/avm-eac_php_base0/spec/lib/avm/eac_php_base0/file_formats/base_spec_files/php_code.php.source +0 -10
  356. data/sub/avm-eac_php_base0/spec/lib/avm/eac_php_base0/file_formats/base_spec_files/php_code.php.target +0 -10
  357. data/sub/avm-eac_php_base0/spec/lib/avm/eac_php_base0/file_formats/base_spec_files/php_code2.php.source +0 -4
  358. data/sub/avm-eac_php_base0/spec/lib/avm/eac_php_base0/file_formats/base_spec_files/php_code2.php.target +0 -3
  359. data/sub/avm-eac_php_base0/spec/lib/avm/eac_php_base0/file_formats/base_spec_files/php_html_code.php.source +0 -64
  360. data/sub/avm-eac_php_base0/spec/lib/avm/eac_php_base0/file_formats/base_spec_files/php_html_code.php.target +0 -64
  361. data/sub/avm-eac_php_base0/spec/lib/avm/eac_php_base0/file_formats/base_spec_files/php_iso88591_code.php.source +0 -4
  362. data/sub/avm-eac_php_base0/spec/lib/avm/eac_php_base0/file_formats/base_spec_files/php_iso88591_code.php.target +0 -3
  363. data/sub/avm-eac_php_base0/spec/lib/avm/eac_php_base0/source_generators/base_spec.rb +0 -8
  364. data/sub/avm-eac_php_base0/spec/lib/avm/eac_php_base0/source_generators/base_spec_files/no_options/index.php +0 -0
  365. data/sub/avm-eac_php_base0/spec/lib/avm/eac_php_base0/sources/base_spec.rb +0 -7
  366. data/sub/avm-eac_php_base0/template/avm/eac_php_base0/source_generators/base/index.php +0 -0
  367. /data/sub/{avm-eac_php_base0 → avm-git}/Gemfile +0 -0
  368. /data/sub/{avm-eac_php_base0 → avm-git}/spec/rubocop_spec.rb +0 -0
  369. /data/sub/{avm-eac_php_base0 → avm-git}/spec/spec_helper.rb +0 -0
@@ -0,0 +1,509 @@
1
+ =pod
2
+
3
+ =for comment
4
+ DO NOT EDIT. This Pod was generated by Swim v0.1.48.
5
+ See http://github.com/ingydotnet/swim-pm#readme
6
+
7
+ =encoding utf8
8
+
9
+ =head1 Introducing Git Subrepos
10
+
11
+ There is a new git command called C<subrepo> that is meant to be a solid
12
+ alternative to the C<submodule> and C<subtree> commands. All 3 of these
13
+ commands allow you to include external repositories (pinned to specific
14
+ commits) in your main repository. This is an often needed feature for project
15
+ development under a source control system like Git. Unfortunately, the
16
+ C<submodule> command is severely lacking, and the C<subtree> command (an
17
+ attempt to make things better) is also very flawed. Fortunately, the
18
+ C<subrepo> command is here to save the day.
19
+
20
+ This article will discuss how the previous commands work, and where they go
21
+ wrong, while explaining how the new C<subrepo> command fixes the issues.
22
+
23
+ It should be noted that there are 3 distinct roles (ways people use repos)
24
+ involved in discussing this topic:
25
+
26
+ =over
27
+
28
+ =item * B<owner> — The primary author and repo owner
29
+
30
+ =item * B<collaborators> — Other developers who contribute to the repo
31
+
32
+ =item * B<users> — People who simply use the repo software
33
+
34
+ =back
35
+
36
+ =head2 Introducing C<subrepo>
37
+
38
+ While the main point is to show how subrepo addresses the shortcomings
39
+ of submodule and subtree, I'll start by giving a quick intro to the
40
+ subrepo command.
41
+
42
+ Let's say that you have a project repo called 'freebird' and you want to have
43
+ it include 2 other external repos, 'lynyrd' and 'skynyrd'. You would do the
44
+ following:
45
+
46
+ git clone git@github.com/you/freebird
47
+ cd freebird
48
+ git subrepo clone git@github.com/you/lynyrd ext/lynyrd
49
+ git subrepo clone git@github.com/you/skynyrd ext/skynyrd --branch=1975
50
+
51
+ What these commands do (at a high level) should be obvious. They "clone" (add)
52
+ the repos content into the subdirectories you told them to. The details of
53
+ what is happening to your repo will be discussed later, but adding new
54
+ subrepos is easy. If you need to update the subrepos later:
55
+
56
+ git subrepo pull ext/lynyrd
57
+ git subrepo pull ext/skynyrd --branch=1976
58
+
59
+ The lynyrd repo is tracking the upstream master branch, and you've changed the
60
+ skynyrd subrepo to the 1976 branch. Since these subrepos are owned by 'you',
61
+ you might want to change them in the context of your freebird repo. When
62
+ things are working, you can push the subrepo changes back:
63
+
64
+ git subrepo push ext/lynyrd
65
+ git subrepo push ext/skynyrd
66
+
67
+ Looks simple right? It's supposed to be. The intent of C<subrepo> is to do the
68
+ right things, and to not cause problems.
69
+
70
+ Of course there's more to it under the hood, and that's what the rest of this
71
+ article is about.
72
+
73
+ =head2 Git Submodules
74
+
75
+ Submodules tend to receive a lot of bad press. Here's some of it:
76
+
77
+ =over
78
+
79
+ =item * L<http://ayende.com/blog/4746/the-problem-with-git-submodules>
80
+
81
+ =item * L<http://somethingsinistral.net/blog/git-submodules-are-probably-not-the-answer/>
82
+
83
+ =item * L<http://codingkilledthecat.wordpress.com/2012/04/28/why-your-company-shouldnt-use-git-submodules/>
84
+
85
+ =back
86
+
87
+ A quick recap of some of the good and bad things about submodules:
88
+
89
+ Good:
90
+
91
+ =over
92
+
93
+ =item * Use an external repo in a dedicated subdir of your project.
94
+
95
+ =item * Pin the external repo to a specific commit.
96
+
97
+ =item * The C<git-submodule> command is a core part of the Git project.
98
+
99
+ =back
100
+
101
+ Bad:
102
+
103
+ =over
104
+
105
+ =item * Users have to know a repo has submodules.
106
+
107
+ =item * Users have to get the subrepos manually.
108
+
109
+ =item * Pulling a repo with submodules won't pull in the new submodule changes.
110
+
111
+ =item * A submodule will break if the referenced repo goes away.
112
+
113
+ =item * A submodule will break if a forced push removes the referenced commit.
114
+
115
+ =item * Can't use different submodules/commits per main project branch.
116
+
117
+ =item * Can't "try out" a submodule on alternate branch.
118
+
119
+ =item * Main repo can be pushed upstream pointing to unpushed submod commits.
120
+
121
+ =item * Command capability differs across Git versions.
122
+
123
+ =item * Often need to change remote url, to push submodule changes upstream.
124
+
125
+ =item * Removing or renaming a submodule requires many steps.
126
+
127
+ =back
128
+
129
+ Internally, submodules are a real mess. They give the strong impression of
130
+ being bolted on, well after Git was designed. Some commands are aware of the
131
+ existence of submodules (although usually half-heartedly), and many commands
132
+ are oblivious. For instance the git-clone command has a C<--recursive> option
133
+ to clone all subrepos, but it's not a default, so you still need to be aware
134
+ of the need. The git-checkout command does nothing with the submodules, even
135
+ if they are intended to differ across branches.
136
+
137
+ Let's talk a bit about how submodules are implemented in Git. Information
138
+ about them is stored in 3 different places (in the top level repo directory):
139
+
140
+ =over
141
+
142
+ =item * C<.gitmodules>
143
+
144
+ =item * C<.git/config>
145
+
146
+ =item * C<.git/modules> — The submodule repo's meta data (refs/objects)
147
+
148
+ =back
149
+
150
+ So some of the information lives in the repo history (.gitmodules), but other
151
+ info (.git/) is only known to the local repo.
152
+
153
+ In addition, the submodule introduces a new low level concept, to the
154
+ commitI<tree>blob graph. Normally a git tree object points to blob (file)
155
+ objects and more tree (directory) objects. Submodules have tree objects point
156
+ to B<commit> objects. While this seems clever and somewhat reasonable, it also
157
+ means that every other git command (which was built on the super clean Git
158
+ data model) has to be aware of this new possibility (and deal with it
159
+ appropriately).
160
+
161
+ The point is that, while submodules are a real need, and a lot of work has
162
+ gone into making them work decently, they are essentially a kludge to the Git
163
+ model, and it is quite understandable why they haven't worked out as well as
164
+ people would expect.
165
+
166
+ NOTE: Submodules I<are> getting better with each release of Git, but it's
167
+ still an endless catch up game.
168
+
169
+ =head2 Git Subtrees
170
+
171
+ One day, someone decided to think different. Instead of pointing to external
172
+ repos, why not just include them into the main repo (but also allow them to be
173
+ pulled and pushed separately as needed)?
174
+
175
+ At first this may feel like a wasteful approach. Why keep other repos
176
+ physically inside your main one? But if you think about it abstractly, what's
177
+ the difference? You want your users and collaborators to have all this code
178
+ because your project needs it. So why worry about how it happens? In the end,
179
+ the choice is yours, but I've grown very comfortable with this concept and
180
+ I'll try to justify it well. I should note that the first paragraph of the
181
+ C<submodule> doc suggests considering this alternative.
182
+
183
+ The big win here is that you can do this using the existing git model. Nothing
184
+ new is added. You are just adding commits to a history. You can do it
185
+ different on every branch. You can merge branches sensibly.
186
+
187
+ The git-subtree command seems to have been inspired by Git's subtree merge
188
+ strategy, which it uses internally, and possibly got its name from. A subtree
189
+ merge allows you to take a completely separate Git history and make it be a
190
+ subdirectory of your repo.
191
+
192
+ Adding a subtree was the easy part. All that needed to be done after that was
193
+ to figure out a way to pull upstream changes and push local ones back
194
+ upstream. And that's what the C<git-subtree> command does.
195
+
196
+ So what's the problem with git-subtree then?
197
+
198
+ Well unfortunately, it drops a few balls. The main problems come down to an
199
+ overly complicated commandline UX, poor collaborator awareness, and a fragile
200
+ and messy implementation.
201
+
202
+ Good:
203
+
204
+ =over
205
+
206
+ =item * Use an external repo in a dedicated subdir of your project.
207
+
208
+ =item * Pin the external repo to a specific commit.
209
+
210
+ =item * Users get everything with a normal clone command.
211
+
212
+ =item * Users don't need to know that subtrees are involved.
213
+
214
+ =item * Can use different submodules/commits per main project branch.
215
+
216
+ =item * Users don't need the subtree command. Only owners and collaborators.
217
+
218
+ =back
219
+
220
+ Bad:
221
+
222
+ =over
223
+
224
+ =item * The remote url and branch info is not saved (except in the history).
225
+
226
+ =item * Owners and collaborators have to enter the remote for every command.
227
+
228
+ =item * Collaborators aren't made aware that subtrees are involved.
229
+
230
+ =item * Pulled history is not squashed by default.
231
+
232
+ =item * Creates a messy historical view. (See below)
233
+
234
+ =item * Bash code is complicated.
235
+
236
+ =item * Only one test file. Currently is failing.
237
+
238
+ =back
239
+
240
+ As you can see, subtree makes quite a few things better, but after trying it
241
+ for a while, the experience was more annoying than submodules. For example,
242
+ consider this usage:
243
+
244
+ $ git subtree add --squash --prefix=foo git@github.com:my/thing mybranch
245
+ # weeks go by…
246
+ $ git subtree pull --squash --prefix=foo git@github.com:my/thing mybranch
247
+ # time to push local subtree changes back upstream
248
+ $ git subtree push --prefix=foo git@github.com:my/thing mybranch
249
+
250
+ The first thing you notice is the overly verbose syntax. It's justified in the
251
+ first command, but in the other 2 commands I really don't want to have to
252
+ remember what the remote and branch are that I'm using.
253
+
254
+ Moreover, my collaborators have no idea that subtrees are involved, let alone
255
+ where they came from.
256
+
257
+ Consider the equivalent subrepo commands:
258
+
259
+ $ git subrepo clone git@github.com:my/thing foo -b mybranch
260
+ $ git subrepo pull foo
261
+ $ git subrepo push foo
262
+
263
+ Collaborators see a file called 'foo/.gitrepo', and know that the subdir is a
264
+ subrepo. The file contains all the information needed by future commands
265
+ applied to that subrepo.
266
+
267
+ =head2 Git Subrepos
268
+
269
+ Now is a good time to dive into the techinical aspects of the C<subrepo>
270
+ command, but first let me explain how it came about.
271
+
272
+ As you may have surmised by now, I am the author of git-subrepo. I'd used
273
+ submodules on and off for years, and when I became aware of subtree I gave it
274
+ a try, but I quickly realized its problems. I decided maybe it could be
275
+ improved. I decided to write down my expected commandline usage and my ideals
276
+ of what it would and would not do. Then I set off to implement it. It's been a
277
+ long road, but what I ended up with was even better than what I wanted from
278
+ the start.
279
+
280
+ Let's review the Goods and Bads:
281
+
282
+ Good:
283
+
284
+ =over
285
+
286
+ =item * Use an external repo in a dedicated subdir of your project.
287
+
288
+ =item * Pin the external repo to a specific commit.
289
+
290
+ =item * Users get everything with a normal clone command.
291
+
292
+ =item * Users don't need to know that subrepos are involved.
293
+
294
+ =item * Can use different submodules/commits per main project branch.
295
+
296
+ =item * Meta info is kept in an obvious place.
297
+
298
+ =item * Everyone knows when a subdir is a subrepo.
299
+
300
+ =item * Commandline UX is minimal and intuitive.
301
+
302
+ =item * Pulled history is always squashed out locally.
303
+
304
+ =item * Pushed history is kept intact.
305
+
306
+ =item * Creates a clean historical view. (See below)
307
+
308
+ =item * Bash code is very simple and easy to follow.
309
+
310
+ =item * Comprehensive test suite. Currently passing on travis:
311
+
312
+ =back
313
+
314
+ =for html
315
+ <a href="https://travis-ci.org/ingydotnet/git-subrepo"><img src="https://travis-ci.org/ingydotnet/git-subrepo.png" alt="git-subrepo"></a>
316
+
317
+ Bad:
318
+
319
+ =over
320
+
321
+ =item * --Subrepo is very new.-- (no longer true)
322
+
323
+ =item * --Not well tested in the wild.-- (no longer true)
324
+
325
+ =back
326
+
327
+ This review may seem somewhat slanted, but I honestly am not aware of any
328
+ "bad" points that I'm not disclosing. That said, I am sure time will reveal
329
+ bugs and shortcomings. Those can usually be fixed. Hopefully the B<model> is
330
+ correct, because that's harder to fix down the road.
331
+
332
+ OK. So how does it all work?
333
+
334
+ There are 3 main commands: cloneI<pull>push. Let's start with the clone
335
+ command. This is the easiest part. You give it a remote url, possibly a new
336
+ subdir to put it, and possibly a remote branch to use. I say possibly, because
337
+ the command can guess the subdir name (just like the git-clone command does),
338
+ and the branch can be the upstream default branch.
339
+
340
+ Given this we do the following steps internally:
341
+
342
+ =over
343
+
344
+ =item * Fetch the remote content (for a specific refspec)
345
+
346
+ =item * Read the remote head tree into the index
347
+
348
+ =item * Checkout the index into the new subdir
349
+
350
+ =item * Create a new subrepo commit object for the subdir content
351
+
352
+ =item * Add a state file called .gitrepo to the new subrepo/subdir
353
+
354
+ =item * Amend the merge commit with this new file
355
+
356
+ =back
357
+
358
+ This process adds something like this to the top of your history:
359
+
360
+ * 9b6ddc9 git subrepo clone git@github.com:you/foo.git foo/
361
+ * 37c61a5 Previous head commit of your repo
362
+
363
+ The entire history has been squashed down into one commit, and placed on
364
+ top of your history. This is important as it keeps your history as clean
365
+ as possible. You don't need to have the subrepo history in your main
366
+ project, since it is immutably available elsewhere, and you have a pointer
367
+ to that place.
368
+
369
+ The new foo/.gitrepo file looks like this:
370
+
371
+ [subrepo]
372
+ remote = git@github.com:you/foo.git
373
+ branch = master
374
+ commit = 14c96c6931b41257b2d42b2edc67ddc659325823
375
+ parent = 37c61a5a234f5dd6f5c2aec037509f50d3a79b8f
376
+ cmdver = 0.1.0
377
+
378
+ It contains all the info needed now and later. Note that the repo url is the
379
+ generally pushable form, rather than the publically readable (L<https://…)>
380
+ form. This is the best practice. Users of your repo don't need access to this
381
+ url, because the content is already in your repo. Only you and your
382
+ collaborators need this url to pull/push in the future.
383
+
384
+ The next command is the pull command. Normally you just give it the subrepo's
385
+ subdir path (although you can change the branch with -b), and it will get the
386
+ other info from the subdir/.gitrepo file.
387
+
388
+ The pull command does these steps:
389
+
390
+ =over
391
+
392
+ =item * Fetch the upstream content
393
+
394
+ =item * Check if anything needs pulling
395
+
396
+ =item * Create a branch of local subrepo commits since last pull
397
+
398
+ =item * Rebase this branch onto the upstream commits
399
+
400
+ =item * Commit the HEAD of the rebased content
401
+
402
+ =item * Update/amend the .gitrepo file
403
+
404
+ =back
405
+
406
+ =head3 Clean History
407
+
408
+ I've talked a bit about clean history but let me show you a comparison between
409
+ subrepo and subtree. Let's run this command sequence using both methods. Note
410
+ the differences between I<both> the command syntax required, and the branch
411
+ history produced.
412
+
413
+ Subrepo first:
414
+
415
+ $ git subrepo clone git@github.com:user/abc
416
+ $ git subrepo clone git@github.com:user/def xyz
417
+ $ git subrepo pull abc
418
+ $ git subrepo pull xyz
419
+
420
+ The resulting history is:
421
+
422
+ * b1f60cc subrepo pull xyz
423
+ * 4fb0276 subrepo pull abc
424
+ * bcef2a0 subrepo clone git@github.com:user/def xyz
425
+ * bebf0db subrepo clone git@github.com:user/abc
426
+ * 64eeaa6 (origin/master, origin/HEAD) O HAI FREND
427
+
428
+ Compare that to B<subtree>. This:
429
+
430
+ $ git subtree add abc git@github.com:user/abc master
431
+ $ git subtree add xyz git@github.com:user/def master
432
+ $ git subtree pull abc git@github.com:user/abc master
433
+ $ git subtree pull xyz git@github.com:user/def master
434
+
435
+ Produces this:
436
+
437
+ * 739e45a (HEAD, master) Merge commit '5f563469d886d53e19cb908b3a64e4229f88a2d1'
438
+ |\
439
+ | * 5f56346 Squashed 'xyz/' changes from 08c7421..365409f
440
+ * | 641f5e5 Merge commit '8d88e90ce5f653ed2e7608a71b8693a2174ea62a'
441
+ |\ \
442
+ | * | 8d88e90 Squashed 'abc/' changes from 08c7421..365409f
443
+ * | | 1703ed2 Merge commit '0e091b672c4bbbbf6bc4f6694c475d127ffa21eb' as 'xyz'
444
+ |\ \ \
445
+ | | |/
446
+ | |/|
447
+ | * | 0e091b6 Squashed 'xyz/' content from commit 08c7421
448
+ | /
449
+ * | 07b77e7 Merge commit 'cd2b30a0229d931979ed4436b995875ec563faea' as 'abc'
450
+ |\ \
451
+ | |/
452
+ | * cd2b30a Squashed 'abc/' content from commit 08c7421
453
+ * 64eeaa6 (origin/master, origin/HEAD) O HAI FREND
454
+
455
+ This was from a minimal case. Subtree history (when viewed this way at least)
456
+ gets unreasonably ugly fast. Subrepo history, by contrast, always looks as
457
+ clean as shown.
458
+
459
+ The final command, push, bascially just does the pull/rebase dance above
460
+ described, and pushes the resulting history back. It does not squash the
461
+ commits made locally, because it assumed that when you changed the local
462
+ subrepo, you made messages that were intended to eventually be published
463
+ back upstream.
464
+
465
+ =head2 Conflict Resolution
466
+
467
+ The commands described above can also be done "by hand". If something fails
468
+ during a pull or push (generally in the rebasing) then the command will tell
469
+ you what to do to finish up.
470
+
471
+ You might choose to do everything by hand, and do your own merging strategies.
472
+ This is perfectly reasonable. The C<subrepo> command offers a few other helper
473
+ commands to help you get the job done:
474
+
475
+ =over
476
+
477
+ =item * C<fetch> - Fetch the upstream and create a C<< subrepo/remote/<subdir> >> ref.
478
+
479
+ =item * C<branch> - Create a branch of local subdir commits since the last pull, called C<< subrepo/<subdir> >>.
480
+
481
+ =item * C<commit> - Commit a merged branch's HEAD back into your repo.
482
+
483
+ =item * C<status> - Show lots of useful info about the current state of the subrepos.
484
+
485
+ =item * C<clean> - Remove branches, ref and remotes created by subrepo commands.
486
+
487
+ =item * C<help> - Read the complete documentation!
488
+
489
+ =back
490
+
491
+ =head2 Conclusion
492
+
493
+ Hopefully by now, you see that submodules are a painful choice with a dubious
494
+ future, and that subtree, while a solid idea has many usage issues.
495
+
496
+ Give C<subrepo> a try. It's painless, easily revertable and just might be what
497
+ the doctor ordered.
498
+
499
+ =head2 Reference Links
500
+
501
+ =over
502
+
503
+ =item * L<http://longair.net/blog/2010/06/02/git-submodules-explained/>
504
+
505
+ =item * L<http://blogs.atlassian.com/2013/05/alternatives-to-git-submodule-git-subtree/>
506
+
507
+ =back
508
+
509
+ =cut
@@ -0,0 +1,21 @@
1
+ The MIT License (MIT)
2
+
3
+ Copyright (c) 2013-2020 Ingy döt Net
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in
13
+ all copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
21
+ THE SOFTWARE.
@@ -0,0 +1,82 @@
1
+ # Make sure we have 'git' and it works OK:
2
+ ifeq ($(shell which git),)
3
+ $(error 'git' is not installed on this system)
4
+ endif
5
+
6
+ # Set variables:
7
+ NAME := git-subrepo
8
+ LIB := lib/$(NAME)
9
+ DOC := doc/$(NAME).swim
10
+ MAN1 := man/man1
11
+ EXT := $(LIB).d
12
+ EXTS := $(shell find $(EXT) -type f) \
13
+ $(shell find $(EXT) -type l)
14
+ SHARE = share
15
+
16
+ # Install variables:
17
+ PREFIX ?= /usr/local
18
+ INSTALL_LIB ?= $(DESTDIR)$(shell git --exec-path)
19
+ INSTALL_EXT ?= $(INSTALL_LIB)/$(NAME).d
20
+ INSTALL_MAN1 ?= $(DESTDIR)$(PREFIX)/share/man/man1
21
+
22
+ # Basic targets:
23
+ default: help
24
+
25
+ help:
26
+ @echo 'Makefile rules:'
27
+ @echo ''
28
+ @echo 'test Run all tests'
29
+ @echo 'install Install $(NAME)'
30
+ @echo 'uninstall Uninstall $(NAME)'
31
+ @echo 'env Show environment variables to set'
32
+
33
+ .PHONY: test
34
+ test:
35
+ prove $(PROVEOPT:%=% )test/
36
+
37
+ # Install support:
38
+ install:
39
+ install -d -m 0755 $(INSTALL_LIB)/
40
+ install -C -m 0755 $(LIB) $(INSTALL_LIB)/
41
+ install -d -m 0755 $(INSTALL_EXT)/
42
+ install -C -m 0755 $(EXTS) $(INSTALL_EXT)/
43
+ install -d -m 0755 $(INSTALL_MAN1)/
44
+ install -C -m 0644 $(MAN1)/$(NAME).1 $(INSTALL_MAN1)/
45
+
46
+ # Uninstall support:
47
+ uninstall:
48
+ rm -f $(INSTALL_LIB)/$(NAME)
49
+ rm -fr $(INSTALL_EXT)
50
+ rm -f $(INSTALL_MAN1)/$(NAME).1
51
+
52
+ env:
53
+ @echo "export PATH=\"$$PWD/lib:\$$PATH\""
54
+ @echo "export MANPATH=\"$$PWD/man:\$$MANPATH\""
55
+
56
+ # Doc rules:
57
+ .PHONY: doc
58
+ update: doc compgen
59
+
60
+ force:
61
+
62
+ doc: ReadMe.pod Intro.pod $(MAN1)/$(NAME).1
63
+ perl pkg/bin/generate-help-functions.pl $(DOC) > \
64
+ $(EXT)/help-functions.bash
65
+
66
+ ReadMe.pod: $(DOC) force
67
+ swim --to=pod --wrap --complete $< > $@
68
+
69
+ Intro.pod: doc/intro-to-subrepo.swim force
70
+ swim --to=pod --wrap --complete $< > $@
71
+
72
+ $(MAN1)/%.1: doc/%.swim Makefile force
73
+ swim --to=man --wrap $< > $@
74
+
75
+ compgen: force
76
+ perl pkg/bin/generate-completion.pl bash $(DOC) $(LIB) > \
77
+ $(SHARE)/completion.bash
78
+ perl pkg/bin/generate-completion.pl zsh $(DOC) $(LIB) > \
79
+ $(SHARE)/zsh-completion/_git-subrepo
80
+
81
+ clean purge:
82
+ rm -fr tmp
@@ -0,0 +1,28 @@
1
+ =meta: 0.0.2
2
+
3
+ name: git-subrepo
4
+ version: 0.4.1
5
+ abstract: Git Submodule Alternative
6
+ homepage: https://github.com/ingydotnet/git-subrepo#readme
7
+ license: MIT
8
+ copyright: 2013-2020
9
+
10
+ author:
11
+ name: Ingy döt Net
12
+ email: ingy@ingy.net
13
+ github: ingydotnet
14
+ twitter: ingydotnet
15
+ freenode: ingy
16
+ homepage: http://ingy.net
17
+
18
+ requires:
19
+ bash: 4.0.0
20
+ git: 2.7.0
21
+ test:
22
+ cmd: make test
23
+ install: make install
24
+
25
+ devel:
26
+ git: git@github.org:ingydotnet/git-subrepo.git
27
+ irc: irc.freenode.net/gitcommands
28
+ bug: https://github.com/ingydotnet/git-subrepo/issues/