chef 12.10.24-universal-mingw32 → 12.11.18-universal-mingw32

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 (525) hide show
  1. checksums.yaml +4 -4
  2. data/CONTRIBUTING.md +3 -38
  3. data/Gemfile +6 -11
  4. data/LICENSE +201 -201
  5. data/README.md +11 -1
  6. data/VERSION +1 -1
  7. data/acceptance/.bundle/config +2 -0
  8. data/acceptance/Gemfile.lock +27 -26
  9. data/acceptance/basics/.kitchen/logs/chef-current-install-ubuntu-1404.log +2 -0
  10. data/acceptance/basics/.kitchen/logs/kitchen.log +3 -0
  11. data/acceptance/data-collector/.acceptance/acceptance-cookbook/.gitignore +2 -0
  12. data/acceptance/data-collector/.acceptance/acceptance-cookbook/metadata.rb +3 -0
  13. data/acceptance/data-collector/.acceptance/acceptance-cookbook/recipes/destroy.rb +2 -0
  14. data/acceptance/data-collector/.acceptance/acceptance-cookbook/recipes/provision.rb +2 -0
  15. data/acceptance/data-collector/.acceptance/acceptance-cookbook/recipes/verify.rb +2 -0
  16. data/acceptance/data-collector/.acceptance/data-collector-test/.gitignore +16 -0
  17. data/acceptance/data-collector/.acceptance/data-collector-test/Berksfile +3 -0
  18. data/acceptance/data-collector/.acceptance/data-collector-test/files/default/api.rb +85 -0
  19. data/acceptance/data-collector/.acceptance/data-collector-test/files/default/apigemfile +3 -0
  20. data/acceptance/data-collector/.acceptance/data-collector-test/files/default/client-rb-both-mode.rb +4 -0
  21. data/acceptance/data-collector/.acceptance/data-collector-test/files/default/client-rb-client-mode.rb +4 -0
  22. data/acceptance/data-collector/.acceptance/data-collector-test/files/default/client-rb-no-endpoint.rb +2 -0
  23. data/acceptance/data-collector/.acceptance/data-collector-test/files/default/client-rb-solo-mode.rb +4 -0
  24. data/acceptance/data-collector/.acceptance/data-collector-test/files/default/config.ru +2 -0
  25. data/acceptance/data-collector/.acceptance/data-collector-test/metadata.rb +7 -0
  26. data/acceptance/data-collector/.acceptance/data-collector-test/recipes/default.rb +38 -0
  27. data/acceptance/data-collector/.kitchen.yml +9 -0
  28. data/acceptance/data-collector/Berksfile +3 -0
  29. data/acceptance/data-collector/Berksfile.lock +6 -0
  30. data/acceptance/data-collector/test/integration/default/serverspec/default_spec.rb +251 -0
  31. data/acceptance/fips/.kitchen/logs/fips-integration-centos-6.log +3 -0
  32. data/acceptance/fips/.kitchen/logs/fips-integration-windows-2012r2.log +3 -0
  33. data/acceptance/fips/.kitchen/logs/fips-unit-functional-centos-6.log +3 -0
  34. data/acceptance/fips/.kitchen/logs/fips-unit-functional-windows-2012r2.log +3 -0
  35. data/acceptance/fips/.kitchen/logs/kitchen.log +6 -0
  36. data/acceptance/fips/test/integration/fips-integration/serverspec/fips-integration_spec.rb +2 -1
  37. data/acceptance/top-cookbooks/.kitchen.docker.yml +1 -4
  38. data/acceptance/trivial/.kitchen/logs/chef-current-install-windows-2012r2.log +2 -0
  39. data/acceptance/trivial/.kitchen/logs/kitchen.log +3 -0
  40. data/acceptance/windows-service/.kitchen/logs/chef-windows-service-windows-2012r2.log +2 -0
  41. data/acceptance/windows-service/.kitchen/logs/kitchen.log +3 -0
  42. data/bin/chef-apply +0 -0
  43. data/bin/chef-client +0 -0
  44. data/bin/chef-service-manager +0 -0
  45. data/bin/chef-shell +0 -0
  46. data/bin/chef-solo +0 -0
  47. data/bin/chef-windows-service +0 -0
  48. data/bin/knife +0 -0
  49. data/chef.gemspec +1 -0
  50. data/distro/common/html/_sources/ctl_chef_client.txt +35 -35
  51. data/distro/common/html/_sources/ctl_chef_server.txt +341 -341
  52. data/distro/common/html/_sources/ctl_chef_shell.txt +15 -15
  53. data/distro/common/html/_sources/ctl_chef_solo.txt +25 -25
  54. data/distro/common/html/_sources/index.txt +135 -135
  55. data/distro/common/html/_sources/knife.txt +74 -74
  56. data/distro/common/html/_sources/knife_bootstrap.txt +56 -56
  57. data/distro/common/html/_sources/knife_client.txt +150 -150
  58. data/distro/common/html/_sources/knife_common_options.txt +6 -6
  59. data/distro/common/html/_sources/knife_configure.txt +29 -29
  60. data/distro/common/html/_sources/knife_cookbook.txt +236 -236
  61. data/distro/common/html/_sources/knife_cookbook_site.txt +157 -157
  62. data/distro/common/html/_sources/knife_data_bag.txt +159 -159
  63. data/distro/common/html/_sources/knife_delete.txt +26 -26
  64. data/distro/common/html/_sources/knife_deps.txt +61 -61
  65. data/distro/common/html/_sources/knife_diff.txt +34 -34
  66. data/distro/common/html/_sources/knife_download.txt +44 -44
  67. data/distro/common/html/_sources/knife_edit.txt +26 -26
  68. data/distro/common/html/_sources/knife_environment.txt +158 -158
  69. data/distro/common/html/_sources/knife_exec.txt +47 -47
  70. data/distro/common/html/_sources/knife_index_rebuild.txt +20 -20
  71. data/distro/common/html/_sources/knife_list.txt +33 -33
  72. data/distro/common/html/_sources/knife_node.txt +250 -250
  73. data/distro/common/html/_sources/knife_raw.txt +35 -35
  74. data/distro/common/html/_sources/knife_recipe_list.txt +23 -23
  75. data/distro/common/html/_sources/knife_role.txt +157 -157
  76. data/distro/common/html/_sources/knife_search.txt +53 -53
  77. data/distro/common/html/_sources/knife_serve.txt +18 -18
  78. data/distro/common/html/_sources/knife_show.txt +26 -26
  79. data/distro/common/html/_sources/knife_ssh.txt +43 -43
  80. data/distro/common/html/_sources/knife_ssl_check.txt +41 -41
  81. data/distro/common/html/_sources/knife_ssl_fetch.txt +41 -41
  82. data/distro/common/html/_sources/knife_status.txt +37 -37
  83. data/distro/common/html/_sources/knife_tag.txt +69 -69
  84. data/distro/common/html/_sources/knife_upload.txt +49 -49
  85. data/distro/common/html/_sources/knife_user.txt +127 -127
  86. data/distro/common/html/_sources/knife_using.txt +43 -43
  87. data/distro/common/html/_sources/knife_xargs.txt +30 -30
  88. data/distro/common/html/_static/guide.css +504 -504
  89. data/distro/common/html/_static/pygments.css +61 -61
  90. data/distro/common/html/_static/underscore.js +31 -31
  91. data/distro/common/html/ctl_chef_client.html +269 -269
  92. data/distro/common/html/ctl_chef_server.html +727 -727
  93. data/distro/common/html/ctl_chef_shell.html +162 -162
  94. data/distro/common/html/ctl_chef_solo.html +193 -193
  95. data/distro/common/html/index.html +201 -201
  96. data/distro/common/html/knife.html +169 -169
  97. data/distro/common/html/knife_bootstrap.html +284 -284
  98. data/distro/common/html/knife_client.html +284 -284
  99. data/distro/common/html/knife_common_options.html +95 -95
  100. data/distro/common/html/knife_configure.html +104 -104
  101. data/distro/common/html/knife_cookbook.html +486 -486
  102. data/distro/common/html/knife_data_bag.html +373 -373
  103. data/distro/common/html/knife_delete.html +92 -92
  104. data/distro/common/html/knife_deps.html +142 -142
  105. data/distro/common/html/knife_diff.html +122 -122
  106. data/distro/common/html/knife_download.html +144 -144
  107. data/distro/common/html/knife_edit.html +88 -88
  108. data/distro/common/html/knife_environment.html +325 -325
  109. data/distro/common/html/knife_exec.html +219 -219
  110. data/distro/common/html/knife_index_rebuild.html +82 -82
  111. data/distro/common/html/knife_list.html +113 -113
  112. data/distro/common/html/knife_node.html +457 -457
  113. data/distro/common/html/knife_raw.html +109 -109
  114. data/distro/common/html/knife_recipe_list.html +90 -90
  115. data/distro/common/html/knife_role.html +294 -294
  116. data/distro/common/html/knife_search.html +202 -202
  117. data/distro/common/html/knife_serve.html +78 -78
  118. data/distro/common/html/knife_show.html +103 -103
  119. data/distro/common/html/knife_ssh.html +176 -176
  120. data/distro/common/html/knife_ssl_check.html +150 -150
  121. data/distro/common/html/knife_ssl_fetch.html +150 -150
  122. data/distro/common/html/knife_status.html +143 -143
  123. data/distro/common/html/knife_tag.html +137 -137
  124. data/distro/common/html/knife_upload.html +152 -152
  125. data/distro/common/html/knife_user.html +241 -241
  126. data/distro/common/html/knife_using.html +209 -209
  127. data/distro/common/html/knife_xargs.html +121 -121
  128. data/distro/common/html/search.html +81 -81
  129. data/distro/common/man/man1/README.md +58 -58
  130. data/distro/common/man/man1/chef-shell.1 +194 -194
  131. data/distro/common/man/man1/knife-bootstrap.1 +215 -215
  132. data/distro/common/man/man1/knife-client.1 +443 -443
  133. data/distro/common/man/man1/knife-configure.1 +161 -161
  134. data/distro/common/man/man1/knife-cookbook.1 +770 -770
  135. data/distro/common/man/man1/knife-data-bag.1 +617 -617
  136. data/distro/common/man/man1/knife-delete.1 +127 -127
  137. data/distro/common/man/man1/knife-deps.1 +246 -246
  138. data/distro/common/man/man1/knife-diff.1 +226 -226
  139. data/distro/common/man/man1/knife-download.1 +258 -258
  140. data/distro/common/man/man1/knife-edit.1 +121 -121
  141. data/distro/common/man/man1/knife-environment.1 +508 -508
  142. data/distro/common/man/man1/knife-exec.1 +362 -362
  143. data/distro/common/man/man1/knife-index-rebuild.1 +63 -63
  144. data/distro/common/man/man1/knife-list.1 +174 -174
  145. data/distro/common/man/man1/knife-node.1 +716 -716
  146. data/distro/common/man/man1/knife-raw.1 +172 -172
  147. data/distro/common/man/man1/knife-recipe-list.1 +85 -85
  148. data/distro/common/man/man1/knife-role.1 +426 -426
  149. data/distro/common/man/man1/knife-search.1 +359 -359
  150. data/distro/common/man/man1/knife-serve.1 +109 -109
  151. data/distro/common/man/man1/knife-show.1 +160 -160
  152. data/distro/common/man/man1/knife-ssh.1 +284 -284
  153. data/distro/common/man/man1/knife-ssl-check.1 +207 -207
  154. data/distro/common/man/man1/knife-ssl-fetch.1 +207 -207
  155. data/distro/common/man/man1/knife-status.1 +234 -234
  156. data/distro/common/man/man1/knife-tag.1 +189 -189
  157. data/distro/common/man/man1/knife-upload.1 +280 -280
  158. data/distro/common/man/man1/knife-user.1 +356 -356
  159. data/distro/common/man/man1/knife-xargs.1 +189 -189
  160. data/distro/common/man/man1/knife.1 +332 -332
  161. data/distro/common/man/man8/chef-apply.8 +86 -86
  162. data/distro/common/man/man8/chef-client.8 +398 -398
  163. data/distro/common/man/man8/chef-solo.8 +260 -260
  164. data/distro/common/markdown/README +3 -3
  165. data/lib/chef/application.rb +14 -9
  166. data/lib/chef/application/apply.rb +5 -5
  167. data/lib/chef/application/client.rb +3 -3
  168. data/lib/chef/application/exit_code.rb +226 -0
  169. data/lib/chef/application/solo.rb +37 -7
  170. data/lib/chef/application/windows_service.rb +3 -3
  171. data/lib/chef/chef_fs/command_line.rb +7 -0
  172. data/lib/chef/chef_fs/config.rb +1 -1
  173. data/lib/chef/chef_fs/data_handler/data_handler_base.rb +11 -10
  174. data/lib/chef/chef_fs/data_handler/environment_data_handler.rb +1 -1
  175. data/lib/chef/chef_fs/data_handler/role_data_handler.rb +1 -1
  176. data/lib/chef/chef_fs/file_system.rb +15 -13
  177. data/lib/chef/chef_fs/file_system/base_fs_object.rb +4 -0
  178. data/lib/chef/chef_fs/file_system/chef_server/acl_dir.rb +1 -1
  179. data/lib/chef/chef_fs/file_system/chef_server/acl_entry.rb +9 -0
  180. data/lib/chef/chef_fs/file_system/chef_server/data_bag_dir.rb +6 -0
  181. data/lib/chef/chef_fs/file_system/chef_server/data_bag_entry.rb +19 -0
  182. data/lib/chef/chef_fs/file_system/chef_server/environments_dir.rb +1 -1
  183. data/lib/chef/chef_fs/file_system/chef_server/nodes_dir.rb +1 -1
  184. data/lib/chef/chef_fs/file_system/chef_server/org_entry.rb +4 -0
  185. data/lib/chef/chef_fs/file_system/chef_server/organization_invites_entry.rb +4 -0
  186. data/lib/chef/chef_fs/file_system/chef_server/organization_members_entry.rb +4 -0
  187. data/lib/chef/chef_fs/file_system/chef_server/policy_revision_entry.rb +4 -0
  188. data/lib/chef/chef_fs/file_system/chef_server/rest_list_dir.rb +3 -3
  189. data/lib/chef/chef_fs/file_system/chef_server/rest_list_entry.rb +15 -4
  190. data/lib/chef/chef_fs/file_system/exceptions.rb +7 -0
  191. data/lib/chef/chef_fs/file_system/multiplexed_dir.rb +2 -2
  192. data/lib/chef/chef_fs/file_system/nonexistent_fs_object.rb +0 -4
  193. data/lib/chef/chef_fs/file_system/repository/acl.rb +7 -0
  194. data/lib/chef/chef_fs/file_system/repository/acls_sub_dir.rb +0 -4
  195. data/lib/chef/chef_fs/file_system/repository/base_file.rb +36 -4
  196. data/lib/chef/chef_fs/file_system/repository/chef_repository_file_system_cookbook_entry.rb +4 -0
  197. data/lib/chef/chef_fs/file_system/repository/client_keys_sub_dir.rb +0 -4
  198. data/lib/chef/chef_fs/file_system/repository/clients_dir.rb +0 -3
  199. data/lib/chef/chef_fs/file_system/repository/containers_dir.rb +0 -4
  200. data/lib/chef/chef_fs/file_system/repository/directory.rb +4 -0
  201. data/lib/chef/chef_fs/file_system/repository/environments_dir.rb +0 -4
  202. data/lib/chef/chef_fs/file_system/repository/groups_dir.rb +0 -4
  203. data/lib/chef/chef_fs/file_system/repository/nodes_dir.rb +0 -4
  204. data/lib/chef/chef_fs/file_system/repository/policy_groups_dir.rb +0 -4
  205. data/lib/chef/chef_fs/file_system/repository/roles_dir.rb +0 -4
  206. data/lib/chef/chef_fs/file_system/repository/users_dir.rb +0 -4
  207. data/lib/chef/client.rb +11 -3
  208. data/lib/chef/config_fetcher.rb +4 -4
  209. data/lib/chef/cookbook/gem_installer.rb +1 -0
  210. data/lib/chef/cookbook/synchronizer.rb +1 -1
  211. data/lib/chef/data_bag.rb +2 -2
  212. data/lib/chef/data_bag_item.rb +1 -1
  213. data/lib/chef/data_collector.rb +345 -0
  214. data/lib/chef/data_collector/messages.rb +125 -0
  215. data/lib/chef/data_collector/messages/helpers.rb +161 -0
  216. data/lib/chef/data_collector/resource_report.rb +84 -0
  217. data/lib/chef/decorator.rb +81 -0
  218. data/lib/chef/decorator/lazy.rb +60 -0
  219. data/lib/chef/decorator/lazy_array.rb +59 -0
  220. data/lib/chef/deprecation/provider/remote_file.rb +1 -1
  221. data/lib/chef/dsl/core.rb +19 -11
  222. data/lib/chef/dsl/platform_introspection.rb +16 -0
  223. data/lib/chef/dsl/recipe.rb +15 -9
  224. data/lib/chef/dsl/universal.rb +50 -0
  225. data/lib/chef/environment.rb +2 -2
  226. data/lib/chef/exceptions.rb +19 -4
  227. data/lib/chef/handler.rb +33 -0
  228. data/lib/chef/knife/cookbook_show.rb +6 -10
  229. data/lib/chef/knife/cookbook_site_install.rb +7 -2
  230. data/lib/chef/knife/help_topics.rb +4 -4
  231. data/lib/chef/knife/list.rb +1 -2
  232. data/lib/chef/knife/ssl_check.rb +2 -1
  233. data/lib/chef/monkey_patches/win32/registry.rb +11 -0
  234. data/lib/chef/nil_argument.rb +3 -3
  235. data/lib/chef/node.rb +2 -2
  236. data/lib/chef/platform/rebooter.rb +13 -2
  237. data/lib/chef/policy_builder/dynamic.rb +1 -1
  238. data/lib/chef/policy_builder/expand_node_object.rb +3 -3
  239. data/lib/chef/policy_builder/policyfile.rb +1 -1
  240. data/lib/chef/provider/git.rb +43 -41
  241. data/lib/chef/provider/lwrp_base.rb +0 -1
  242. data/lib/chef/provider/osx_profile.rb +2 -3
  243. data/lib/chef/provider/package.rb +51 -13
  244. data/lib/chef/provider/package/apt.rb +97 -103
  245. data/lib/chef/provider/package/chocolatey.rb +9 -10
  246. data/lib/chef/provider/package/dpkg.rb +2 -2
  247. data/lib/chef/provider/package/portage.rb +1 -1
  248. data/lib/chef/provider/package/rubygems.rb +8 -12
  249. data/lib/chef/provider/package/yum.rb +4 -959
  250. data/lib/chef/provider/package/yum/rpm_utils.rb +642 -0
  251. data/lib/chef/provider/package/{yum-dump.py → yum/yum-dump.py} +0 -0
  252. data/lib/chef/provider/package/yum/yum_cache.rb +376 -0
  253. data/lib/chef/provider/resource_update.rb +52 -52
  254. data/lib/chef/provider/systemd_unit.rb +238 -0
  255. data/lib/chef/providers.rb +1 -0
  256. data/lib/chef/reserved_names.rb +9 -9
  257. data/lib/chef/resource.rb +2 -7
  258. data/lib/chef/resource/file.rb +6 -1
  259. data/lib/chef/resource/systemd_unit.rb +63 -0
  260. data/lib/chef/resources.rb +1 -0
  261. data/lib/chef/sandbox.rb +20 -20
  262. data/lib/chef/shell/shell_session.rb +3 -3
  263. data/lib/chef/version.rb +1 -1
  264. data/lib/chef/win32/system.rb +0 -0
  265. data/spec/data/apt/chef-integration-test-1.0/debian/changelog +5 -5
  266. data/spec/data/apt/chef-integration-test-1.0/debian/compat +1 -1
  267. data/spec/data/apt/chef-integration-test-1.0/debian/control +13 -13
  268. data/spec/data/apt/chef-integration-test-1.0/debian/files +1 -1
  269. data/spec/data/apt/chef-integration-test-1.0/debian/rules +13 -13
  270. data/spec/data/apt/chef-integration-test-1.0/debian/source/format +1 -1
  271. data/spec/data/apt/chef-integration-test-1.1/debian/changelog +11 -11
  272. data/spec/data/apt/chef-integration-test-1.1/debian/compat +1 -1
  273. data/spec/data/apt/chef-integration-test-1.1/debian/control +13 -13
  274. data/spec/data/apt/chef-integration-test-1.1/debian/files +1 -1
  275. data/spec/data/apt/chef-integration-test-1.1/debian/rules +13 -13
  276. data/spec/data/apt/chef-integration-test-1.1/debian/source/format +1 -1
  277. data/spec/data/apt/chef-integration-test2-1.0/debian/rules +0 -0
  278. data/spec/data/apt/chef-integration-test_1.0-1_amd64.changes +22 -22
  279. data/spec/data/apt/chef-integration-test_1.1-1_amd64.changes +22 -22
  280. data/spec/data/apt/var/www/apt/conf/distributions +7 -7
  281. data/spec/data/apt/var/www/apt/conf/incoming +4 -4
  282. data/spec/data/apt/var/www/apt/conf/pulls +3 -3
  283. data/spec/data/apt/var/www/apt/db/version +4 -4
  284. data/spec/data/apt/var/www/apt/dists/sid/Release +19 -19
  285. data/spec/data/apt/var/www/apt/dists/sid/main/binary-amd64/Packages +16 -16
  286. data/spec/data/apt/var/www/apt/dists/sid/main/binary-amd64/Release +5 -5
  287. data/spec/data/bootstrap/encrypted_data_bag_secret +1 -1
  288. data/spec/data/bootstrap/no_proxy.erb +2 -2
  289. data/spec/data/bootstrap/secret.erb +9 -9
  290. data/spec/data/bootstrap/test-hints.erb +12 -12
  291. data/spec/data/bootstrap/test.erb +1 -1
  292. data/spec/data/cb_version_cookbooks/tatft/README.rdoc +2 -2
  293. data/spec/data/cb_version_cookbooks/tatft/attributes/default.rb +1 -1
  294. data/spec/data/checksum_cache/chef-file--tmp-chef-rendered-template20100929-10863-600hhz-0 +1 -1
  295. data/spec/data/checksum_cache/chef-file--tmp-chef-rendered-template20100929-10863-ahd2gq-0 +1 -1
  296. data/spec/data/checksum_cache/chef-file--tmp-chef-rendered-template20100929-10863-api8ux-0 +1 -1
  297. data/spec/data/checksum_cache/chef-file--tmp-chef-rendered-template20100929-10863-b0r1m1-0 +1 -1
  298. data/spec/data/checksum_cache/chef-file--tmp-chef-rendered-template20100929-10863-bfygsi-0 +1 -1
  299. data/spec/data/checksum_cache/chef-file--tmp-chef-rendered-template20100929-10863-el14l6-0 +1 -1
  300. data/spec/data/checksum_cache/chef-file--tmp-chef-rendered-template20100929-10863-ivrl3y-0 +1 -1
  301. data/spec/data/checksum_cache/chef-file--tmp-chef-rendered-template20100929-10863-kkbs85-0 +1 -1
  302. data/spec/data/checksum_cache/chef-file--tmp-chef-rendered-template20100929-10863-ory1ux-0 +1 -1
  303. data/spec/data/checksum_cache/chef-file--tmp-chef-rendered-template20100929-10863-pgsq76-0 +1 -1
  304. data/spec/data/checksum_cache/chef-file--tmp-chef-rendered-template20100929-10863-ra8uim-0 +1 -1
  305. data/spec/data/checksum_cache/chef-file--tmp-chef-rendered-template20100929-10863-t7k1g-0 +1 -1
  306. data/spec/data/checksum_cache/chef-file--tmp-chef-rendered-template20100929-10863-t8g0sv-0 +1 -1
  307. data/spec/data/checksum_cache/chef-file--tmp-chef-rendered-template20100929-10863-ufy6g3-0 +1 -1
  308. data/spec/data/checksum_cache/chef-file--tmp-chef-rendered-template20100929-10863-x2d6j9-0 +1 -1
  309. data/spec/data/checksum_cache/chef-file--tmp-chef-rendered-template20100929-10863-xi0l6h-0 +1 -1
  310. data/spec/data/config.rb +6 -6
  311. data/spec/data/cookbooks/angrybash/metadata.rb +2 -2
  312. data/spec/data/cookbooks/angrybash/recipes/default.rb +8 -8
  313. data/spec/data/cookbooks/apache2/files/default/apache2_module_conf_generate.pl +2 -2
  314. data/spec/data/cookbooks/apache2/metadata.rb +2 -2
  315. data/spec/data/cookbooks/apache2/recipes/default.rb +2 -2
  316. data/spec/data/cookbooks/borken/metadata.rb +2 -2
  317. data/spec/data/cookbooks/borken/recipes/default.rb +1 -1
  318. data/spec/data/cookbooks/borken/templates/default/borken.erb +1 -1
  319. data/spec/data/cookbooks/chefignore +8 -8
  320. data/spec/data/cookbooks/ignorken/files/default/not_me.rb +2 -2
  321. data/spec/data/cookbooks/ignorken/metadata.rb +2 -2
  322. data/spec/data/cookbooks/ignorken/recipes/ignoreme.rb +1 -1
  323. data/spec/data/cookbooks/ignorken/templates/ubuntu-12.10/not_me.rb +2 -2
  324. data/spec/data/cookbooks/java/files/default/java.response +1 -1
  325. data/spec/data/cookbooks/java/metadata.rb +2 -2
  326. data/spec/data/cookbooks/name-mismatch-versionnumber/README.md +4 -4
  327. data/spec/data/cookbooks/name-mismatch-versionnumber/metadata.rb +8 -8
  328. data/spec/data/cookbooks/openldap/attributes/default.rb +16 -16
  329. data/spec/data/cookbooks/openldap/attributes/smokey.rb +1 -1
  330. data/spec/data/cookbooks/openldap/definitions/client.rb +5 -5
  331. data/spec/data/cookbooks/openldap/definitions/server.rb +5 -5
  332. data/spec/data/cookbooks/openldap/files/default/.dotfile +1 -1
  333. data/spec/data/cookbooks/openldap/files/default/remotedir/.a_dotdir/.a_dotfile_in_a_dotdir +1 -1
  334. data/spec/data/cookbooks/openldap/files/default/remotedir/not_a_template.erb +2 -2
  335. data/spec/data/cookbooks/openldap/files/default/remotedir/remote_dir_file1.txt +2 -2
  336. data/spec/data/cookbooks/openldap/files/default/remotedir/remote_dir_file2.txt +2 -2
  337. data/spec/data/cookbooks/openldap/files/default/remotedir/remotesubdir/.a_dotfile +1 -1
  338. data/spec/data/cookbooks/openldap/files/default/remotedir/remotesubdir/remote_subdir_file1.txt +2 -2
  339. data/spec/data/cookbooks/openldap/files/default/remotedir/remotesubdir/remote_subdir_file2.txt +2 -2
  340. data/spec/data/cookbooks/openldap/files/default/remotedir/subdir_with_no_file_just_a_subsubdir/the_subsubdir/some_file.txt +3 -3
  341. data/spec/data/cookbooks/openldap/libraries/openldap.rb +4 -4
  342. data/spec/data/cookbooks/openldap/libraries/openldap/version.rb +3 -3
  343. data/spec/data/cookbooks/openldap/metadata.rb +8 -8
  344. data/spec/data/cookbooks/openldap/recipes/default.rb +4 -4
  345. data/spec/data/cookbooks/openldap/recipes/gigantor.rb +3 -3
  346. data/spec/data/cookbooks/openldap/recipes/one.rb +15 -15
  347. data/spec/data/cookbooks/openldap/recipes/return.rb +2 -2
  348. data/spec/data/cookbooks/openldap/templates/default/helper_test.erb +1 -1
  349. data/spec/data/cookbooks/openldap/templates/default/helpers_via_partial_test.erb +1 -1
  350. data/spec/data/cookbooks/openldap/templates/default/no_windows_line_endings.erb +4 -4
  351. data/spec/data/cookbooks/openldap/templates/default/openldap_variable_stuff.conf.erb +1 -1
  352. data/spec/data/cookbooks/openldap/templates/default/test.erb +1 -1
  353. data/spec/data/cookbooks/preseed/files/default/preseed-file.seed +1 -1
  354. data/spec/data/cookbooks/preseed/files/default/preseed-template.seed +4 -4
  355. data/spec/data/cookbooks/preseed/metadata.rb +2 -2
  356. data/spec/data/cookbooks/preseed/templates/default/preseed-template-variables.seed +1 -1
  357. data/spec/data/cookbooks/preseed/templates/default/preseed-template.seed +1 -1
  358. data/spec/data/definitions/test.rb +4 -4
  359. data/spec/data/environment-config.rb +4 -4
  360. data/spec/data/file-providers-method-snapshot-chef-11-4.json +127 -127
  361. data/spec/data/fileedit/hosts +4 -4
  362. data/spec/data/incomplete-metadata-chef-repo/incomplete-metadata/README.md +4 -4
  363. data/spec/data/incomplete-metadata-chef-repo/incomplete-metadata/metadata.rb +13 -13
  364. data/spec/data/invalid-metadata-chef-repo/invalid-metadata/README.md +4 -4
  365. data/spec/data/kitchen/chefignore +6 -6
  366. data/spec/data/kitchen/openldap/attributes/default.rb +3 -3
  367. data/spec/data/kitchen/openldap/attributes/robinson.rb +2 -2
  368. data/spec/data/kitchen/openldap/definitions/client.rb +3 -3
  369. data/spec/data/kitchen/openldap/definitions/drewbarrymore.rb +2 -2
  370. data/spec/data/kitchen/openldap/recipes/gigantor.rb +2 -2
  371. data/spec/data/kitchen/openldap/recipes/ignoreme.rb +2 -2
  372. data/spec/data/kitchen/openldap/recipes/woot.rb +3 -3
  373. data/spec/data/knife_subcommand/test_explicit_category.rb +6 -6
  374. data/spec/data/knife_subcommand/test_name_mapping.rb +4 -4
  375. data/spec/data/knife_subcommand/test_yourself.rb +21 -21
  376. data/spec/data/lwrp/providers/inline_compiler.rb +26 -26
  377. data/spec/data/lwrp/providers/monkey_name_printer.rb +5 -5
  378. data/spec/data/lwrp/providers/paint_drying_watcher.rb +7 -7
  379. data/spec/data/lwrp/providers/thumb_twiddler.rb +7 -7
  380. data/spec/data/lwrp/resources/foo.rb +4 -4
  381. data/spec/data/lwrp/resources_with_default_attributes/nodeattr.rb +1 -1
  382. data/spec/data/lwrp_override/providers/buck_passer.rb +5 -5
  383. data/spec/data/mac_users/10.7-8.plist.xml +559 -559
  384. data/spec/data/mac_users/10.7-8.shadow.xml +11 -11
  385. data/spec/data/mac_users/10.7.plist.xml +559 -559
  386. data/spec/data/mac_users/10.7.shadow.xml +11 -11
  387. data/spec/data/mac_users/10.8.plist.xml +559 -559
  388. data/spec/data/mac_users/10.8.shadow.xml +21 -21
  389. data/spec/data/mac_users/10.9.plist.xml +560 -560
  390. data/spec/data/mac_users/10.9.shadow.xml +21 -21
  391. data/spec/data/metadata/quick_start/metadata.rb +19 -19
  392. data/spec/data/nodes/default.rb +15 -15
  393. data/spec/data/nodes/test.example.com.rb +17 -17
  394. data/spec/data/nodes/test.rb +15 -15
  395. data/spec/data/null_config.rb +1 -1
  396. data/spec/data/object_loader/environments/test.json +7 -7
  397. data/spec/data/object_loader/environments/test.rb +2 -2
  398. data/spec/data/object_loader/environments/test_json_class.json +8 -8
  399. data/spec/data/object_loader/nodes/test.json +7 -7
  400. data/spec/data/object_loader/nodes/test.rb +2 -2
  401. data/spec/data/object_loader/nodes/test_json_class.json +8 -8
  402. data/spec/data/object_loader/roles/test.json +7 -7
  403. data/spec/data/object_loader/roles/test.rb +2 -2
  404. data/spec/data/object_loader/roles/test_json_class.json +8 -8
  405. data/spec/data/partial_one.erb +1 -1
  406. data/spec/data/recipes/test.rb +7 -7
  407. data/spec/data/run_context/cookbooks/circular-dep1/attributes/default.rb +4 -4
  408. data/spec/data/run_context/cookbooks/circular-dep1/definitions/circular_dep1_res.rb +1 -1
  409. data/spec/data/run_context/cookbooks/circular-dep1/libraries/lib.rb +2 -2
  410. data/spec/data/run_context/cookbooks/circular-dep1/metadata.rb +2 -2
  411. data/spec/data/run_context/cookbooks/circular-dep1/providers/provider.rb +1 -1
  412. data/spec/data/run_context/cookbooks/circular-dep1/resources/resource.rb +1 -1
  413. data/spec/data/run_context/cookbooks/circular-dep2/attributes/default.rb +3 -3
  414. data/spec/data/run_context/cookbooks/circular-dep2/definitions/circular_dep2_res.rb +1 -1
  415. data/spec/data/run_context/cookbooks/circular-dep2/libraries/lib.rb +2 -2
  416. data/spec/data/run_context/cookbooks/circular-dep2/metadata.rb +2 -2
  417. data/spec/data/run_context/cookbooks/circular-dep2/providers/provider.rb +1 -1
  418. data/spec/data/run_context/cookbooks/circular-dep2/resources/resource.rb +1 -1
  419. data/spec/data/run_context/cookbooks/dependency1/attributes/aa_first.rb +2 -2
  420. data/spec/data/run_context/cookbooks/dependency1/attributes/default.rb +2 -2
  421. data/spec/data/run_context/cookbooks/dependency1/attributes/zz_last.rb +3 -3
  422. data/spec/data/run_context/cookbooks/dependency1/definitions/dependency1_res.rb +1 -1
  423. data/spec/data/run_context/cookbooks/dependency1/libraries/lib.rb +2 -2
  424. data/spec/data/run_context/cookbooks/dependency1/providers/provider.rb +1 -1
  425. data/spec/data/run_context/cookbooks/dependency1/resources/resource.rb +1 -1
  426. data/spec/data/run_context/cookbooks/dependency2/attributes/default.rb +3 -3
  427. data/spec/data/run_context/cookbooks/dependency2/definitions/dependency2_res.rb +1 -1
  428. data/spec/data/run_context/cookbooks/dependency2/libraries/lib.rb +2 -2
  429. data/spec/data/run_context/cookbooks/dependency2/providers/provider.rb +1 -1
  430. data/spec/data/run_context/cookbooks/dependency2/resources/resource.rb +1 -1
  431. data/spec/data/run_context/cookbooks/no-default-attr/attributes/server.rb +3 -3
  432. data/spec/data/run_context/cookbooks/no-default-attr/definitions/no_default-attr_res.rb +1 -1
  433. data/spec/data/run_context/cookbooks/no-default-attr/providers/provider.rb +1 -1
  434. data/spec/data/run_context/cookbooks/no-default-attr/resources/resource.rb +1 -1
  435. data/spec/data/run_context/cookbooks/test-with-circular-deps/attributes/default.rb +3 -3
  436. data/spec/data/run_context/cookbooks/test-with-circular-deps/definitions/test_with-circular-deps_res.rb +1 -1
  437. data/spec/data/run_context/cookbooks/test-with-circular-deps/libraries/lib.rb +2 -2
  438. data/spec/data/run_context/cookbooks/test-with-circular-deps/metadata.rb +2 -2
  439. data/spec/data/run_context/cookbooks/test-with-circular-deps/providers/provider.rb +1 -1
  440. data/spec/data/run_context/cookbooks/test-with-circular-deps/resources/resource.rb +1 -1
  441. data/spec/data/run_context/cookbooks/test-with-deps/attributes/default.rb +3 -3
  442. data/spec/data/run_context/cookbooks/test-with-deps/definitions/test_with-deps_res.rb +1 -1
  443. data/spec/data/run_context/cookbooks/test-with-deps/libraries/lib.rb +1 -1
  444. data/spec/data/run_context/cookbooks/test-with-deps/metadata.rb +3 -3
  445. data/spec/data/run_context/cookbooks/test-with-deps/providers/provider.rb +1 -1
  446. data/spec/data/run_context/cookbooks/test-with-deps/resources/resource.rb +1 -1
  447. data/spec/data/run_context/cookbooks/test/attributes/george.rb +1 -1
  448. data/spec/data/run_context/cookbooks/test/definitions/new_animals.rb +9 -9
  449. data/spec/data/run_context/cookbooks/test/definitions/new_cat.rb +5 -5
  450. data/spec/data/run_context/cookbooks/test/definitions/test_res.rb +1 -1
  451. data/spec/data/run_context/cookbooks/test/providers/provider.rb +1 -1
  452. data/spec/data/run_context/cookbooks/test/recipes/default.rb +5 -5
  453. data/spec/data/run_context/cookbooks/test/recipes/one.rb +7 -7
  454. data/spec/data/run_context/cookbooks/test/recipes/two.rb +7 -7
  455. data/spec/data/run_context/cookbooks/test/resources/resource.rb +1 -1
  456. data/spec/data/run_context/nodes/run_context.rb +5 -5
  457. data/spec/data/search_queries_to_transform.txt +98 -98
  458. data/spec/data/shef-config.rb +10 -10
  459. data/spec/data/ssl/5e707473.0 +18 -18
  460. data/spec/data/ssl/chef-rspec.cert +27 -27
  461. data/spec/data/ssl/chef-rspec.key +27 -27
  462. data/spec/data/ssl/key.pem +15 -15
  463. data/spec/data/ssl/private_key.pem +27 -27
  464. data/spec/data/ssl/private_key_with_whitespace.pem +32 -32
  465. data/spec/data/standalone_cookbook/chefignore +9 -9
  466. data/spec/data/standalone_cookbook/recipes/default.rb +2 -2
  467. data/spec/data/trusted_certs/example.crt +22 -22
  468. data/spec/data/trusted_certs/intermediate.pem +27 -27
  469. data/spec/data/trusted_certs/root.pem +22 -22
  470. data/spec/functional/assets/chefinittest +34 -34
  471. data/spec/functional/assets/testchefsubsys +10 -10
  472. data/spec/functional/provider/remote_file/cache_control_data_spec.rb +0 -0
  473. data/spec/functional/resource/aix_service_spec.rb +0 -0
  474. data/spec/functional/resource/aixinit_service_spec.rb +0 -0
  475. data/spec/functional/resource/chocolatey_package_spec.rb +0 -5
  476. data/spec/functional/resource/env_spec.rb +0 -0
  477. data/spec/functional/win32/registry_spec.rb +1 -0
  478. data/spec/integration/client/exit_code_spec.rb +245 -0
  479. data/spec/integration/knife/deps_spec.rb +7 -7
  480. data/spec/integration/knife/download_spec.rb +19 -0
  481. data/spec/integration/knife/list_spec.rb +0 -8
  482. data/spec/integration/knife/upload_spec.rb +21 -2
  483. data/spec/integration/solo/solo_spec.rb +1 -1
  484. data/spec/rcov.opts +2 -2
  485. data/spec/unit/application/apply_spec.rb +6 -4
  486. data/spec/unit/application/exit_code_spec.rb +231 -0
  487. data/spec/unit/application/solo_spec.rb +143 -88
  488. data/spec/unit/chef_fs/config_spec.rb +129 -0
  489. data/spec/unit/chef_fs/file_system/repository/base_file_spec.rb +8 -10
  490. data/spec/unit/client_spec.rb +1 -1
  491. data/spec/unit/config_fetcher_spec.rb +2 -2
  492. data/spec/unit/cookbook/synchronizer_spec.rb +1 -1
  493. data/spec/unit/data_bag_item_spec.rb +2 -2
  494. data/spec/unit/data_bag_spec.rb +2 -2
  495. data/spec/unit/data_collector/messages/helpers_spec.rb +190 -0
  496. data/spec/unit/data_collector/messages_spec.rb +207 -0
  497. data/spec/unit/data_collector_spec.rb +525 -0
  498. data/spec/unit/decorator/lazy_array_spec.rb +58 -0
  499. data/spec/unit/decorator/lazy_spec.rb +39 -0
  500. data/spec/unit/decorator_spec.rb +142 -0
  501. data/spec/unit/environment_spec.rb +4 -4
  502. data/spec/unit/handler_spec.rb +87 -0
  503. data/spec/unit/knife/cookbook_show_spec.rb +89 -90
  504. data/spec/unit/knife/ssl_check_spec.rb +16 -0
  505. data/spec/unit/policy_builder/dynamic_spec.rb +1 -1
  506. data/spec/unit/policy_builder/policyfile_spec.rb +1 -1
  507. data/spec/unit/provider/git_spec.rb +77 -18
  508. data/spec/unit/provider/package/apt_spec.rb +97 -34
  509. data/spec/unit/provider/package/chocolatey_spec.rb +3 -15
  510. data/spec/unit/provider/package/portage_spec.rb +6 -0
  511. data/spec/unit/provider/package/rubygems_spec.rb +38 -4
  512. data/spec/unit/provider/package/yum/yum_cache_spec.rb +27 -0
  513. data/spec/unit/provider/package_spec.rb +20 -7
  514. data/spec/unit/provider/systemd_unit_spec.rb +885 -0
  515. data/spec/unit/resource/systemd_unit_spec.rb +133 -0
  516. data/spec/unit/resource_builder_spec.rb +1 -1
  517. data/tasks/bin/bundle-platform +6 -2
  518. data/tasks/bin/bundle-platform.bat +0 -0
  519. data/tasks/bin/create-override-gemfile +0 -0
  520. data/tasks/bin/run_external_test +0 -0
  521. data/tasks/bundle_util.rb +18 -2
  522. data/tasks/changelog.rb +1 -0
  523. data/tasks/dependencies.rb +47 -57
  524. metadata +847 -7
  525. data/tasks/bin/run_chef_tests +0 -17
@@ -0,0 +1,642 @@
1
+
2
+ # Author:: Adam Jacob (<adam@chef.io>)
3
+ # Copyright:: Copyright 2008-2016, Chef Software, Inc.
4
+ # License:: Apache License, Version 2.0
5
+ #
6
+ # Licensed under the Apache License, Version 2.0 (the "License");
7
+ # you may not use this file except in compliance with the License.
8
+ # You may obtain a copy of the License at
9
+ #
10
+ # http://www.apache.org/licenses/LICENSE-2.0
11
+ #
12
+ # Unless required by applicable law or agreed to in writing, software
13
+ # distributed under the License is distributed on an "AS IS" BASIS,
14
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15
+ # See the License for the specific language governing permissions and
16
+ # limitations under the License.
17
+ #
18
+
19
+ require "chef/provider/package"
20
+
21
+ class Chef
22
+ class Provider
23
+ class Package
24
+ class Yum < Chef::Provider::Package
25
+ class RPMUtils
26
+ class << self
27
+
28
+ # RPM::Version version_parse equivalent
29
+ def version_parse(evr)
30
+ return if evr.nil?
31
+
32
+ epoch = nil
33
+ # assume this is a version
34
+ version = evr
35
+ release = nil
36
+
37
+ lead = 0
38
+ tail = evr.size
39
+
40
+ if %r{^([\d]+):}.match(evr) # rubocop:disable Performance/RedundantMatch
41
+ epoch = $1.to_i
42
+ lead = $1.length + 1
43
+ elsif evr[0].ord == ":".ord
44
+ epoch = 0
45
+ lead = 1
46
+ end
47
+
48
+ if %r{:?.*-(.*)$}.match(evr) # rubocop:disable Performance/RedundantMatch
49
+ release = $1
50
+ tail = evr.length - release.length - lead - 1
51
+
52
+ if release.empty?
53
+ release = nil
54
+ end
55
+ end
56
+
57
+ version = evr[lead, tail]
58
+ if version.empty?
59
+ version = nil
60
+ end
61
+
62
+ [ epoch, version, release ]
63
+ end
64
+
65
+ # verify
66
+ def isalnum(x)
67
+ isalpha(x) || isdigit(x)
68
+ end
69
+
70
+ def isalpha(x)
71
+ v = x.ord
72
+ (v >= 65 && v <= 90) || (v >= 97 && v <= 122)
73
+ end
74
+
75
+ def isdigit(x)
76
+ v = x.ord
77
+ v >= 48 && v <= 57
78
+ end
79
+
80
+ # based on the reference spec in lib/rpmvercmp.c in rpm 4.9.0
81
+ def rpmvercmp(x, y)
82
+ # easy! :)
83
+ return 0 if x == y
84
+
85
+ if x.nil?
86
+ x = ""
87
+ end
88
+
89
+ if y.nil?
90
+ y = ""
91
+ end
92
+
93
+ # not so easy :(
94
+ #
95
+ # takes 2 strings like
96
+ #
97
+ # x = "1.20.b18.el5"
98
+ # y = "1.20.b17.el5"
99
+ #
100
+ # breaks into purely alpha and numeric segments and compares them using
101
+ # some rules
102
+ #
103
+ # * 10 > 1
104
+ # * 1 > a
105
+ # * z > a
106
+ # * Z > A
107
+ # * z > Z
108
+ # * leading zeros are ignored
109
+ # * separators (periods, commas) are ignored
110
+ # * "1.20.b18.el5.extrastuff" > "1.20.b18.el5"
111
+
112
+ x_pos = 0 # overall string element reference position
113
+ x_pos_max = x.length - 1 # number of elements in string, starting from 0
114
+ x_seg_pos = 0 # segment string element reference position
115
+ x_comp = nil # segment to compare
116
+
117
+ y_pos = 0
118
+ y_seg_pos = 0
119
+ y_pos_max = y.length - 1
120
+ y_comp = nil
121
+
122
+ while x_pos <= x_pos_max && y_pos <= y_pos_max
123
+ # first we skip over anything non alphanumeric
124
+ while (x_pos <= x_pos_max) && (isalnum(x[x_pos]) == false)
125
+ x_pos += 1 # +1 over pos_max if end of string
126
+ end
127
+ while (y_pos <= y_pos_max) && (isalnum(y[y_pos]) == false)
128
+ y_pos += 1
129
+ end
130
+
131
+ # if we hit the end of either we are done matching segments
132
+ if (x_pos == x_pos_max + 1) || (y_pos == y_pos_max + 1)
133
+ break
134
+ end
135
+
136
+ # we are now at the start of a alpha or numeric segment
137
+ x_seg_pos = x_pos
138
+ y_seg_pos = y_pos
139
+
140
+ # grab segment so we can compare them
141
+ if isdigit(x[x_seg_pos].ord)
142
+ x_seg_is_num = true
143
+
144
+ # already know it's a digit
145
+ x_seg_pos += 1
146
+
147
+ # gather up our digits
148
+ while (x_seg_pos <= x_pos_max) && isdigit(x[x_seg_pos])
149
+ x_seg_pos += 1
150
+ end
151
+ # copy the segment but not the unmatched character that x_seg_pos will
152
+ # refer to
153
+ x_comp = x[x_pos, x_seg_pos - x_pos]
154
+
155
+ while (y_seg_pos <= y_pos_max) && isdigit(y[y_seg_pos])
156
+ y_seg_pos += 1
157
+ end
158
+ y_comp = y[y_pos, y_seg_pos - y_pos]
159
+ else
160
+ # we are comparing strings
161
+ x_seg_is_num = false
162
+
163
+ while (x_seg_pos <= x_pos_max) && isalpha(x[x_seg_pos])
164
+ x_seg_pos += 1
165
+ end
166
+ x_comp = x[x_pos, x_seg_pos - x_pos]
167
+
168
+ while (y_seg_pos <= y_pos_max) && isalpha(y[y_seg_pos])
169
+ y_seg_pos += 1
170
+ end
171
+ y_comp = y[y_pos, y_seg_pos - y_pos]
172
+ end
173
+
174
+ # if y_seg_pos didn't advance in the above loop it means the segments are
175
+ # different types
176
+ if y_pos == y_seg_pos
177
+ # numbers always win over letters
178
+ return x_seg_is_num ? 1 : -1
179
+ end
180
+
181
+ # move the ball forward before we mess with the segments
182
+ x_pos += x_comp.length # +1 over pos_max if end of string
183
+ y_pos += y_comp.length
184
+
185
+ # we are comparing numbers - simply convert them
186
+ if x_seg_is_num
187
+ x_comp = x_comp.to_i
188
+ y_comp = y_comp.to_i
189
+ end
190
+
191
+ # compares ints or strings
192
+ # don't return if equal - try the next segment
193
+ if x_comp > y_comp
194
+ return 1
195
+ elsif x_comp < y_comp
196
+ return -1
197
+ end
198
+
199
+ # if we've reached here than the segments are the same - try again
200
+ end
201
+
202
+ # we must have reached the end of one or both of the strings and they
203
+ # matched up until this point
204
+
205
+ # segments matched completely but the segment separators were different -
206
+ # rpm reference code treats these as equal.
207
+ if (x_pos == x_pos_max + 1) && (y_pos == y_pos_max + 1)
208
+ return 0
209
+ end
210
+
211
+ # the most unprocessed characters left wins
212
+ if (x_pos_max - x_pos) > (y_pos_max - y_pos)
213
+ return 1
214
+ else
215
+ return -1
216
+ end
217
+ end
218
+
219
+ end # self
220
+ end # RPMUtils
221
+
222
+ class RPMVersion
223
+ include Comparable
224
+
225
+ def initialize(*args)
226
+ if args.size == 1
227
+ @e, @v, @r = RPMUtils.version_parse(args[0])
228
+ elsif args.size == 3
229
+ @e = args[0].to_i
230
+ @v = args[1]
231
+ @r = args[2]
232
+ else
233
+ raise ArgumentError, "Expecting either 'epoch-version-release' or 'epoch, " +
234
+ "version, release'"
235
+ end
236
+ end
237
+ attr_reader :e, :v, :r
238
+ alias :epoch :e
239
+ alias :version :v
240
+ alias :release :r
241
+
242
+ def self.parse(*args)
243
+ self.new(*args)
244
+ end
245
+
246
+ def <=>(y)
247
+ compare_versions(y)
248
+ end
249
+
250
+ def compare(y)
251
+ compare_versions(y, false)
252
+ end
253
+
254
+ def partial_compare(y)
255
+ compare_versions(y, true)
256
+ end
257
+
258
+ # RPM::Version rpm_version_to_s equivalent
259
+ def to_s
260
+ if @r.nil?
261
+ @v
262
+ else
263
+ "#{@v}-#{@r}"
264
+ end
265
+ end
266
+
267
+ def evr
268
+ "#{@e}:#{@v}-#{@r}"
269
+ end
270
+
271
+ private
272
+
273
+ # Rough RPM::Version rpm_version_cmp equivalent - except much slower :)
274
+ #
275
+ # partial lets epoch and version segment equality be good enough to return equal, eg:
276
+ #
277
+ # 2:1.2-1 == 2:1.2
278
+ # 2:1.2-1 == 2:
279
+ #
280
+ def compare_versions(y, partial = false)
281
+ x = self
282
+
283
+ # compare epoch
284
+ if (x.e.nil? == false && x.e > 0) && y.e.nil?
285
+ return 1
286
+ elsif x.e.nil? && (y.e.nil? == false && y.e > 0)
287
+ return -1
288
+ elsif x.e.nil? == false && y.e.nil? == false
289
+ if x.e < y.e
290
+ return -1
291
+ elsif x.e > y.e
292
+ return 1
293
+ end
294
+ end
295
+
296
+ # compare version
297
+ if partial && (x.v.nil? || y.v.nil?)
298
+ return 0
299
+ elsif x.v.nil? == false && y.v.nil?
300
+ return 1
301
+ elsif x.v.nil? && y.v.nil? == false
302
+ return -1
303
+ elsif x.v.nil? == false && y.v.nil? == false
304
+ cmp = RPMUtils.rpmvercmp(x.v, y.v)
305
+ return cmp if cmp != 0
306
+ end
307
+
308
+ # compare release
309
+ if partial && (x.r.nil? || y.r.nil?)
310
+ return 0
311
+ elsif x.r.nil? == false && y.r.nil?
312
+ return 1
313
+ elsif x.r.nil? && y.r.nil? == false
314
+ return -1
315
+ elsif x.r.nil? == false && y.r.nil? == false
316
+ cmp = RPMUtils.rpmvercmp(x.r, y.r)
317
+ return cmp
318
+ end
319
+
320
+ return 0
321
+ end
322
+ end
323
+
324
+ class RPMPackage
325
+ include Comparable
326
+
327
+ def initialize(*args)
328
+ if args.size == 4
329
+ @n = args[0]
330
+ @version = RPMVersion.new(args[1])
331
+ @a = args[2]
332
+ @provides = args[3]
333
+ elsif args.size == 6
334
+ @n = args[0]
335
+ e = args[1].to_i
336
+ v = args[2]
337
+ r = args[3]
338
+ @version = RPMVersion.new(e, v, r)
339
+ @a = args[4]
340
+ @provides = args[5]
341
+ else
342
+ raise ArgumentError, "Expecting either 'name, epoch-version-release, arch, provides' " +
343
+ "or 'name, epoch, version, release, arch, provides'"
344
+ end
345
+
346
+ # We always have one, ourselves!
347
+ if @provides.empty?
348
+ @provides = [ RPMProvide.new(@n, @version.evr, :==) ]
349
+ end
350
+ end
351
+ attr_reader :n, :a, :version, :provides
352
+ alias :name :n
353
+ alias :arch :a
354
+
355
+ def <=>(y)
356
+ compare(y)
357
+ end
358
+
359
+ def compare(y)
360
+ x = self
361
+
362
+ # easy! :)
363
+ return 0 if x.nevra == y.nevra
364
+
365
+ # compare name
366
+ if x.n.nil? == false && y.n.nil?
367
+ return 1
368
+ elsif x.n.nil? && y.n.nil? == false
369
+ return -1
370
+ elsif x.n.nil? == false && y.n.nil? == false
371
+ if x.n < y.n
372
+ return -1
373
+ elsif x.n > y.n
374
+ return 1
375
+ end
376
+ end
377
+
378
+ # compare version
379
+ if x.version > y.version
380
+ return 1
381
+ elsif x.version < y.version
382
+ return -1
383
+ end
384
+
385
+ # compare arch
386
+ if x.a.nil? == false && y.a.nil?
387
+ return 1
388
+ elsif x.a.nil? && y.a.nil? == false
389
+ return -1
390
+ elsif x.a.nil? == false && y.a.nil? == false
391
+ if x.a < y.a
392
+ return -1
393
+ elsif x.a > y.a
394
+ return 1
395
+ end
396
+ end
397
+
398
+ return 0
399
+ end
400
+
401
+ def to_s
402
+ nevra
403
+ end
404
+
405
+ def nevra
406
+ "#{@n}-#{@version.evr}.#{@a}"
407
+ end
408
+ end
409
+
410
+ # Simple implementation from rpm and ruby-rpm reference code
411
+ class RPMDependency
412
+ def initialize(*args)
413
+ if args.size == 3
414
+ @name = args[0]
415
+ @version = RPMVersion.new(args[1])
416
+ # Our requirement to other dependencies
417
+ @flag = args[2] || :==
418
+ elsif args.size == 5
419
+ @name = args[0]
420
+ e = args[1].to_i
421
+ v = args[2]
422
+ r = args[3]
423
+ @version = RPMVersion.new(e, v, r)
424
+ @flag = args[4] || :==
425
+ else
426
+ raise ArgumentError, "Expecting either 'name, epoch-version-release, flag' or " +
427
+ "'name, epoch, version, release, flag'"
428
+ end
429
+ end
430
+ attr_reader :name, :version, :flag
431
+
432
+ # Parses 2 forms:
433
+ #
434
+ # "mtr >= 2:0.71-3.0"
435
+ # "mta"
436
+ def self.parse(string)
437
+ if %r{^(\S+)\s+(>|>=|=|==|<=|<)\s+(\S+)$}.match(string) # rubocop:disable Performance/RedundantMatch
438
+ name = $1
439
+ if $2 == "="
440
+ flag = :==
441
+ else
442
+ flag = :"#{$2}"
443
+ end
444
+ version = $3
445
+
446
+ return self.new(name, version, flag)
447
+ else
448
+ name = string
449
+ return self.new(name, nil, nil)
450
+ end
451
+ end
452
+
453
+ # Test if another RPMDependency satisfies our requirements
454
+ def satisfy?(y)
455
+ unless y.kind_of?(RPMDependency)
456
+ raise ArgumentError, "Expecting an RPMDependency object"
457
+ end
458
+
459
+ x = self
460
+
461
+ # Easy!
462
+ if x.name != y.name
463
+ return false
464
+ end
465
+
466
+ # Partial compare
467
+ #
468
+ # eg: x.version 2.3 == y.version 2.3-1
469
+ sense = x.version.partial_compare(y.version)
470
+
471
+ # Thanks to rpmdsCompare() rpmds.c
472
+ if (sense < 0) && ((x.flag == :> || x.flag == :>=) || (y.flag == :<= || y.flag == :<))
473
+ return true
474
+ elsif (sense > 0) && ((x.flag == :< || x.flag == :<=) || (y.flag == :>= || y.flag == :>))
475
+ return true
476
+ elsif sense == 0 && (
477
+ ((x.flag == :== || x.flag == :<= || x.flag == :>=) && (y.flag == :== || y.flag == :<= || y.flag == :>=)) ||
478
+ (x.flag == :< && y.flag == :<) ||
479
+ (x.flag == :> && y.flag == :>)
480
+ )
481
+ return true
482
+ end
483
+
484
+ return false
485
+ end
486
+ end
487
+
488
+ class RPMProvide < RPMDependency; end
489
+ class RPMRequire < RPMDependency; end
490
+
491
+ class RPMDbPackage < RPMPackage
492
+ # <rpm parts>, installed, available
493
+ def initialize(*args)
494
+ @repoid = args.pop
495
+ # state
496
+ @available = args.pop
497
+ @installed = args.pop
498
+ super(*args)
499
+ end
500
+ attr_reader :repoid, :available, :installed
501
+ end
502
+
503
+ # Simple storage for RPMPackage objects - keeps them unique and sorted
504
+ class RPMDb
505
+ def initialize
506
+ # package name => [ RPMPackage, RPMPackage ] of different versions
507
+ @rpms = Hash.new
508
+ # package nevra => RPMPackage for lookups
509
+ @index = Hash.new
510
+ # provide name (aka feature) => [RPMPackage, RPMPackage] each providing this feature
511
+ @provides = Hash.new
512
+ # RPMPackages listed as available
513
+ @available = Set.new
514
+ # RPMPackages listed as installed
515
+ @installed = Set.new
516
+ end
517
+
518
+ def [](package_name)
519
+ self.lookup(package_name)
520
+ end
521
+
522
+ # Lookup package_name and return a descending array of package objects
523
+ def lookup(package_name)
524
+ pkgs = @rpms[package_name]
525
+ if pkgs
526
+ return pkgs.sort.reverse
527
+ else
528
+ return nil
529
+ end
530
+ end
531
+
532
+ def lookup_provides(provide_name)
533
+ @provides[provide_name]
534
+ end
535
+
536
+ # Using the package name as a key, and nevra for an index, keep a unique list of packages.
537
+ # The available/installed state can be overwritten for existing packages.
538
+ def push(*args)
539
+ args.flatten.each do |new_rpm|
540
+ unless new_rpm.kind_of?(RPMDbPackage)
541
+ raise ArgumentError, "Expecting an RPMDbPackage object"
542
+ end
543
+
544
+ @rpms[new_rpm.n] ||= Array.new
545
+
546
+ # we may already have this one, like when the installed list is refreshed
547
+ idx = @index[new_rpm.nevra]
548
+ if idx
549
+ # grab the existing package if it's not
550
+ curr_rpm = idx
551
+ else
552
+ @rpms[new_rpm.n] << new_rpm
553
+
554
+ new_rpm.provides.each do |provide|
555
+ @provides[provide.name] ||= Array.new
556
+ @provides[provide.name] << new_rpm
557
+ end
558
+
559
+ curr_rpm = new_rpm
560
+ end
561
+
562
+ # Track the nevra -> RPMPackage association to avoid having to compare versions
563
+ # with @rpms[new_rpm.n] on the next round
564
+ @index[new_rpm.nevra] = curr_rpm
565
+
566
+ # these are overwritten for existing packages
567
+ if new_rpm.available
568
+ @available << curr_rpm
569
+ end
570
+ if new_rpm.installed
571
+ @installed << curr_rpm
572
+ end
573
+ end
574
+ end
575
+
576
+ def <<(*args)
577
+ self.push(args)
578
+ end
579
+
580
+ def clear
581
+ @rpms.clear
582
+ @index.clear
583
+ @provides.clear
584
+ clear_available
585
+ clear_installed
586
+ end
587
+
588
+ def clear_available
589
+ @available.clear
590
+ end
591
+
592
+ def clear_installed
593
+ @installed.clear
594
+ end
595
+
596
+ def size
597
+ @rpms.size
598
+ end
599
+ alias :length :size
600
+
601
+ def available_size
602
+ @available.size
603
+ end
604
+
605
+ def installed_size
606
+ @installed.size
607
+ end
608
+
609
+ def available?(package)
610
+ @available.include?(package)
611
+ end
612
+
613
+ def installed?(package)
614
+ @installed.include?(package)
615
+ end
616
+
617
+ def whatprovides(rpmdep)
618
+ unless rpmdep.kind_of?(RPMDependency)
619
+ raise ArgumentError, "Expecting an RPMDependency object"
620
+ end
621
+
622
+ what = []
623
+
624
+ packages = lookup_provides(rpmdep.name)
625
+ if packages
626
+ packages.each do |pkg|
627
+ pkg.provides.each do |provide|
628
+ if provide.satisfy?(rpmdep)
629
+ what << pkg
630
+ end
631
+ end
632
+ end
633
+ end
634
+
635
+ return what
636
+ end
637
+ end
638
+
639
+ end
640
+ end
641
+ end
642
+ end