chef-dk 0.14.25 → 0.15.9
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.
- checksums.yaml +4 -4
- data/Gemfile +15 -12
- data/Gemfile.lock +56 -82
- data/LICENSE +201 -201
- data/acceptance/.shared/kitchen_acceptance/.kitchen.digitalocean.yml +27 -27
- data/acceptance/.shared/kitchen_acceptance/.kitchen.ec2.yml +288 -288
- data/acceptance/.shared/kitchen_acceptance/.kitchen.vagrant.yml +52 -52
- data/acceptance/.shared/kitchen_acceptance/libraries/kitchen.rb +51 -51
- data/acceptance/.shared/kitchen_acceptance/metadata.rb +1 -1
- data/acceptance/Gemfile.lock +18 -21
- data/acceptance/README.md +132 -132
- data/acceptance/trivial/.acceptance/acceptance-cookbook/.gitignore +2 -2
- data/acceptance/trivial/.acceptance/acceptance-cookbook/metadata.rb +2 -2
- data/acceptance/trivial/.acceptance/acceptance-cookbook/recipes/destroy.rb +1 -1
- data/acceptance/trivial/.acceptance/acceptance-cookbook/recipes/provision.rb +1 -1
- data/acceptance/trivial/.acceptance/acceptance-cookbook/recipes/verify.rb +1 -1
- data/acceptance/trivial/.kitchen.yml +7 -7
- data/acceptance/trivial/test/integration/chefdk-current-install/inspec/chef_client_spec.rb +5 -5
- data/bin/chef +25 -25
- data/chef-dk.gemspec +1 -0
- data/lib/chef-dk.rb +19 -19
- data/lib/chef-dk/authenticated_http.rb +40 -40
- data/lib/chef-dk/chef_runner.rb +1 -1
- data/lib/chef-dk/cli.rb +2 -2
- data/lib/chef-dk/command/base.rb +79 -79
- data/lib/chef-dk/command/clean_policy_cookbooks.rb +116 -116
- data/lib/chef-dk/command/clean_policy_revisions.rb +113 -113
- data/lib/chef-dk/command/delete_policy.rb +122 -122
- data/lib/chef-dk/command/delete_policy_group.rb +122 -122
- data/lib/chef-dk/command/diff.rb +316 -316
- data/lib/chef-dk/command/env.rb +90 -90
- data/lib/chef-dk/command/exec.rb +45 -45
- data/lib/chef-dk/command/export.rb +2 -2
- data/lib/chef-dk/command/gem.rb +47 -47
- data/lib/chef-dk/command/generate.rb +2 -0
- data/lib/chef-dk/command/generator_commands/app.rb +107 -107
- data/lib/chef-dk/command/generator_commands/attribute.rb +37 -37
- data/lib/chef-dk/command/generator_commands/base.rb +148 -148
- data/lib/chef-dk/command/generator_commands/build_cookbook.rb +110 -0
- data/lib/chef-dk/command/generator_commands/cookbook.rb +21 -0
- data/lib/chef-dk/command/generator_commands/cookbook_code_file.rb +100 -100
- data/lib/chef-dk/command/generator_commands/cookbook_file.rb +45 -45
- data/lib/chef-dk/command/generator_commands/generator_generator.rb +177 -177
- data/lib/chef-dk/command/generator_commands/lwrp.rb +36 -36
- data/lib/chef-dk/command/generator_commands/policyfile.rb +127 -127
- data/lib/chef-dk/command/generator_commands/recipe.rb +36 -36
- data/lib/chef-dk/command/generator_commands/repo.rb +125 -125
- data/lib/chef-dk/command/generator_commands/template.rb +46 -46
- data/lib/chef-dk/command/install.rb +121 -121
- data/lib/chef-dk/command/provision.rb +438 -438
- data/lib/chef-dk/command/push.rb +118 -118
- data/lib/chef-dk/command/push_archive.rb +126 -126
- data/lib/chef-dk/command/shell_init.rb +180 -180
- data/lib/chef-dk/command/show_policy.rb +165 -165
- data/lib/chef-dk/command/undelete.rb +155 -155
- data/lib/chef-dk/command/update.rb +148 -148
- data/lib/chef-dk/command/verify.rb +9 -11
- data/lib/chef-dk/completions/bash.sh.erb +5 -5
- data/lib/chef-dk/completions/chef.fish.erb +10 -10
- data/lib/chef-dk/completions/zsh.zsh.erb +21 -21
- data/lib/chef-dk/configurable.rb +69 -69
- data/lib/chef-dk/cookbook_metadata.rb +45 -45
- data/lib/chef-dk/cookbook_omnifetch.rb +32 -32
- data/lib/chef-dk/cookbook_profiler/git.rb +151 -151
- data/lib/chef-dk/cookbook_profiler/identifiers.rb +72 -72
- data/lib/chef-dk/cookbook_profiler/null_scm.rb +32 -32
- data/lib/chef-dk/exceptions.rb +129 -129
- data/lib/chef-dk/helpers.rb +24 -17
- data/lib/chef-dk/pager.rb +106 -106
- data/lib/chef-dk/policyfile/chef_repo_cookbook_source.rb +138 -138
- data/lib/chef-dk/policyfile/chef_server_cookbook_source.rb +54 -54
- data/lib/chef-dk/policyfile/community_cookbook_source.rb +97 -97
- data/lib/chef-dk/policyfile/comparison_base.rb +124 -124
- data/lib/chef-dk/policyfile/cookbook_location_specification.rb +154 -154
- data/lib/chef-dk/policyfile/cookbook_locks.rb +466 -466
- data/lib/chef-dk/policyfile/cookbook_sources.rb +22 -22
- data/lib/chef-dk/policyfile/delivery_supermarket_source.rb +90 -90
- data/lib/chef-dk/policyfile/differ.rb +266 -266
- data/lib/chef-dk/policyfile/dsl.rb +261 -261
- data/lib/chef-dk/policyfile/lister.rb +232 -232
- data/lib/chef-dk/policyfile/null_cookbook_source.rb +45 -45
- data/lib/chef-dk/policyfile/read_cookbook_for_compat_mode_upload.rb +124 -124
- data/lib/chef-dk/policyfile/reports/install.rb +70 -70
- data/lib/chef-dk/policyfile/reports/table_printer.rb +58 -58
- data/lib/chef-dk/policyfile/reports/upload.rb +70 -70
- data/lib/chef-dk/policyfile/solution_dependencies.rb +298 -298
- data/lib/chef-dk/policyfile/storage_config.rb +100 -100
- data/lib/chef-dk/policyfile/undo_record.rb +142 -142
- data/lib/chef-dk/policyfile/undo_stack.rb +130 -130
- data/lib/chef-dk/policyfile/uploader.rb +213 -213
- data/lib/chef-dk/policyfile_compiler.rb +419 -419
- data/lib/chef-dk/policyfile_lock.rb +552 -552
- data/lib/chef-dk/policyfile_services/clean_policies.rb +95 -95
- data/lib/chef-dk/policyfile_services/clean_policy_cookbooks.rb +125 -125
- data/lib/chef-dk/policyfile_services/export_repo.rb +421 -421
- data/lib/chef-dk/policyfile_services/install.rb +126 -126
- data/lib/chef-dk/policyfile_services/push_archive.rb +204 -204
- data/lib/chef-dk/policyfile_services/rm_policy.rb +142 -142
- data/lib/chef-dk/policyfile_services/rm_policy_group.rb +86 -86
- data/lib/chef-dk/policyfile_services/show_policy.rb +237 -237
- data/lib/chef-dk/policyfile_services/undelete.rb +108 -108
- data/lib/chef-dk/policyfile_services/update_attributes.rb +104 -104
- data/lib/chef-dk/service_exception_inspectors.rb +25 -25
- data/lib/chef-dk/service_exception_inspectors/base.rb +40 -40
- data/lib/chef-dk/service_exception_inspectors/http.rb +121 -121
- data/lib/chef-dk/service_exceptions.rb +143 -143
- data/lib/chef-dk/shell_out.rb +36 -36
- data/lib/chef-dk/skeletons/code_generator/files/default/Berksfile +3 -3
- data/lib/chef-dk/skeletons/code_generator/files/default/build-cookbook/.kitchen.yml +21 -0
- data/lib/chef-dk/skeletons/code_generator/files/default/build-cookbook/README.md +146 -0
- data/lib/chef-dk/skeletons/code_generator/files/default/build-cookbook/test-fixture-recipe.rb +7 -0
- data/lib/chef-dk/skeletons/code_generator/files/default/chefignore +102 -102
- data/lib/chef-dk/skeletons/code_generator/files/default/cookbook_readmes/README-policy.md +9 -9
- data/lib/chef-dk/skeletons/code_generator/files/default/cookbook_readmes/README.md +54 -54
- data/lib/chef-dk/skeletons/code_generator/files/default/delivery-config.json +10 -0
- data/lib/chef-dk/skeletons/code_generator/files/default/gitignore +16 -16
- data/lib/chef-dk/skeletons/code_generator/files/default/repo/README.md +28 -28
- data/lib/chef-dk/skeletons/code_generator/files/default/repo/cookbooks/example/README.md +27 -27
- data/lib/chef-dk/skeletons/code_generator/files/default/repo/cookbooks/example/attributes/default.rb +7 -7
- data/lib/chef-dk/skeletons/code_generator/files/default/repo/cookbooks/example/metadata.rb +3 -3
- data/lib/chef-dk/skeletons/code_generator/files/default/repo/cookbooks/example/recipes/default.rb +8 -8
- data/lib/chef-dk/skeletons/code_generator/files/default/repo/data_bags/README.md +58 -58
- data/lib/chef-dk/skeletons/code_generator/files/default/repo/data_bags/example/example_item.json +3 -3
- data/lib/chef-dk/skeletons/code_generator/files/default/repo/dot-chef-repo.txt +6 -6
- data/lib/chef-dk/skeletons/code_generator/files/default/repo/environments/README.md +9 -9
- data/lib/chef-dk/skeletons/code_generator/files/default/repo/environments/example.json +12 -12
- data/lib/chef-dk/skeletons/code_generator/files/default/repo/policies/README.md +24 -24
- data/lib/chef-dk/skeletons/code_generator/files/default/repo/roles/README.md +9 -9
- data/lib/chef-dk/skeletons/code_generator/files/default/repo/roles/example.json +12 -12
- data/lib/chef-dk/skeletons/code_generator/files/default/serverspec_spec_helper.rb +8 -8
- data/lib/chef-dk/skeletons/code_generator/files/default/spec_helper.rb +2 -2
- data/lib/chef-dk/skeletons/code_generator/files/default/spec_helper_policyfile.rb +2 -2
- data/lib/chef-dk/skeletons/code_generator/metadata.rb +8 -8
- data/lib/chef-dk/skeletons/code_generator/recipes/app.rb +97 -97
- data/lib/chef-dk/skeletons/code_generator/recipes/attribute.rb +12 -12
- data/lib/chef-dk/skeletons/code_generator/recipes/build_cookbook.rb +88 -0
- data/lib/chef-dk/skeletons/code_generator/recipes/cookbook.rb +6 -0
- data/lib/chef-dk/skeletons/code_generator/recipes/cookbook_file.rb +24 -24
- data/lib/chef-dk/skeletons/code_generator/recipes/lwrp.rb +23 -23
- data/lib/chef-dk/skeletons/code_generator/recipes/policyfile.rb +8 -8
- data/lib/chef-dk/skeletons/code_generator/recipes/recipe.rb +27 -27
- data/lib/chef-dk/skeletons/code_generator/recipes/repo.rb +67 -67
- data/lib/chef-dk/skeletons/code_generator/recipes/template.rb +32 -32
- data/lib/chef-dk/skeletons/code_generator/templates/default/LICENSE.all_rights.erb +3 -3
- data/lib/chef-dk/skeletons/code_generator/templates/default/LICENSE.gplv2.erb +339 -339
- data/lib/chef-dk/skeletons/code_generator/templates/default/LICENSE.gplv3.erb +674 -674
- data/lib/chef-dk/skeletons/code_generator/templates/default/LICENSE.mit.erb +21 -21
- data/lib/chef-dk/skeletons/code_generator/templates/default/Policyfile.rb.erb +25 -25
- data/lib/chef-dk/skeletons/code_generator/templates/default/README.md.erb +4 -4
- data/lib/chef-dk/skeletons/code_generator/templates/default/build-cookbook/Berksfile.erb +20 -0
- data/lib/chef-dk/skeletons/code_generator/templates/default/build-cookbook/metadata.rb.erb +9 -0
- data/lib/chef-dk/skeletons/code_generator/templates/default/build-cookbook/recipe.rb.erb +8 -0
- data/lib/chef-dk/skeletons/code_generator/templates/default/kitchen.yml.erb +3 -2
- data/lib/chef-dk/skeletons/code_generator/templates/default/kitchen_policyfile.yml.erb +3 -2
- data/lib/chef-dk/skeletons/code_generator/templates/default/metadata.rb.erb +7 -7
- data/lib/chef-dk/skeletons/code_generator/templates/default/recipe.rb.erb +5 -5
- data/lib/chef-dk/skeletons/code_generator/templates/default/recipe_spec.rb.erb +20 -20
- data/lib/chef-dk/skeletons/code_generator/templates/default/repo/gitignore.erb +11 -11
- data/lib/chef-dk/skeletons/code_generator/templates/default/serverspec_default_spec.rb.erb +9 -9
- data/lib/chef-dk/ui.rb +58 -58
- data/lib/chef-dk/version.rb +1 -1
- data/lib/kitchen/provisioner/policyfile_zero.rb +195 -195
- data/omnibus_overrides.rb +2 -1
- data/spec/shared/a_file_generator.rb +125 -125
- data/spec/shared/a_generated_file.rb +12 -12
- data/spec/shared/command_with_ui_object.rb +11 -11
- data/spec/shared/fixture_cookbook_checksums.rb +47 -47
- data/spec/shared/setup_git_cookbooks.rb +53 -53
- data/spec/spec_helper.rb +51 -51
- data/spec/test_helpers.rb +84 -84
- data/spec/unit/chef_runner_spec.rb +1 -1
- data/spec/unit/cli_spec.rb +23 -6
- data/spec/unit/command/clean_policy_cookbooks_spec.rb +181 -181
- data/spec/unit/command/clean_policy_revisions_spec.rb +181 -181
- data/spec/unit/command/delete_policy_group_spec.rb +207 -207
- data/spec/unit/command/delete_policy_spec.rb +207 -207
- data/spec/unit/command/diff_spec.rb +312 -312
- data/spec/unit/command/env_spec.rb +52 -52
- data/spec/unit/command/exec_spec.rb +179 -179
- data/spec/unit/command/export_spec.rb +200 -200
- data/spec/unit/command/generate_spec.rb +142 -142
- data/spec/unit/command/generator_commands/app_spec.rb +169 -169
- data/spec/unit/command/generator_commands/attribute_spec.rb +32 -32
- data/spec/unit/command/generator_commands/base_spec.rb +136 -136
- data/spec/unit/command/generator_commands/build_cookbook_spec.rb +309 -0
- data/spec/unit/command/generator_commands/cookbook_file_spec.rb +32 -32
- data/spec/unit/command/generator_commands/cookbook_spec.rb +98 -4
- data/spec/unit/command/generator_commands/generator_generator_spec.rb +229 -229
- data/spec/unit/command/generator_commands/lwrp_spec.rb +32 -32
- data/spec/unit/command/generator_commands/policyfile_spec.rb +225 -225
- data/spec/unit/command/generator_commands/recipe_spec.rb +34 -34
- data/spec/unit/command/generator_commands/template_spec.rb +32 -32
- data/spec/unit/command/install_spec.rb +179 -179
- data/spec/unit/command/provision_spec.rb +592 -592
- data/spec/unit/command/push_archive_spec.rb +153 -153
- data/spec/unit/command/push_spec.rb +199 -199
- data/spec/unit/command/shell_init_spec.rb +329 -329
- data/spec/unit/command/show_policy_spec.rb +235 -235
- data/spec/unit/command/undelete_spec.rb +246 -246
- data/spec/unit/command/update_spec.rb +275 -275
- data/spec/unit/command/verify_spec.rb +1 -3
- data/spec/unit/commands_map_spec.rb +57 -57
- data/spec/unit/configurable_spec.rb +41 -41
- data/spec/unit/cookbook_metadata_spec.rb +98 -98
- data/spec/unit/cookbook_profiler/git_spec.rb +176 -176
- data/spec/unit/cookbook_profiler/identifiers_spec.rb +83 -83
- data/spec/unit/fixtures/chef-runner-cookbooks/test_cookbook/recipes/recipe_one.rb +9 -9
- data/spec/unit/fixtures/chef-runner-cookbooks/test_cookbook/recipes/recipe_two.rb +9 -9
- data/spec/unit/fixtures/command/cli_test_command.rb +26 -26
- data/spec/unit/fixtures/command/explicit_path_example.rb +7 -7
- data/spec/unit/fixtures/configurable/test_config_loader.rb +5 -5
- data/spec/unit/fixtures/configurable/test_configurable.rb +10 -10
- data/spec/unit/fixtures/cookbook_cache/baz-f59ee7a5bca6a4e606b67f7f856b768d847c39bb/.kitchen.yml +16 -16
- data/spec/unit/fixtures/cookbook_cache/baz-f59ee7a5bca6a4e606b67f7f856b768d847c39bb/Berksfile +3 -3
- data/spec/unit/fixtures/cookbook_cache/baz-f59ee7a5bca6a4e606b67f7f856b768d847c39bb/README.md +4 -4
- data/spec/unit/fixtures/cookbook_cache/baz-f59ee7a5bca6a4e606b67f7f856b768d847c39bb/chefignore +96 -96
- data/spec/unit/fixtures/cookbook_cache/baz-f59ee7a5bca6a4e606b67f7f856b768d847c39bb/metadata.rb +8 -8
- data/spec/unit/fixtures/cookbook_cache/baz-f59ee7a5bca6a4e606b67f7f856b768d847c39bb/recipes/default.rb +8 -8
- data/spec/unit/fixtures/cookbook_cache/dep_of_bar-1.2.3/.kitchen.yml +16 -16
- data/spec/unit/fixtures/cookbook_cache/dep_of_bar-1.2.3/Berksfile +3 -3
- data/spec/unit/fixtures/cookbook_cache/dep_of_bar-1.2.3/README.md +4 -4
- data/spec/unit/fixtures/cookbook_cache/dep_of_bar-1.2.3/chefignore +96 -96
- data/spec/unit/fixtures/cookbook_cache/dep_of_bar-1.2.3/metadata.rb +8 -8
- data/spec/unit/fixtures/cookbook_cache/dep_of_bar-1.2.3/recipes/default.rb +8 -8
- data/spec/unit/fixtures/cookbook_cache/foo-1.0.0/.kitchen.yml +16 -16
- data/spec/unit/fixtures/cookbook_cache/foo-1.0.0/Berksfile +3 -3
- data/spec/unit/fixtures/cookbook_cache/foo-1.0.0/README.md +4 -4
- data/spec/unit/fixtures/cookbook_cache/foo-1.0.0/chefignore +96 -96
- data/spec/unit/fixtures/cookbook_cache/foo-1.0.0/metadata.rb +8 -8
- data/spec/unit/fixtures/cookbook_cache/foo-1.0.0/recipes/default.rb +8 -8
- data/spec/unit/fixtures/cookbooks_api/pruned_small_universe.json +1321 -1321
- data/spec/unit/fixtures/cookbooks_api/small_universe.json +2987 -2987
- data/spec/unit/fixtures/cookbooks_api/universe.json +1 -1
- data/spec/unit/fixtures/cookbooks_api/update_fixtures.rb +36 -36
- data/spec/unit/fixtures/dev_cookbooks/README.md +16 -16
- data/spec/unit/fixtures/eg_omnibus_dir/valid/embedded/apps/berkshelf/integration_test +2 -2
- data/spec/unit/fixtures/eg_omnibus_dir/valid/embedded/apps/berkshelf/verify_me +5 -5
- data/spec/unit/fixtures/eg_omnibus_dir/valid/embedded/apps/chef/verify_me +3 -3
- data/spec/unit/fixtures/eg_omnibus_dir/valid/embedded/apps/test-kitchen/verify_me +2 -2
- data/spec/unit/fixtures/example_cookbook/.gitignore +17 -17
- data/spec/unit/fixtures/example_cookbook/.kitchen.yml +16 -16
- data/spec/unit/fixtures/example_cookbook/Berksfile +3 -3
- data/spec/unit/fixtures/example_cookbook/README.md +4 -4
- data/spec/unit/fixtures/example_cookbook/chefignore +96 -96
- data/spec/unit/fixtures/example_cookbook/metadata.rb +8 -8
- data/spec/unit/fixtures/example_cookbook/recipes/default.rb +8 -8
- data/spec/unit/fixtures/example_cookbook_metadata_json_only/.gitignore +17 -17
- data/spec/unit/fixtures/example_cookbook_metadata_json_only/.kitchen.yml +16 -16
- data/spec/unit/fixtures/example_cookbook_metadata_json_only/Berksfile +3 -3
- data/spec/unit/fixtures/example_cookbook_metadata_json_only/README.md +4 -4
- data/spec/unit/fixtures/example_cookbook_metadata_json_only/chefignore +96 -96
- data/spec/unit/fixtures/example_cookbook_metadata_json_only/metadata.json +5 -5
- data/spec/unit/fixtures/example_cookbook_metadata_json_only/recipes/default.rb +8 -8
- data/spec/unit/fixtures/example_cookbook_no_metadata/.gitignore +17 -17
- data/spec/unit/fixtures/example_cookbook_no_metadata/.kitchen.yml +16 -16
- data/spec/unit/fixtures/example_cookbook_no_metadata/Berksfile +3 -3
- data/spec/unit/fixtures/example_cookbook_no_metadata/README.md +4 -4
- data/spec/unit/fixtures/example_cookbook_no_metadata/chefignore +96 -96
- data/spec/unit/fixtures/example_cookbook_no_metadata/recipes/default.rb +8 -8
- data/spec/unit/fixtures/local_path_cookbooks/another-local-cookbook/README.md +4 -4
- data/spec/unit/fixtures/local_path_cookbooks/another-local-cookbook/chefignore +96 -96
- data/spec/unit/fixtures/local_path_cookbooks/another-local-cookbook/metadata.rb +8 -8
- data/spec/unit/fixtures/local_path_cookbooks/another-local-cookbook/recipes/default.rb +8 -8
- data/spec/unit/fixtures/local_path_cookbooks/cookbook-with-a-dep/Berksfile +3 -3
- data/spec/unit/fixtures/local_path_cookbooks/cookbook-with-a-dep/README.md +4 -4
- data/spec/unit/fixtures/local_path_cookbooks/cookbook-with-a-dep/chefignore +96 -96
- data/spec/unit/fixtures/local_path_cookbooks/cookbook-with-a-dep/metadata.rb +9 -9
- data/spec/unit/fixtures/local_path_cookbooks/cookbook-with-a-dep/recipes/default.rb +8 -8
- data/spec/unit/fixtures/local_path_cookbooks/local-cookbook/.kitchen.yml +16 -16
- data/spec/unit/fixtures/local_path_cookbooks/local-cookbook/Berksfile +3 -3
- data/spec/unit/fixtures/local_path_cookbooks/local-cookbook/README.md +4 -4
- data/spec/unit/fixtures/local_path_cookbooks/local-cookbook/chefignore +96 -96
- data/spec/unit/fixtures/local_path_cookbooks/local-cookbook/metadata.rb +8 -8
- data/spec/unit/fixtures/local_path_cookbooks/local-cookbook/recipes/default.rb +8 -8
- data/spec/unit/fixtures/local_path_cookbooks/metadata-missing/README.md +2 -2
- data/spec/unit/fixtures/local_path_cookbooks/noignore-f59ee7a5bca6a4e606b67f7f856b768d847c39bb/.kitchen.yml +16 -16
- data/spec/unit/fixtures/local_path_cookbooks/noignore-f59ee7a5bca6a4e606b67f7f856b768d847c39bb/README.md +4 -4
- data/spec/unit/fixtures/local_path_cookbooks/noignore-f59ee7a5bca6a4e606b67f7f856b768d847c39bb/metadata.rb +8 -8
- data/spec/unit/fixtures/local_path_cookbooks/noignore-f59ee7a5bca6a4e606b67f7f856b768d847c39bb/recipes/default.rb +8 -8
- data/spec/unit/gemfile_util_spec.rb +41 -0
- data/spec/unit/helpers_spec.rb +19 -0
- data/spec/unit/pager_spec.rb +119 -119
- data/spec/unit/policyfile/chef_repo_cookbook_source_spec.rb +93 -93
- data/spec/unit/policyfile/chef_server_cookbook_source_spec.rb +34 -34
- data/spec/unit/policyfile/community_cookbook_source_spec.rb +84 -84
- data/spec/unit/policyfile/comparison_base_spec.rb +343 -343
- data/spec/unit/policyfile/cookbook_location_specification_spec.rb +277 -277
- data/spec/unit/policyfile/cookbook_locks_spec.rb +529 -529
- data/spec/unit/policyfile/delivery_supermarket_source_spec.rb +130 -130
- data/spec/unit/policyfile/differ_spec.rb +687 -687
- data/spec/unit/policyfile/lister_spec.rb +272 -272
- data/spec/unit/policyfile/null_cookbook_source_spec.rb +35 -35
- data/spec/unit/policyfile/read_cookbook_for_compat_mode_upload_spec.rb +92 -92
- data/spec/unit/policyfile/reports/install_spec.rb +115 -115
- data/spec/unit/policyfile/reports/upload_spec.rb +96 -96
- data/spec/unit/policyfile/solution_dependencies_spec.rb +145 -145
- data/spec/unit/policyfile/storage_config_spec.rb +172 -172
- data/spec/unit/policyfile/undo_record_spec.rb +260 -260
- data/spec/unit/policyfile/undo_stack_spec.rb +266 -266
- data/spec/unit/policyfile/uploader_spec.rb +410 -410
- data/spec/unit/policyfile_demands_spec.rb +1203 -1203
- data/spec/unit/policyfile_evaluation_spec.rb +642 -642
- data/spec/unit/policyfile_lock_build_spec.rb +1056 -1056
- data/spec/unit/policyfile_lock_install_spec.rb +138 -138
- data/spec/unit/policyfile_lock_serialization_spec.rb +425 -425
- data/spec/unit/policyfile_lock_validation_spec.rb +611 -611
- data/spec/unit/policyfile_services/clean_policies_spec.rb +236 -236
- data/spec/unit/policyfile_services/clean_policy_cookbooks_spec.rb +275 -275
- data/spec/unit/policyfile_services/export_repo_spec.rb +481 -481
- data/spec/unit/policyfile_services/install_spec.rb +211 -211
- data/spec/unit/policyfile_services/push_archive_spec.rb +378 -378
- data/spec/unit/policyfile_services/push_spec.rb +233 -233
- data/spec/unit/policyfile_services/rm_policy_group_spec.rb +241 -241
- data/spec/unit/policyfile_services/rm_policy_spec.rb +266 -266
- data/spec/unit/policyfile_services/show_policy_spec.rb +889 -889
- data/spec/unit/policyfile_services/undelete_spec.rb +304 -304
- data/spec/unit/policyfile_services/update_attributes_spec.rb +217 -217
- data/spec/unit/service_exception_inspectors/base_spec.rb +43 -43
- data/spec/unit/service_exception_inspectors/http_spec.rb +140 -140
- data/spec/unit/shell_out_spec.rb +34 -34
- data/tasks/bin/bundle-platform +6 -2
- data/tasks/bin/bundle-platform.bat +0 -0
- data/tasks/bin/create-override-gemfile +0 -0
- data/tasks/bundle_util.rb +18 -2
- data/tasks/gemfile_util.rb +53 -8
- data/version_policy.rb +9 -1
- data/warning.txt +9 -9
- metadata +30 -3
|
@@ -1,140 +1,140 @@
|
|
|
1
|
-
#
|
|
2
|
-
# Copyright:: Copyright (c) 2014 Chef Software Inc.
|
|
3
|
-
# License:: Apache License, Version 2.0
|
|
4
|
-
#
|
|
5
|
-
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
6
|
-
# you may not use this file except in compliance with the License.
|
|
7
|
-
# You may obtain a copy of the License at
|
|
8
|
-
#
|
|
9
|
-
# http://www.apache.org/licenses/LICENSE-2.0
|
|
10
|
-
#
|
|
11
|
-
# Unless required by applicable law or agreed to in writing, software
|
|
12
|
-
# distributed under the License is distributed on an "AS IS" BASIS,
|
|
13
|
-
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
14
|
-
# See the License for the specific language governing permissions and
|
|
15
|
-
# limitations under the License.
|
|
16
|
-
#
|
|
17
|
-
|
|
18
|
-
require 'spec_helper'
|
|
19
|
-
require 'net/http'
|
|
20
|
-
require 'chef/monkey_patches/net_http'
|
|
21
|
-
require 'chef-dk/service_exception_inspectors/http'
|
|
22
|
-
|
|
23
|
-
describe ChefDK::ServiceExceptionInspectors::HTTP do
|
|
24
|
-
|
|
25
|
-
let(:message) { "something went wrong, oops" }
|
|
26
|
-
|
|
27
|
-
let(:response_body) { "" }
|
|
28
|
-
|
|
29
|
-
let(:request_headers) do
|
|
30
|
-
{
|
|
31
|
-
"content-type" => "application/json",
|
|
32
|
-
"accept" => "application/json"
|
|
33
|
-
}
|
|
34
|
-
end
|
|
35
|
-
|
|
36
|
-
let(:request_body) { "this is the request" }
|
|
37
|
-
|
|
38
|
-
let(:request) do
|
|
39
|
-
r = instance_double(Net::HTTP::Post,
|
|
40
|
-
method: "POST",
|
|
41
|
-
uri: nil,
|
|
42
|
-
path: "/organizations/chef-oss-dev/cookbooks",
|
|
43
|
-
body: request_body)
|
|
44
|
-
stub = allow(r).to(receive(:each_header))
|
|
45
|
-
request_headers.each { |k,v| stub.and_yield(k,v) }
|
|
46
|
-
r
|
|
47
|
-
end
|
|
48
|
-
|
|
49
|
-
let(:response_headers) do
|
|
50
|
-
{
|
|
51
|
-
"server" => "ngx_openresty",
|
|
52
|
-
"date" => "Wed, 29 Oct 2014 22:27:47 GMT"
|
|
53
|
-
}
|
|
54
|
-
end
|
|
55
|
-
|
|
56
|
-
let(:response) do
|
|
57
|
-
r = instance_double(Net::HTTPClientError,
|
|
58
|
-
code: "400",
|
|
59
|
-
message: "Bad Request",
|
|
60
|
-
body: response_body)
|
|
61
|
-
stub = allow(r).to(receive(:each_header))
|
|
62
|
-
response_headers.each { |k,v| stub.and_yield(k,v) }
|
|
63
|
-
r
|
|
64
|
-
end
|
|
65
|
-
|
|
66
|
-
let(:exception) do
|
|
67
|
-
Net::HTTPServerException.new(message, response).tap {|e| e.chef_rest_request = request }
|
|
68
|
-
end
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
subject(:inspector) { described_class.new(exception) }
|
|
72
|
-
|
|
73
|
-
it "has an exception" do
|
|
74
|
-
expect(inspector.exception).to eq(exception)
|
|
75
|
-
end
|
|
76
|
-
|
|
77
|
-
context "with a string response body" do
|
|
78
|
-
|
|
79
|
-
let(:response_body) { "No sir, I didn't like it" }
|
|
80
|
-
|
|
81
|
-
it "gives a customized exception message including the server response" do
|
|
82
|
-
expect(inspector.message).to eq("HTTP 400 Bad Request: No sir, I didn't like it")
|
|
83
|
-
end
|
|
84
|
-
|
|
85
|
-
end
|
|
86
|
-
|
|
87
|
-
context "with an empty response body" do
|
|
88
|
-
|
|
89
|
-
let(:response_body) { "" }
|
|
90
|
-
|
|
91
|
-
it "gives a customized exception message including the server response" do
|
|
92
|
-
expect(inspector.message).to eq("HTTP 400 Bad Request: (No explanation provided by server)")
|
|
93
|
-
end
|
|
94
|
-
|
|
95
|
-
end
|
|
96
|
-
|
|
97
|
-
context "with a JSON response body in the standard Chef Server format" do
|
|
98
|
-
|
|
99
|
-
let(:response_body) { %q[{"error":["Field 'name' invalid"]}] }
|
|
100
|
-
|
|
101
|
-
it "gives a customized exception message including the server response" do
|
|
102
|
-
expect(inspector.message).to eq("HTTP 400 Bad Request: Field 'name' invalid")
|
|
103
|
-
end
|
|
104
|
-
|
|
105
|
-
end
|
|
106
|
-
|
|
107
|
-
describe "showing the request and response in extended error info" do
|
|
108
|
-
|
|
109
|
-
let(:response_body) { "this is the response" }
|
|
110
|
-
|
|
111
|
-
it "shows the request in a format similar to HTTP messages" do
|
|
112
|
-
expected_request_string = <<-E
|
|
113
|
-
--- REQUEST DATA ----
|
|
114
|
-
POST /organizations/chef-oss-dev/cookbooks
|
|
115
|
-
content-type: application/json
|
|
116
|
-
accept: application/json
|
|
117
|
-
|
|
118
|
-
this is the request
|
|
119
|
-
|
|
120
|
-
E
|
|
121
|
-
expect(inspector.extended_error_info).to include(expected_request_string)
|
|
122
|
-
end
|
|
123
|
-
|
|
124
|
-
it "shows the response in a format similar to HTTP messages" do
|
|
125
|
-
expected_response_string = <<-E
|
|
126
|
-
--- RESPONSE DATA ---
|
|
127
|
-
400 Bad Request
|
|
128
|
-
server: ngx_openresty
|
|
129
|
-
date: Wed, 29 Oct 2014 22:27:47 GMT
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
this is the response
|
|
133
|
-
E
|
|
134
|
-
expect(inspector.extended_error_info).to include(expected_response_string)
|
|
135
|
-
end
|
|
136
|
-
|
|
137
|
-
end
|
|
138
|
-
|
|
139
|
-
end
|
|
140
|
-
|
|
1
|
+
#
|
|
2
|
+
# Copyright:: Copyright (c) 2014 Chef Software Inc.
|
|
3
|
+
# License:: Apache License, Version 2.0
|
|
4
|
+
#
|
|
5
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
6
|
+
# you may not use this file except in compliance with the License.
|
|
7
|
+
# You may obtain a copy of the License at
|
|
8
|
+
#
|
|
9
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
|
10
|
+
#
|
|
11
|
+
# Unless required by applicable law or agreed to in writing, software
|
|
12
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
|
13
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
14
|
+
# See the License for the specific language governing permissions and
|
|
15
|
+
# limitations under the License.
|
|
16
|
+
#
|
|
17
|
+
|
|
18
|
+
require 'spec_helper'
|
|
19
|
+
require 'net/http'
|
|
20
|
+
require 'chef/monkey_patches/net_http'
|
|
21
|
+
require 'chef-dk/service_exception_inspectors/http'
|
|
22
|
+
|
|
23
|
+
describe ChefDK::ServiceExceptionInspectors::HTTP do
|
|
24
|
+
|
|
25
|
+
let(:message) { "something went wrong, oops" }
|
|
26
|
+
|
|
27
|
+
let(:response_body) { "" }
|
|
28
|
+
|
|
29
|
+
let(:request_headers) do
|
|
30
|
+
{
|
|
31
|
+
"content-type" => "application/json",
|
|
32
|
+
"accept" => "application/json"
|
|
33
|
+
}
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
let(:request_body) { "this is the request" }
|
|
37
|
+
|
|
38
|
+
let(:request) do
|
|
39
|
+
r = instance_double(Net::HTTP::Post,
|
|
40
|
+
method: "POST",
|
|
41
|
+
uri: nil,
|
|
42
|
+
path: "/organizations/chef-oss-dev/cookbooks",
|
|
43
|
+
body: request_body)
|
|
44
|
+
stub = allow(r).to(receive(:each_header))
|
|
45
|
+
request_headers.each { |k,v| stub.and_yield(k,v) }
|
|
46
|
+
r
|
|
47
|
+
end
|
|
48
|
+
|
|
49
|
+
let(:response_headers) do
|
|
50
|
+
{
|
|
51
|
+
"server" => "ngx_openresty",
|
|
52
|
+
"date" => "Wed, 29 Oct 2014 22:27:47 GMT"
|
|
53
|
+
}
|
|
54
|
+
end
|
|
55
|
+
|
|
56
|
+
let(:response) do
|
|
57
|
+
r = instance_double(Net::HTTPClientError,
|
|
58
|
+
code: "400",
|
|
59
|
+
message: "Bad Request",
|
|
60
|
+
body: response_body)
|
|
61
|
+
stub = allow(r).to(receive(:each_header))
|
|
62
|
+
response_headers.each { |k,v| stub.and_yield(k,v) }
|
|
63
|
+
r
|
|
64
|
+
end
|
|
65
|
+
|
|
66
|
+
let(:exception) do
|
|
67
|
+
Net::HTTPServerException.new(message, response).tap {|e| e.chef_rest_request = request }
|
|
68
|
+
end
|
|
69
|
+
|
|
70
|
+
|
|
71
|
+
subject(:inspector) { described_class.new(exception) }
|
|
72
|
+
|
|
73
|
+
it "has an exception" do
|
|
74
|
+
expect(inspector.exception).to eq(exception)
|
|
75
|
+
end
|
|
76
|
+
|
|
77
|
+
context "with a string response body" do
|
|
78
|
+
|
|
79
|
+
let(:response_body) { "No sir, I didn't like it" }
|
|
80
|
+
|
|
81
|
+
it "gives a customized exception message including the server response" do
|
|
82
|
+
expect(inspector.message).to eq("HTTP 400 Bad Request: No sir, I didn't like it")
|
|
83
|
+
end
|
|
84
|
+
|
|
85
|
+
end
|
|
86
|
+
|
|
87
|
+
context "with an empty response body" do
|
|
88
|
+
|
|
89
|
+
let(:response_body) { "" }
|
|
90
|
+
|
|
91
|
+
it "gives a customized exception message including the server response" do
|
|
92
|
+
expect(inspector.message).to eq("HTTP 400 Bad Request: (No explanation provided by server)")
|
|
93
|
+
end
|
|
94
|
+
|
|
95
|
+
end
|
|
96
|
+
|
|
97
|
+
context "with a JSON response body in the standard Chef Server format" do
|
|
98
|
+
|
|
99
|
+
let(:response_body) { %q[{"error":["Field 'name' invalid"]}] }
|
|
100
|
+
|
|
101
|
+
it "gives a customized exception message including the server response" do
|
|
102
|
+
expect(inspector.message).to eq("HTTP 400 Bad Request: Field 'name' invalid")
|
|
103
|
+
end
|
|
104
|
+
|
|
105
|
+
end
|
|
106
|
+
|
|
107
|
+
describe "showing the request and response in extended error info" do
|
|
108
|
+
|
|
109
|
+
let(:response_body) { "this is the response" }
|
|
110
|
+
|
|
111
|
+
it "shows the request in a format similar to HTTP messages" do
|
|
112
|
+
expected_request_string = <<-E
|
|
113
|
+
--- REQUEST DATA ----
|
|
114
|
+
POST /organizations/chef-oss-dev/cookbooks
|
|
115
|
+
content-type: application/json
|
|
116
|
+
accept: application/json
|
|
117
|
+
|
|
118
|
+
this is the request
|
|
119
|
+
|
|
120
|
+
E
|
|
121
|
+
expect(inspector.extended_error_info).to include(expected_request_string)
|
|
122
|
+
end
|
|
123
|
+
|
|
124
|
+
it "shows the response in a format similar to HTTP messages" do
|
|
125
|
+
expected_response_string = <<-E
|
|
126
|
+
--- RESPONSE DATA ---
|
|
127
|
+
400 Bad Request
|
|
128
|
+
server: ngx_openresty
|
|
129
|
+
date: Wed, 29 Oct 2014 22:27:47 GMT
|
|
130
|
+
|
|
131
|
+
|
|
132
|
+
this is the response
|
|
133
|
+
E
|
|
134
|
+
expect(inspector.extended_error_info).to include(expected_response_string)
|
|
135
|
+
end
|
|
136
|
+
|
|
137
|
+
end
|
|
138
|
+
|
|
139
|
+
end
|
|
140
|
+
|
data/spec/unit/shell_out_spec.rb
CHANGED
|
@@ -1,34 +1,34 @@
|
|
|
1
|
-
#
|
|
2
|
-
# Copyright:: Copyright (c) 2014 Chef Software Inc.
|
|
3
|
-
# License:: Apache License, Version 2.0
|
|
4
|
-
#
|
|
5
|
-
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
6
|
-
# you may not use this file except in compliance with the License.
|
|
7
|
-
# You may obtain a copy of the License at
|
|
8
|
-
#
|
|
9
|
-
# http://www.apache.org/licenses/LICENSE-2.0
|
|
10
|
-
#
|
|
11
|
-
# Unless required by applicable law or agreed to in writing, software
|
|
12
|
-
# distributed under the License is distributed on an "AS IS" BASIS,
|
|
13
|
-
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
14
|
-
# See the License for the specific language governing permissions and
|
|
15
|
-
# limitations under the License.
|
|
16
|
-
#
|
|
17
|
-
|
|
18
|
-
require 'spec_helper'
|
|
19
|
-
require 'chef-dk/shell_out'
|
|
20
|
-
|
|
21
|
-
describe ChefDK::ShellOut do
|
|
22
|
-
|
|
23
|
-
describe "providing the API expected by CookbookOmnifetch" do
|
|
24
|
-
|
|
25
|
-
it "provides a `shell_out` class method" do
|
|
26
|
-
expect(described_class).to respond_to(:shell_out)
|
|
27
|
-
end
|
|
28
|
-
|
|
29
|
-
it "responds to #success?" do
|
|
30
|
-
expect(described_class.new("echo 'foo'")).to respond_to(:success?)
|
|
31
|
-
end
|
|
32
|
-
|
|
33
|
-
end
|
|
34
|
-
end
|
|
1
|
+
#
|
|
2
|
+
# Copyright:: Copyright (c) 2014 Chef Software Inc.
|
|
3
|
+
# License:: Apache License, Version 2.0
|
|
4
|
+
#
|
|
5
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
6
|
+
# you may not use this file except in compliance with the License.
|
|
7
|
+
# You may obtain a copy of the License at
|
|
8
|
+
#
|
|
9
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
|
10
|
+
#
|
|
11
|
+
# Unless required by applicable law or agreed to in writing, software
|
|
12
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
|
13
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
14
|
+
# See the License for the specific language governing permissions and
|
|
15
|
+
# limitations under the License.
|
|
16
|
+
#
|
|
17
|
+
|
|
18
|
+
require 'spec_helper'
|
|
19
|
+
require 'chef-dk/shell_out'
|
|
20
|
+
|
|
21
|
+
describe ChefDK::ShellOut do
|
|
22
|
+
|
|
23
|
+
describe "providing the API expected by CookbookOmnifetch" do
|
|
24
|
+
|
|
25
|
+
it "provides a `shell_out` class method" do
|
|
26
|
+
expect(described_class).to respond_to(:shell_out)
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
it "responds to #success?" do
|
|
30
|
+
expect(described_class.new("echo 'foo'")).to respond_to(:success?)
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
end
|
|
34
|
+
end
|
data/tasks/bin/bundle-platform
CHANGED
|
@@ -1,10 +1,14 @@
|
|
|
1
1
|
#!/usr/bin/env ruby
|
|
2
2
|
|
|
3
3
|
platforms = ARGV.shift
|
|
4
|
+
platforms = platforms.split(" ").map { |p| Gem::Platform.new(p) }
|
|
5
|
+
Gem::Platform.instance_eval { @local = platforms.last }
|
|
4
6
|
old_platforms = Gem.platforms
|
|
5
|
-
Gem.platforms = platforms
|
|
7
|
+
Gem.platforms = platforms
|
|
6
8
|
puts "bundle-platform set Gem.platforms to #{Gem.platforms.map { |p| p.to_s }} (was #{old_platforms.map { |p| p.to_s } })"
|
|
7
9
|
|
|
10
|
+
desired_version = ARGV.shift.gsub("_", "")
|
|
11
|
+
|
|
8
12
|
# The rest of this is a normal bundler binstub
|
|
9
13
|
require "pathname"
|
|
10
14
|
ENV["BUNDLE_GEMFILE"] ||= File.expand_path("../../../Gemfile",
|
|
@@ -12,4 +16,4 @@ ENV["BUNDLE_GEMFILE"] ||= File.expand_path("../../../Gemfile",
|
|
|
12
16
|
|
|
13
17
|
require "rubygems"
|
|
14
18
|
|
|
15
|
-
load Gem.bin_path("bundler", "bundle")
|
|
19
|
+
load Gem.bin_path("bundler", "bundle", desired_version)
|
|
File without changes
|
|
File without changes
|
data/tasks/bundle_util.rb
CHANGED
|
@@ -57,7 +57,14 @@ module BundleUtil
|
|
|
57
57
|
|
|
58
58
|
# Run the bundle command
|
|
59
59
|
ruby_platforms = platform ? PLATFORMS[platform].join(" ") : "ruby"
|
|
60
|
-
cmd = Shellwords.join([
|
|
60
|
+
cmd = Shellwords.join([
|
|
61
|
+
Gem.ruby,
|
|
62
|
+
"-S",
|
|
63
|
+
bundle_platform,
|
|
64
|
+
ruby_platforms,
|
|
65
|
+
"_#{desired_bundler_version}_",
|
|
66
|
+
*args
|
|
67
|
+
])
|
|
61
68
|
puts "#{prefix}#{Shellwords.join(["bundle", *args])}#{platform ? " for #{platform} platform" : ""}:"
|
|
62
69
|
with_gemfile(gemfile) do
|
|
63
70
|
puts "#{prefix}BUNDLE_GEMFILE=#{gemfile}"
|
|
@@ -65,7 +72,7 @@ module BundleUtil
|
|
|
65
72
|
if extract_output
|
|
66
73
|
`#{cmd}`
|
|
67
74
|
else
|
|
68
|
-
unless system(bundle_platform, ruby_platforms, *args)
|
|
75
|
+
unless system(bundle_platform, ruby_platforms, "_#{desired_bundler_version}_", *args)
|
|
69
76
|
raise "#{bundle_platform} failed: exit code #{$?}"
|
|
70
77
|
end
|
|
71
78
|
end
|
|
@@ -91,4 +98,13 @@ module BundleUtil
|
|
|
91
98
|
def platforms
|
|
92
99
|
PLATFORMS.keys
|
|
93
100
|
end
|
|
101
|
+
|
|
102
|
+
def desired_bundler_version
|
|
103
|
+
@desired_bundler_version ||= begin
|
|
104
|
+
omnibus_overrides = File.join(project_root, "omnibus_overrides.rb")
|
|
105
|
+
File.readlines(omnibus_overrides).each do |line|
|
|
106
|
+
return $1 if line =~ /^override :bundler, version: "(.+)"$/
|
|
107
|
+
end
|
|
108
|
+
end
|
|
109
|
+
end
|
|
94
110
|
end
|
data/tasks/gemfile_util.rb
CHANGED
|
@@ -8,27 +8,56 @@ module GemfileUtil
|
|
|
8
8
|
# Adds `override: true`, which allows your statement to override any other
|
|
9
9
|
# gem statement about the same gem in the Gemfile.
|
|
10
10
|
#
|
|
11
|
+
# :path does likewise.
|
|
12
|
+
#
|
|
13
|
+
# :overrideable holds off on processing the
|
|
14
|
+
#
|
|
15
|
+
def gemfile_parsing_done?
|
|
16
|
+
overridden_gems == :finished
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
def overridey_thing?(options)
|
|
20
|
+
options[:path] || options[:override] || options[:overrideable]
|
|
21
|
+
end
|
|
22
|
+
|
|
11
23
|
def gem(name, *args)
|
|
12
24
|
options = args[-1].is_a?(Hash) ? args[-1] : {}
|
|
13
25
|
|
|
14
26
|
# Unless we're finished with everything, ignore gems that are being overridden
|
|
15
|
-
|
|
27
|
+
if gemfile_parsing_done?
|
|
28
|
+
# Otherwise, add the gem normally
|
|
29
|
+
super
|
|
30
|
+
elsif overridey_thing?(options)
|
|
16
31
|
# If it's a path or override gem, it overrides whatever else is there.
|
|
17
32
|
if options[:path] || options[:override]
|
|
18
33
|
options.delete(:override)
|
|
19
34
|
warn_if_replacing(name, overridden_gems[name], args)
|
|
20
35
|
overridden_gems[name] = args
|
|
21
|
-
return
|
|
22
36
|
|
|
23
|
-
#
|
|
24
|
-
elsif
|
|
37
|
+
# if this can be overridden by a later `gem` line, don't do anything but save it for later.
|
|
38
|
+
elsif options[:overrideable]
|
|
39
|
+
# if you put a `gem` line before ours (which you're supposed to), let it be.
|
|
40
|
+
unless seen_gems[name]
|
|
41
|
+
options.delete(:overrideable)
|
|
42
|
+
overrideable_gems[name] = args
|
|
43
|
+
end
|
|
44
|
+
end
|
|
45
|
+
|
|
46
|
+
# This is a normal `gem` call. Check if it's overridden by something else.
|
|
47
|
+
else
|
|
48
|
+
# If there's an override gem, and we're *not* an override gem, don't do anything
|
|
49
|
+
if overridden_gems[name]
|
|
25
50
|
warn_if_replacing(name, args, overridden_gems[name])
|
|
26
|
-
|
|
51
|
+
|
|
52
|
+
# ok, we found a `gem` definition to override it, so do that.
|
|
53
|
+
else
|
|
54
|
+
overrideable_gems.delete(name)
|
|
55
|
+
super
|
|
27
56
|
end
|
|
28
57
|
end
|
|
29
58
|
|
|
30
|
-
|
|
31
|
-
|
|
59
|
+
seen_gems[name] = true
|
|
60
|
+
|
|
32
61
|
rescue
|
|
33
62
|
puts $!.backtrace
|
|
34
63
|
raise
|
|
@@ -38,11 +67,20 @@ module GemfileUtil
|
|
|
38
67
|
@overridden_gems ||= {}
|
|
39
68
|
end
|
|
40
69
|
|
|
70
|
+
def overrideable_gems
|
|
71
|
+
@overrideable_gems ||= {}
|
|
72
|
+
end
|
|
73
|
+
|
|
74
|
+
def seen_gems
|
|
75
|
+
@seen_gems ||= {}
|
|
76
|
+
end
|
|
77
|
+
|
|
41
78
|
#
|
|
42
|
-
# Just before we finish the Gemfile, finish up the
|
|
79
|
+
# Just before we finish the Gemfile, finish up the overridden and overrideable gems
|
|
43
80
|
#
|
|
44
81
|
def to_definition(*args)
|
|
45
82
|
complete_overrides
|
|
83
|
+
complete_overrideables
|
|
46
84
|
super
|
|
47
85
|
end
|
|
48
86
|
|
|
@@ -56,6 +94,13 @@ module GemfileUtil
|
|
|
56
94
|
end
|
|
57
95
|
end
|
|
58
96
|
|
|
97
|
+
def complete_overrideables
|
|
98
|
+
# we're mostly done, we just have to process the overrideable gems that didn't get overridden.
|
|
99
|
+
overrideable_gems.each do |name, args|
|
|
100
|
+
gem name, *args
|
|
101
|
+
end
|
|
102
|
+
end
|
|
103
|
+
|
|
59
104
|
#
|
|
60
105
|
# Include all gems in the locked gemfile.
|
|
61
106
|
#
|