chef-dk 0.13.21 → 0.14.25
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/CONTRIBUTING.md +186 -186
- data/Gemfile +37 -14
- data/Gemfile.lock +178 -72
- data/LICENSE +201 -201
- data/README.md +11 -148
- 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 +2 -1
- data/acceptance/Gemfile.lock +39 -42
- 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/lib/chef-dk.rb +19 -19
- data/lib/chef-dk/authenticated_http.rb +40 -40
- data/lib/chef-dk/chef_runner.rb +107 -107
- data/lib/chef-dk/cli.rb +200 -200
- 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 +157 -157
- data/lib/chef-dk/command/gem.rb +47 -47
- data/lib/chef-dk/command/generate.rb +120 -120
- data/lib/chef-dk/command/generator_commands.rb +83 -80
- 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/cookbook.rb +153 -153
- 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 +106 -29
- 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/component_test.rb +30 -1
- 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/generator.rb +163 -163
- data/lib/chef-dk/helpers.rb +159 -159
- 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.rb +114 -114
- 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/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/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/cookbook.rb +117 -117
- 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.apache2.erb → LICENSE.apachev2.erb} +201 -201
- 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/kitchen.yml.erb +21 -21
- data/lib/chef-dk/skeletons/code_generator/templates/default/kitchen_policyfile.yml.erb +32 -32
- 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 +19 -11
- 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/custom_generator_cookbook.rb +130 -130
- 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 +139 -139
- data/spec/unit/cli_spec.rb +357 -357
- data/spec/unit/command/base_spec.rb +173 -169
- 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/cookbook_file_spec.rb +32 -32
- data/spec/unit/command/generator_commands/cookbook_spec.rb +450 -450
- 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/repo_spec.rb +374 -367
- 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 +15 -6
- data/spec/unit/commands_map_spec.rb +57 -57
- data/spec/unit/component_test_spec.rb +128 -126
- 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/generator_spec.rb +119 -120
- data/spec/unit/helpers_spec.rb +92 -92
- 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/spec/unit/tasks/helpers_spec.rb +75 -0
- data/tasks/bin/bundle-platform +0 -0
- data/tasks/bin/bundle-platform.bat +0 -0
- data/tasks/bin/create-override-gemfile +110 -0
- data/tasks/bundle.rb +27 -11
- data/tasks/bundle_util.rb +6 -5
- data/tasks/dependencies.rb +97 -122
- data/tasks/gemfile_util.rb +357 -66
- data/tasks/helpers.rb +47 -0
- data/tasks/version.rb +1 -5
- data/version_policy.rb +66 -41
- data/warning.txt +9 -9
- metadata +7 -5
- data/Gemfile.windows +0 -34
- data/Gemfile.windows.lock +0 -936
|
@@ -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
|
|
@@ -0,0 +1,75 @@
|
|
|
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_relative "../../../tasks/helpers"
|
|
20
|
+
|
|
21
|
+
class RakeMock
|
|
22
|
+
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
describe "Rake 'dependencies' task" do
|
|
26
|
+
let(:rake_mock) { Class.new { include RakeDependenciesTaskHelpers }.new }
|
|
27
|
+
let(:product_name) { "chef" }
|
|
28
|
+
let(:gemfile_name) { "chef" }
|
|
29
|
+
let(:gemfile) {'gem "chef", github: "chef/chef", branch: "0.0.0"'}
|
|
30
|
+
let(:expected_version) { "0.0.1" }
|
|
31
|
+
|
|
32
|
+
before do
|
|
33
|
+
allow(rake_mock).to receive(:puts)
|
|
34
|
+
allow(rake_mock).to receive(:get_latest_version_for).with(product_name).and_return(expected_version)
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
describe "update_gemfile_from_stable" do
|
|
38
|
+
context "when gemfile does not contain the expected string" do
|
|
39
|
+
let(:gemfile) { "These are not the droids you are looking for." }
|
|
40
|
+
|
|
41
|
+
it "raises an error" do
|
|
42
|
+
expect { rake_mock.update_gemfile_from_stable(gemfile, product_name, gemfile_name) }.to raise_error(/Gemfile does not have a line of the form/)
|
|
43
|
+
end
|
|
44
|
+
end
|
|
45
|
+
|
|
46
|
+
context "when gemfile does contain the expected string" do
|
|
47
|
+
let(:prefix) { "" }
|
|
48
|
+
let(:expected_output) {"gem \"chef\", github: \"chef/chef\", branch: \"#{prefix}#{expected_version}\""}
|
|
49
|
+
|
|
50
|
+
context "and the version string does not have a prefix" do
|
|
51
|
+
it "updates the gemfile entry to the newer version" do
|
|
52
|
+
expect(rake_mock.update_gemfile_from_stable(gemfile, product_name, gemfile_name))
|
|
53
|
+
.to eq(expected_output)
|
|
54
|
+
end
|
|
55
|
+
end
|
|
56
|
+
|
|
57
|
+
context "and the version is the same" do
|
|
58
|
+
let(:expected_version) { "0.0.0" }
|
|
59
|
+
it "warns the user that the version is not being updated" do
|
|
60
|
+
expect(rake_mock).to receive(:puts).with(/version in Gemfile already at latest stable/)
|
|
61
|
+
expect(rake_mock.update_gemfile_from_stable(gemfile, product_name, gemfile_name))
|
|
62
|
+
.to eq(expected_output)
|
|
63
|
+
end
|
|
64
|
+
end
|
|
65
|
+
|
|
66
|
+
context "and a prefix is specified" do
|
|
67
|
+
let(:prefix) { "v" }
|
|
68
|
+
it "updates the gemfile entry to the newer version" do
|
|
69
|
+
expect(rake_mock.update_gemfile_from_stable(gemfile, product_name, gemfile_name, prefix))
|
|
70
|
+
.to eq(expected_output)
|
|
71
|
+
end
|
|
72
|
+
end
|
|
73
|
+
end
|
|
74
|
+
end
|
|
75
|
+
end
|
data/tasks/bin/bundle-platform
CHANGED
|
File without changes
|
|
File without changes
|
|
@@ -0,0 +1,110 @@
|
|
|
1
|
+
#!/usr/bin/env ruby
|
|
2
|
+
|
|
3
|
+
require "rubygems"
|
|
4
|
+
require "bundler"
|
|
5
|
+
|
|
6
|
+
Bundler.with_clean_env do
|
|
7
|
+
require_relative "../gemfile_util"
|
|
8
|
+
|
|
9
|
+
options = {}
|
|
10
|
+
opts = OptionParser.new do |opts|
|
|
11
|
+
opts.banner = "Usage: create-override-gemfile [OPTIONS]"
|
|
12
|
+
|
|
13
|
+
opts.on("--gemfile GEMFILE", "The Gemfile to read (default: Gemfile).") { |path| options[:gemfile_path] = path }
|
|
14
|
+
opts.on("--lockfile GEMFILE", "The lockfile to read (default: <gemfile>.lock).") { |path| options[:lockfile_path] = path }
|
|
15
|
+
|
|
16
|
+
opts.on("--group GROUP", "Groups to include (whitelist).") do |group|
|
|
17
|
+
options[:groups] ||= []
|
|
18
|
+
options[:groups] << group.to_sym
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
opts.on("--without GROUP", "Groups to exclude.") do |group|
|
|
22
|
+
options[:without_groups] ||= []
|
|
23
|
+
options[:without_groups] << group.to_sym
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
opts.on("--gem GEM", "Gems to include regardless of groups.") do |name|
|
|
27
|
+
options[:gems] ||= []
|
|
28
|
+
options[:gems] << name
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
opts.on("--relative-to PATH", "A path to prepend to any relative paths in the Gemfile.") do |path|
|
|
32
|
+
unless Pathname.new(path).absolute?
|
|
33
|
+
puts opts
|
|
34
|
+
raise "--relative-to #{path} was not an absolute path!"
|
|
35
|
+
end
|
|
36
|
+
options[:relative_to] = path
|
|
37
|
+
end
|
|
38
|
+
|
|
39
|
+
opts.on("--[no-]copy-groups", "Whether to copy groups over from the original Gemfile or not (default: false).") { |val| options[:copy_groups] = val }
|
|
40
|
+
|
|
41
|
+
opts.on("--[no-]override", "Whether to emit override: true on each gem line (default: false).") { |val| options[:override] = val }
|
|
42
|
+
|
|
43
|
+
opts.on("-h", "--help", "Print this message.") do
|
|
44
|
+
puts opts
|
|
45
|
+
exit(0)
|
|
46
|
+
end
|
|
47
|
+
end
|
|
48
|
+
|
|
49
|
+
args = opts.parse(ARGV)
|
|
50
|
+
|
|
51
|
+
if args.size > 0
|
|
52
|
+
puts opts
|
|
53
|
+
raise "Invalid arguments #{args}"
|
|
54
|
+
end
|
|
55
|
+
|
|
56
|
+
def create_override_gemfile(gemfile_path: "Gemfile", lockfile_path: "#{gemfile_path}.lock", groups: nil, without_groups: nil, gems: [], copy_groups: false, relative_to: ".", override: false)
|
|
57
|
+
relative_to = Pathname.new(relative_to).realpath
|
|
58
|
+
# Select the gems we want
|
|
59
|
+
bundle = GemfileUtil::Bundle.parse(gemfile_path, lockfile_path)
|
|
60
|
+
gems_to_include = bundle.select_gems(groups: groups, without_groups: without_groups)
|
|
61
|
+
gems.each do |name|
|
|
62
|
+
raise "Requested gem #{name} is not in #{gemfile_path}.lock!" if !bundle.gems[name]
|
|
63
|
+
gems_to_include[name] ||= bundle.gems[name]
|
|
64
|
+
gems_to_include[name][:dependencies].each do |dep|
|
|
65
|
+
gems_to_include[name] ||= bundle.gems[dep]
|
|
66
|
+
end
|
|
67
|
+
end
|
|
68
|
+
|
|
69
|
+
# Add the gems to the Gemfile
|
|
70
|
+
gem_root = Pathname.new(gemfile_path).dirname.realpath
|
|
71
|
+
gems_to_include.sort_by { |name, options| options[:declared_groups].empty? ? 1 : 0 }.each do |name, options|
|
|
72
|
+
comment = nil
|
|
73
|
+
options = options.dup
|
|
74
|
+
version = options.delete(:version)
|
|
75
|
+
if copy_groups
|
|
76
|
+
# Some dependencies have no groups (are not in the Gemfile--just runtime
|
|
77
|
+
# dependencies). If we actually record that they have no groups, they
|
|
78
|
+
# will *always* be installed (or perhaps never). We only want them to
|
|
79
|
+
# install if their other deps do, so we mark them with the groups of the
|
|
80
|
+
# things that brought them in (the gems that depended on them). To do
|
|
81
|
+
# this, we just leave :groups intact.
|
|
82
|
+
if options[:declared_groups].empty?
|
|
83
|
+
options.delete(:declared_groups)
|
|
84
|
+
comment = " # Transitive dependency, not actually in original Gemfile"
|
|
85
|
+
else
|
|
86
|
+
# For other things, we want to copy the actual declared_groups--the
|
|
87
|
+
# ones that were in the Gemfile. We want the same --with and --without
|
|
88
|
+
# options to include and exclude them as worked with the original
|
|
89
|
+
# Gemfile.
|
|
90
|
+
options[:groups] = options.delete(:declared_groups)
|
|
91
|
+
end
|
|
92
|
+
else
|
|
93
|
+
options.delete(:groups)
|
|
94
|
+
options.delete(:declared_groups)
|
|
95
|
+
end
|
|
96
|
+
options.delete(:dependencies)
|
|
97
|
+
options.delete(:development_dependencies)
|
|
98
|
+
options[:override] = true if override
|
|
99
|
+
options[:path] = Pathname.new(options[:path]).expand_path(gem_root).relative_path_from(relative_to).to_s if options[:path]
|
|
100
|
+
line = "gem #{name.inspect}, #{version.inspect}"
|
|
101
|
+
options.each do |name, value|
|
|
102
|
+
line << ", #{name}: #{value.inspect}"
|
|
103
|
+
end
|
|
104
|
+
line << comment if comment
|
|
105
|
+
puts line
|
|
106
|
+
end
|
|
107
|
+
end
|
|
108
|
+
|
|
109
|
+
create_override_gemfile(options)
|
|
110
|
+
end
|