r10k 3.5.2
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 +7 -0
- data/.gitattributes +1 -0
- data/.github/pull_request_template.md +1 -0
- data/.github/workflows/docker.yml +56 -0
- data/.github/workflows/release.yml +36 -0
- data/.gitignore +9 -0
- data/.travis.yml +45 -0
- data/CHANGELOG.mkd +1759 -0
- data/CODEOWNERS +2 -0
- data/CONTRIBUTING.mkd +105 -0
- data/Gemfile +15 -0
- data/LICENSE +14 -0
- data/README.mkd +118 -0
- data/Rakefile +3 -0
- data/azure-pipelines.yml +86 -0
- data/bin/r10k +17 -0
- data/doc/common-patterns.mkd +44 -0
- data/doc/dynamic-environments.mkd +31 -0
- data/doc/dynamic-environments/configuration.mkd +669 -0
- data/doc/dynamic-environments/git-environments.mkd +75 -0
- data/doc/dynamic-environments/introduction.mkd +69 -0
- data/doc/dynamic-environments/master-configuration.mkd +40 -0
- data/doc/dynamic-environments/quickstart.mkd +201 -0
- data/doc/dynamic-environments/svn-environments.mkd +45 -0
- data/doc/dynamic-environments/usage.mkd +132 -0
- data/doc/dynamic-environments/workflow-guide.mkd +247 -0
- data/doc/faq.mkd +164 -0
- data/doc/git/cloning-and-mirroring.mkd +60 -0
- data/doc/git/providers.mkd +111 -0
- data/doc/puppetfile.mkd +309 -0
- data/doc/updating-your-puppetfile.mkd +38 -0
- data/docker/.gitignore +1 -0
- data/docker/.rspec +4 -0
- data/docker/Gemfile +11 -0
- data/docker/Makefile +89 -0
- data/docker/README.md +28 -0
- data/docker/r10k/Dockerfile +67 -0
- data/docker/r10k/adduser.sh +13 -0
- data/docker/r10k/docker-entrypoint.d/10-analytics.sh +30 -0
- data/docker/r10k/docker-entrypoint.sh +11 -0
- data/docker/r10k/release.Dockerfile +54 -0
- data/docker/spec/dockerfile_spec.rb +43 -0
- data/docker/spec/fixtures/Puppetfile +2 -0
- data/integration/Gemfile +19 -0
- data/integration/README.mkd +29 -0
- data/integration/Rakefile +77 -0
- data/integration/component/pre-suite/05_install_dev_r10k.rb +12 -0
- data/integration/files/README.mkd +4 -0
- data/integration/files/hiera.yaml +8 -0
- data/integration/files/modules/helloworld/manifests/init.pp +3 -0
- data/integration/files/modules/hieratest/manifests/init.pp +3 -0
- data/integration/files/modules/unicode/files/pretend_unicode +1 -0
- data/integration/files/modules/unicode/manifests/init.pp +6 -0
- data/integration/files/pre-suite/git_config.pp.erb +19 -0
- data/integration/files/pre-suite/prod_env.config +3 -0
- data/integration/files/r10k_conf.yaml.erb +9 -0
- data/integration/lib/README.mkd +4 -0
- data/integration/lib/git_utils.rb +205 -0
- data/integration/lib/master_manipulator.rb +205 -0
- data/integration/lib/r10k_utils.rb +222 -0
- data/integration/manifests/README.mkd +4 -0
- data/integration/pre-suite/00_pe_install.rb +6 -0
- data/integration/pre-suite/10_git_config.rb +48 -0
- data/integration/pre-suite/20_pe_r10k.rb +55 -0
- data/integration/pre-suite/README.mkd +5 -0
- data/integration/tests/Puppetfile/HTTP_PROXY_affects_forge_source.rb +72 -0
- data/integration/tests/Puppetfile/HTTP_PROXY_affects_git_source.rb +70 -0
- data/integration/tests/README.mkd +4 -0
- data/integration/tests/basic_functionality/install_pe_only_module_with_puppetfile.rb +83 -0
- data/integration/tests/basic_functionality/negative/neg_deploy_with_invalid_r10k_yaml.rb +51 -0
- data/integration/tests/basic_functionality/negative/neg_deploy_with_missing_r10k_yaml.rb +28 -0
- data/integration/tests/basic_functionality/negative/neg_invalid_git_provider.rb +45 -0
- data/integration/tests/basic_functionality/negative/negative_bad_proxy.rb +34 -0
- data/integration/tests/basic_functionality/proxy_specified_in_configuration.rb +103 -0
- data/integration/tests/basic_functionality/proxy_with_pe_only_module.rb +128 -0
- data/integration/tests/basic_functionality/proxy_with_puppetfile.rb +61 -0
- data/integration/tests/basic_functionality/rugged_git_provider_with_ssh.rb +109 -0
- data/integration/tests/basic_functionality/rugged_git_provider_without_ssh.rb +108 -0
- data/integration/tests/command_line/deploy_env_without_mod_update.rb +76 -0
- data/integration/tests/command_line/negative/neg_deploy_env_with_module_update.rb +77 -0
- data/integration/tests/command_line/negative/neg_invalid_cmd_line_arg.rb +23 -0
- data/integration/tests/git_source/HTTP_proxy_and_git_source.rb +70 -0
- data/integration/tests/git_source/git_source_git.rb +128 -0
- data/integration/tests/git_source/git_source_ssh.rb +87 -0
- data/integration/tests/git_source/git_source_submodule.rb +70 -0
- data/integration/tests/git_source/negative/neg_git_broken_remote.rb +38 -0
- data/integration/tests/git_source/negative/neg_git_unauthorized_https.rb +46 -0
- data/integration/tests/git_source/negative/neg_git_unauthorized_ssh.rb +73 -0
- data/integration/tests/git_source/negative/neg_git_unicode_branch.rb +35 -0
- data/integration/tests/i18n/deploy_module_with_unicode_in_file_name.rb +64 -0
- data/integration/tests/purging/content_not_purged_at_root.rb +89 -0
- data/integration/tests/purging/default_purging.rb +125 -0
- data/integration/tests/purging/does_not_purge_files_on_white_list.rb +93 -0
- data/integration/tests/purging/invalid_whitelist_types.rb +63 -0
- data/integration/tests/user_scenario/basic_workflow/multi_env_1000_branches.rb +66 -0
- data/integration/tests/user_scenario/basic_workflow/multi_env_custom_forge_git_module.rb +111 -0
- data/integration/tests/user_scenario/basic_workflow/multi_env_custom_forge_git_module_static.rb +117 -0
- data/integration/tests/user_scenario/basic_workflow/multi_env_hiera.rb +100 -0
- data/integration/tests/user_scenario/basic_workflow/multi_env_multi_source.rb +133 -0
- data/integration/tests/user_scenario/basic_workflow/multi_source_custom_forge_git_module.rb +161 -0
- data/integration/tests/user_scenario/basic_workflow/negative/neg_bad_basedir.rb +46 -0
- data/integration/tests/user_scenario/basic_workflow/negative/neg_bad_forge_module.rb +48 -0
- data/integration/tests/user_scenario/basic_workflow/negative/neg_bad_git_module.rb +45 -0
- data/integration/tests/user_scenario/basic_workflow/negative/neg_bad_git_module_ref.rb +43 -0
- data/integration/tests/user_scenario/basic_workflow/negative/neg_bad_git_remote.rb +45 -0
- data/integration/tests/user_scenario/basic_workflow/negative/neg_branch_name_collision.rb +64 -0
- data/integration/tests/user_scenario/basic_workflow/negative/neg_disk_full.rb +75 -0
- data/integration/tests/user_scenario/basic_workflow/negative/neg_duplicate_module_names.rb +44 -0
- data/integration/tests/user_scenario/basic_workflow/negative/neg_inaccessible_forge.rb +58 -0
- data/integration/tests/user_scenario/basic_workflow/negative/neg_invalid_env_name.rb +34 -0
- data/integration/tests/user_scenario/basic_workflow/negative/neg_invalid_puppet_file.rb +36 -0
- data/integration/tests/user_scenario/basic_workflow/negative/neg_module_specified_at_deleted_release.rb +49 -0
- data/integration/tests/user_scenario/basic_workflow/negative/neg_read_only.rb +58 -0
- data/integration/tests/user_scenario/basic_workflow/negative/neg_specify_deleted_forge_module.rb +51 -0
- data/integration/tests/user_scenario/basic_workflow/single_env_10000_files.rb +75 -0
- data/integration/tests/user_scenario/basic_workflow/single_env_custom_forge_git_module.rb +104 -0
- data/integration/tests/user_scenario/basic_workflow/single_env_custom_forge_module.rb +81 -0
- data/integration/tests/user_scenario/basic_workflow/single_env_custom_module.rb +49 -0
- data/integration/tests/user_scenario/basic_workflow/single_env_large_files.rb +75 -0
- data/integration/tests/user_scenario/basic_workflow/single_env_module_already_installed.rb +82 -0
- data/integration/tests/user_scenario/basic_workflow/single_env_module_last_release_deleted.rb +68 -0
- data/integration/tests/user_scenario/basic_workflow/single_env_non-existent_base_dir.rb +94 -0
- data/integration/tests/user_scenario/basic_workflow/single_env_purge_unmanaged_modules.rb +93 -0
- data/integration/tests/user_scenario/basic_workflow/single_env_switch_forge_git_module.rb +117 -0
- data/integration/tests/user_scenario/basic_workflow/single_env_unicode_paths.rb +60 -0
- data/integration/tests/user_scenario/basic_workflow/single_env_upgrade_forge_mod_revert_change.rb +166 -0
- data/integration/tests/user_scenario/complex_workflow/multi_env_add_change_remove.rb +163 -0
- data/integration/tests/user_scenario/complex_workflow/multi_env_remove_re-add.rb +111 -0
- data/integration/tests/user_scenario/complex_workflow/multi_env_unamanaged.rb +78 -0
- data/integration/tests/user_scenario/complex_workflow/single_env_git_module_update.rb +100 -0
- data/lib/r10k.rb +11 -0
- data/lib/r10k/action/base.rb +31 -0
- data/lib/r10k/action/cri_runner.rb +72 -0
- data/lib/r10k/action/deploy.rb +9 -0
- data/lib/r10k/action/deploy/deploy_helpers.rb +34 -0
- data/lib/r10k/action/deploy/display.rb +89 -0
- data/lib/r10k/action/deploy/environment.rb +196 -0
- data/lib/r10k/action/deploy/module.rb +84 -0
- data/lib/r10k/action/puppetfile.rb +10 -0
- data/lib/r10k/action/puppetfile/check.rb +31 -0
- data/lib/r10k/action/puppetfile/cri_runner.rb +26 -0
- data/lib/r10k/action/puppetfile/install.rb +45 -0
- data/lib/r10k/action/puppetfile/purge.rb +28 -0
- data/lib/r10k/action/runner.rb +96 -0
- data/lib/r10k/action/visitor.rb +31 -0
- data/lib/r10k/cli.rb +51 -0
- data/lib/r10k/cli/deploy.rb +114 -0
- data/lib/r10k/cli/ext/logging.rb +15 -0
- data/lib/r10k/cli/help.rb +7 -0
- data/lib/r10k/cli/puppetfile.rb +74 -0
- data/lib/r10k/cli/version.rb +31 -0
- data/lib/r10k/deployment.rb +132 -0
- data/lib/r10k/deployment/config.rb +56 -0
- data/lib/r10k/environment.rb +37 -0
- data/lib/r10k/environment/bare.rb +16 -0
- data/lib/r10k/environment/base.rb +150 -0
- data/lib/r10k/environment/git.rb +81 -0
- data/lib/r10k/environment/name.rb +86 -0
- data/lib/r10k/environment/svn.rb +91 -0
- data/lib/r10k/environment/with_modules.rb +139 -0
- data/lib/r10k/errors.rb +61 -0
- data/lib/r10k/errors/formatting.rb +28 -0
- data/lib/r10k/feature.rb +56 -0
- data/lib/r10k/feature/collection.rb +23 -0
- data/lib/r10k/features.rb +20 -0
- data/lib/r10k/forge/module_release.rb +228 -0
- data/lib/r10k/git.rb +196 -0
- data/lib/r10k/git/alternates.rb +63 -0
- data/lib/r10k/git/cache.rb +108 -0
- data/lib/r10k/git/errors.rb +34 -0
- data/lib/r10k/git/rugged.rb +17 -0
- data/lib/r10k/git/rugged/bare_repository.rb +85 -0
- data/lib/r10k/git/rugged/base_repository.rb +93 -0
- data/lib/r10k/git/rugged/cache.rb +11 -0
- data/lib/r10k/git/rugged/credentials.rb +91 -0
- data/lib/r10k/git/rugged/thin_repository.rb +89 -0
- data/lib/r10k/git/rugged/working_repository.rb +145 -0
- data/lib/r10k/git/shellgit.rb +9 -0
- data/lib/r10k/git/shellgit/bare_repository.rb +43 -0
- data/lib/r10k/git/shellgit/base_repository.rb +137 -0
- data/lib/r10k/git/shellgit/cache.rb +11 -0
- data/lib/r10k/git/shellgit/thin_repository.rb +69 -0
- data/lib/r10k/git/shellgit/working_repository.rb +111 -0
- data/lib/r10k/git/stateful_repository.rb +95 -0
- data/lib/r10k/initializers.rb +67 -0
- data/lib/r10k/instance_cache.rb +32 -0
- data/lib/r10k/keyed_factory.rb +39 -0
- data/lib/r10k/logging.rb +109 -0
- data/lib/r10k/logging/terminaloutputter.rb +36 -0
- data/lib/r10k/module.rb +38 -0
- data/lib/r10k/module/base.rb +113 -0
- data/lib/r10k/module/forge.rb +177 -0
- data/lib/r10k/module/git.rb +109 -0
- data/lib/r10k/module/local.rb +36 -0
- data/lib/r10k/module/metadata_file.rb +31 -0
- data/lib/r10k/module/svn.rb +112 -0
- data/lib/r10k/puppetfile.rb +286 -0
- data/lib/r10k/settings.rb +194 -0
- data/lib/r10k/settings/collection.rb +123 -0
- data/lib/r10k/settings/container.rb +97 -0
- data/lib/r10k/settings/definition.rb +124 -0
- data/lib/r10k/settings/enum_definition.rb +30 -0
- data/lib/r10k/settings/helpers.rb +38 -0
- data/lib/r10k/settings/list.rb +107 -0
- data/lib/r10k/settings/loader.rb +99 -0
- data/lib/r10k/settings/mixin.rb +54 -0
- data/lib/r10k/settings/uri_definition.rb +19 -0
- data/lib/r10k/source.rb +42 -0
- data/lib/r10k/source/base.rb +74 -0
- data/lib/r10k/source/exec.rb +51 -0
- data/lib/r10k/source/git.rb +142 -0
- data/lib/r10k/source/hash.rb +182 -0
- data/lib/r10k/source/svn.rb +136 -0
- data/lib/r10k/source/yaml.rb +20 -0
- data/lib/r10k/source/yamldir.rb +32 -0
- data/lib/r10k/svn.rb +6 -0
- data/lib/r10k/svn/remote.rb +68 -0
- data/lib/r10k/svn/working_dir.rb +125 -0
- data/lib/r10k/util/attempt.rb +84 -0
- data/lib/r10k/util/basedir.rb +65 -0
- data/lib/r10k/util/commands.rb +31 -0
- data/lib/r10k/util/exec_env.rb +36 -0
- data/lib/r10k/util/license.rb +24 -0
- data/lib/r10k/util/platform.rb +42 -0
- data/lib/r10k/util/purgeable.rb +88 -0
- data/lib/r10k/util/setopts.rb +55 -0
- data/lib/r10k/util/subprocess.rb +84 -0
- data/lib/r10k/util/subprocess/result.rb +56 -0
- data/lib/r10k/util/subprocess/runner.rb +26 -0
- data/lib/r10k/util/subprocess/runner/jruby.rb +23 -0
- data/lib/r10k/util/subprocess/runner/posix.rb +103 -0
- data/lib/r10k/util/subprocess/runner/pump.rb +59 -0
- data/lib/r10k/util/subprocess/runner/windows.rb +23 -0
- data/lib/r10k/util/subprocess/subprocess_error.rb +24 -0
- data/lib/r10k/util/symbolize_keys.rb +35 -0
- data/lib/r10k/version.rb +6 -0
- data/locales/config.yaml +21 -0
- data/locales/r10k.pot +545 -0
- data/r10k.gemspec +50 -0
- data/r10k.yaml.example +112 -0
- data/spec/fixtures/empty/.empty +0 -0
- data/spec/fixtures/integration/git/puppet-boolean-bare.tar +0 -0
- data/spec/fixtures/module/forge/bad_module/metadata.json +1 -0
- data/spec/fixtures/module/forge/eight_hundred/Modulefile +8 -0
- data/spec/fixtures/module/forge/eight_hundred/metadata.json +19 -0
- data/spec/fixtures/unit/action/r10k.yaml +5 -0
- data/spec/fixtures/unit/action/r10k_cachedir.yaml +2 -0
- data/spec/fixtures/unit/action/r10k_generate_types.yaml +3 -0
- data/spec/fixtures/unit/action/r10k_puppet_path.yaml +3 -0
- data/spec/fixtures/unit/puppetfile/argument-error/Puppetfile +1 -0
- data/spec/fixtures/unit/puppetfile/default-branch-override/Puppetfile +5 -0
- data/spec/fixtures/unit/puppetfile/duplicate-module-error/Puppetfile +10 -0
- data/spec/fixtures/unit/puppetfile/invalid-syntax/Puppetfile +1 -0
- data/spec/fixtures/unit/puppetfile/load-error/Puppetfile +1 -0
- data/spec/fixtures/unit/puppetfile/name-error/Puppetfile +1 -0
- data/spec/fixtures/unit/puppetfile/valid-forge-with-version/Puppetfile +1 -0
- data/spec/fixtures/unit/puppetfile/valid-forge-without-version/Puppetfile +1 -0
- data/spec/fixtures/unit/util/purgeable/managed_one/expected_1 +0 -0
- data/spec/fixtures/unit/util/purgeable/managed_one/managed_subdir_1/subdir_expected_1 +0 -0
- data/spec/fixtures/unit/util/purgeable/managed_one/managed_subdir_1/subdir_unmanaged_1 +0 -0
- data/spec/fixtures/unit/util/purgeable/managed_one/unmanaged_1 +0 -0
- data/spec/fixtures/unit/util/purgeable/managed_two/expected_2 +0 -0
- data/spec/fixtures/unit/util/purgeable/managed_two/unmanaged_2 +0 -0
- data/spec/fixtures/unit/util/subprocess/runner/no-execute.sh +3 -0
- data/spec/integration/git/rugged/bare_repository_spec.rb +13 -0
- data/spec/integration/git/rugged/thin_repository_spec.rb +14 -0
- data/spec/integration/git/rugged/working_repository_spec.rb +48 -0
- data/spec/integration/git/shellgit/bare_repository_spec.rb +13 -0
- data/spec/integration/git/shellgit/thin_repository_spec.rb +14 -0
- data/spec/integration/git/shellgit/working_repository_spec.rb +13 -0
- data/spec/integration/git/stateful_repository_spec.rb +159 -0
- data/spec/matchers/exit_with.rb +28 -0
- data/spec/matchers/match_realpath.rb +18 -0
- data/spec/r10k-mocks.rb +3 -0
- data/spec/r10k-mocks/mock_config.rb +33 -0
- data/spec/r10k-mocks/mock_env.rb +15 -0
- data/spec/r10k-mocks/mock_source.rb +13 -0
- data/spec/shared-contexts/git-fixtures.rb +55 -0
- data/spec/shared-examples/deploy-actions.rb +69 -0
- data/spec/shared-examples/git-repository.rb +38 -0
- data/spec/shared-examples/git/bare_repository.rb +132 -0
- data/spec/shared-examples/git/thin_repository.rb +26 -0
- data/spec/shared-examples/git/working_repository.rb +207 -0
- data/spec/shared-examples/puppetfile-action.rb +39 -0
- data/spec/shared-examples/settings/ancestry.rb +44 -0
- data/spec/shared-examples/subprocess-runner.rb +83 -0
- data/spec/spec_helper.rb +40 -0
- data/spec/unit/action/cri_runner_spec.rb +72 -0
- data/spec/unit/action/deploy/deploy_helpers_spec.rb +38 -0
- data/spec/unit/action/deploy/display_spec.rb +31 -0
- data/spec/unit/action/deploy/environment_spec.rb +395 -0
- data/spec/unit/action/deploy/module_spec.rb +139 -0
- data/spec/unit/action/puppetfile/check_spec.rb +41 -0
- data/spec/unit/action/puppetfile/cri_runner_spec.rb +47 -0
- data/spec/unit/action/puppetfile/install_spec.rb +84 -0
- data/spec/unit/action/puppetfile/purge_spec.rb +42 -0
- data/spec/unit/action/runner_spec.rb +213 -0
- data/spec/unit/action/visitor_spec.rb +39 -0
- data/spec/unit/cli_spec.rb +9 -0
- data/spec/unit/deployment/config_spec.rb +33 -0
- data/spec/unit/deployment_spec.rb +162 -0
- data/spec/unit/environment/base_spec.rb +109 -0
- data/spec/unit/environment/git_spec.rb +97 -0
- data/spec/unit/environment/name_spec.rb +135 -0
- data/spec/unit/environment/svn_spec.rb +133 -0
- data/spec/unit/errors/formatting_spec.rb +84 -0
- data/spec/unit/feature_spec.rb +50 -0
- data/spec/unit/forge/module_release_spec.rb +213 -0
- data/spec/unit/git/alternates_spec.rb +116 -0
- data/spec/unit/git/cache_spec.rb +55 -0
- data/spec/unit/git/rugged/cache_spec.rb +29 -0
- data/spec/unit/git/rugged/credentials_spec.rb +109 -0
- data/spec/unit/git/shellgit/cache_spec.rb +27 -0
- data/spec/unit/git/stateful_repository_spec.rb +40 -0
- data/spec/unit/git_spec.rb +102 -0
- data/spec/unit/initializers_spec.rb +68 -0
- data/spec/unit/instance_cache_spec.rb +78 -0
- data/spec/unit/keyed_factory_spec.rb +51 -0
- data/spec/unit/logging/terminaloutputter_spec.rb +53 -0
- data/spec/unit/logging_spec.rb +68 -0
- data/spec/unit/module/base_spec.rb +72 -0
- data/spec/unit/module/forge_spec.rb +207 -0
- data/spec/unit/module/git_spec.rb +274 -0
- data/spec/unit/module/metadata_file_spec.rb +68 -0
- data/spec/unit/module/svn_spec.rb +178 -0
- data/spec/unit/module_spec.rb +29 -0
- data/spec/unit/puppetfile_spec.rb +300 -0
- data/spec/unit/settings/collection_spec.rb +123 -0
- data/spec/unit/settings/container_spec.rb +92 -0
- data/spec/unit/settings/definition_spec.rb +79 -0
- data/spec/unit/settings/enum_definition_spec.rb +20 -0
- data/spec/unit/settings/inheritance_spec.rb +38 -0
- data/spec/unit/settings/list_spec.rb +88 -0
- data/spec/unit/settings/loader_spec.rb +110 -0
- data/spec/unit/settings/uri_definition_spec.rb +23 -0
- data/spec/unit/settings_spec.rb +246 -0
- data/spec/unit/source/base_spec.rb +31 -0
- data/spec/unit/source/exec_spec.rb +81 -0
- data/spec/unit/source/git_spec.rb +185 -0
- data/spec/unit/source/hash_spec.rb +54 -0
- data/spec/unit/source/svn_spec.rb +196 -0
- data/spec/unit/source/yaml_spec.rb +42 -0
- data/spec/unit/source_spec.rb +10 -0
- data/spec/unit/svn/remote_spec.rb +21 -0
- data/spec/unit/svn/working_dir_spec.rb +56 -0
- data/spec/unit/util/attempt_spec.rb +82 -0
- data/spec/unit/util/commands_spec.rb +61 -0
- data/spec/unit/util/exec_env_spec.rb +56 -0
- data/spec/unit/util/purgeable_spec.rb +230 -0
- data/spec/unit/util/setopts_spec.rb +59 -0
- data/spec/unit/util/subprocess/result_spec.rb +36 -0
- data/spec/unit/util/subprocess/runner/posix_spec.rb +7 -0
- data/spec/unit/util/subprocess/runner/pump_spec.rb +79 -0
- data/spec/unit/util/subprocess/runner/windows_spec.rb +7 -0
- data/spec/unit/util/subprocess/subprocess_error_spec.rb +26 -0
- data/spec/unit/util/subprocess_spec.rb +65 -0
- data/spec/unit/util/symbolize_keys_spec.rb +67 -0
- metadata +582 -0
|
@@ -0,0 +1,247 @@
|
|
|
1
|
+
R10k's dynamic deployments work best with a workflow that understands and
|
|
2
|
+
respects how r10k works, to prevent automation and manual processes from
|
|
3
|
+
conflicting. Your workflow will need to be customized to meet your team's
|
|
4
|
+
skills, tools, and needs. This guide describes a generic workflow that can
|
|
5
|
+
be customized easily.
|
|
6
|
+
|
|
7
|
+
This guide assumes that each of your modules is in a separate repository
|
|
8
|
+
and that the `Puppetfile` is in its own repo called the
|
|
9
|
+
[Control Repo](http://technoblogic.io/blog/2014/05/16/r10k-control-repos/).
|
|
10
|
+
All module repos have a primary branch of *master* and the Control's primary
|
|
11
|
+
branch is *production*. All changes are made through r10k and no user makes
|
|
12
|
+
manual changes to the environments under **/etc/puppet**.
|
|
13
|
+
|
|
14
|
+
Adding New Modules
|
|
15
|
+
------------------
|
|
16
|
+
|
|
17
|
+
This workflow is useful when adding a forge or internally-developed module
|
|
18
|
+
to your puppet environment.
|
|
19
|
+
|
|
20
|
+
### Create new feature branch
|
|
21
|
+
|
|
22
|
+
Create a new feature branch in your module repositories. Do this for each
|
|
23
|
+
repository, including the control repository, that will reference the new
|
|
24
|
+
module. You do not need to do so for modules that are not being edited.
|
|
25
|
+
|
|
26
|
+
```git checkout -b feature```
|
|
27
|
+
|
|
28
|
+
If you are simply adding the module at this time and not referencing it in
|
|
29
|
+
other modules or manifests, only the Control repo requires a new branch.
|
|
30
|
+
|
|
31
|
+
### Add new module and branches to control repo
|
|
32
|
+
|
|
33
|
+
The new module is added to the control repository's `Puppetfile` like so:
|
|
34
|
+
|
|
35
|
+
```
|
|
36
|
+
# Forge modules:
|
|
37
|
+
mod "puppetlabs/ntp"
|
|
38
|
+
|
|
39
|
+
# Your modules:
|
|
40
|
+
mod "custom_facts",
|
|
41
|
+
:git => "git://github.com/user/custom_facts"
|
|
42
|
+
```
|
|
43
|
+
|
|
44
|
+
For any existing modules that you branched, add a reference to the new branch
|
|
45
|
+
name. Don't forget the comma at the end of the *:git* value.
|
|
46
|
+
|
|
47
|
+
```
|
|
48
|
+
mod "other_module",
|
|
49
|
+
:git => "git://github.com/user/other_module",
|
|
50
|
+
:ref => "feature"
|
|
51
|
+
```
|
|
52
|
+
|
|
53
|
+
### Reference new module in manifests, modules, and hiera
|
|
54
|
+
|
|
55
|
+
If you are simply adding the module at this time and not referencing it in
|
|
56
|
+
other modules or manifests, you may skip this step.
|
|
57
|
+
|
|
58
|
+
Edit your existing manifests, modules, and hiera as needed to make sure of
|
|
59
|
+
the new module.
|
|
60
|
+
|
|
61
|
+
### Deploy environments
|
|
62
|
+
|
|
63
|
+
Save all your changes in each module repo. Commit and push the changes upstream:
|
|
64
|
+
|
|
65
|
+
```
|
|
66
|
+
git commit -a -m ‘Add feature reference to module’
|
|
67
|
+
git push origin feature
|
|
68
|
+
```
|
|
69
|
+
|
|
70
|
+
Commit and push the change in your control repo upstream:
|
|
71
|
+
|
|
72
|
+
```
|
|
73
|
+
git commit -a -m ‘Add module puppetlabs/ntp to branch feature'
|
|
74
|
+
git push origin feature
|
|
75
|
+
```
|
|
76
|
+
|
|
77
|
+
Finally, deploy the environments via r10k. This step must occur on the master:
|
|
78
|
+
|
|
79
|
+
```r10k deploy environment -p```
|
|
80
|
+
|
|
81
|
+
Add the **-v** option for verbosity if you need to troubleshoot any errors. The
|
|
82
|
+
new branch should be located at `$environmentpath/feature`.
|
|
83
|
+
|
|
84
|
+
|
|
85
|
+
### Test the new module branches
|
|
86
|
+
|
|
87
|
+
If you are simply adding the module at this time and not referencing it in
|
|
88
|
+
other modules or manifests, you may skip this step.
|
|
89
|
+
|
|
90
|
+
Run the puppet agent against the new environment from at least two nodes, one
|
|
91
|
+
that should not be impacted by change and one that should be impacted.
|
|
92
|
+
|
|
93
|
+
```puppet agent -t --environment feature```
|
|
94
|
+
|
|
95
|
+
Verify that catalog compilation succeeds and that you are satisfied that the
|
|
96
|
+
effective changes match your expected changes. Repeat the steps above until
|
|
97
|
+
you are satisfied with the results.
|
|
98
|
+
|
|
99
|
+
### Merge changes
|
|
100
|
+
|
|
101
|
+
In each of the changed modules and the control repo, checkout the main branch,
|
|
102
|
+
merge, and push changes to the master/production branch.
|
|
103
|
+
|
|
104
|
+
```
|
|
105
|
+
# Module repos
|
|
106
|
+
git checkout master
|
|
107
|
+
git merge feature
|
|
108
|
+
git push origin master
|
|
109
|
+
|
|
110
|
+
# Control repo
|
|
111
|
+
git checkout production
|
|
112
|
+
git merge feature
|
|
113
|
+
vi Puppetfile
|
|
114
|
+
# Remove all :ref's pointing to 'feature'. Don't forget the trailing commas
|
|
115
|
+
# on the :git statements
|
|
116
|
+
git commit -a -m 'Remove refs to feature branch for module puppetlabs/ntp'
|
|
117
|
+
git push origin production
|
|
118
|
+
```
|
|
119
|
+
|
|
120
|
+
If you are simply adding the module at this time and not referencing it in
|
|
121
|
+
other modules or manifests, you are now finished.
|
|
122
|
+
|
|
123
|
+
### Cleanup feature branches
|
|
124
|
+
|
|
125
|
+
You may skip this step for long-lived branches, however most feature branches
|
|
126
|
+
should be short-lived and can be pruned once testing and merging is complete.
|
|
127
|
+
|
|
128
|
+
Remove the old branches in each repo:
|
|
129
|
+
|
|
130
|
+
```
|
|
131
|
+
git branch -D repo
|
|
132
|
+
git push origin :repo
|
|
133
|
+
```
|
|
134
|
+
|
|
135
|
+
Deploy via r10k on the master and ensure there are no errors. The *feature*
|
|
136
|
+
dynamic environment will no longer exist at `$environmentpath/feature` if you
|
|
137
|
+
deleted the branch in your Control repo.
|
|
138
|
+
|
|
139
|
+
```r10k deploy environment -p```
|
|
140
|
+
|
|
141
|
+
Editing existing Modules
|
|
142
|
+
------------------------
|
|
143
|
+
|
|
144
|
+
When editing your own existing modules, this workflow should be followed.
|
|
145
|
+
|
|
146
|
+
### Create new feature branches
|
|
147
|
+
|
|
148
|
+
Create a new feature branch in your module repositories. Do this in the edited
|
|
149
|
+
module, the control repository, and in each module that will reference the
|
|
150
|
+
updated module. You do not need to do so for modules that are not being edited.
|
|
151
|
+
|
|
152
|
+
```git checkout -b feature```
|
|
153
|
+
|
|
154
|
+
### Update control repo to reference new branch
|
|
155
|
+
|
|
156
|
+
For all modules that you branched, add a reference to the new branch name to
|
|
157
|
+
the `Puppetfile` in your Control repo. Don't forget the comma at the end of
|
|
158
|
+
the *:git* value.
|
|
159
|
+
|
|
160
|
+
```
|
|
161
|
+
mod "other_module",
|
|
162
|
+
:git => "git://github.com/user/other_module",
|
|
163
|
+
:ref => "feature"
|
|
164
|
+
```
|
|
165
|
+
|
|
166
|
+
### Modify existing module, references to module
|
|
167
|
+
|
|
168
|
+
Make the required changes to your existing module. Edit your existing manifests,
|
|
169
|
+
modules, and hiera as needed to make sure of the updated module.
|
|
170
|
+
|
|
171
|
+
### Deploy environments
|
|
172
|
+
|
|
173
|
+
Save all your changes in each modified repo. Commit and push the changes upstream:
|
|
174
|
+
|
|
175
|
+
```
|
|
176
|
+
git commit -a -m ‘Add feature reference to module’
|
|
177
|
+
git push origin feature
|
|
178
|
+
```
|
|
179
|
+
|
|
180
|
+
Commit and push the change in your control repo upstream:
|
|
181
|
+
|
|
182
|
+
```
|
|
183
|
+
git commit -a -m ‘Add module puppetlabs/ntp to branch feature'
|
|
184
|
+
git push origin feature
|
|
185
|
+
```
|
|
186
|
+
|
|
187
|
+
Finally, deploy the environments via r10k. This step must occur on the master:
|
|
188
|
+
|
|
189
|
+
```r10k deploy environment -p```
|
|
190
|
+
|
|
191
|
+
Add the *-v* option for verbosity if you need to troubleshoot any errors. The
|
|
192
|
+
new branch should be located at `$environmentpath/feature`.
|
|
193
|
+
|
|
194
|
+
### Test the new module branches
|
|
195
|
+
|
|
196
|
+
Run the puppet agent against the new environment from at least two nodes, one
|
|
197
|
+
that should not be impacted by change and one that should be impacted.
|
|
198
|
+
|
|
199
|
+
```puppet agent -t --environment feature```
|
|
200
|
+
|
|
201
|
+
Verify that catalog compilation succeeds and that you are satisfied that the
|
|
202
|
+
effective changes match your expected changes. Repeat the steps above until
|
|
203
|
+
you are satisfied with the results.
|
|
204
|
+
|
|
205
|
+
### Merge changes
|
|
206
|
+
|
|
207
|
+
In each of the changed module repos, checkout the main branch and merge.
|
|
208
|
+
|
|
209
|
+
```
|
|
210
|
+
# Module repos
|
|
211
|
+
git checkout master
|
|
212
|
+
git merge feature
|
|
213
|
+
git push origin master
|
|
214
|
+
```
|
|
215
|
+
|
|
216
|
+
In the Control repo, check out production. Do NOT merge the feature branch as it
|
|
217
|
+
now references the incorrect branch for each git repo, and no other changes
|
|
218
|
+
were made (unlike a new module, where a new repo is referenced).
|
|
219
|
+
|
|
220
|
+
```
|
|
221
|
+
# Control repo
|
|
222
|
+
git checkout production
|
|
223
|
+
```
|
|
224
|
+
|
|
225
|
+
### Cleanup feature branches
|
|
226
|
+
|
|
227
|
+
You may skip this step for long-lived branches, however most feature branches
|
|
228
|
+
should be short-lived and can be pruned once testing and merging is complete.
|
|
229
|
+
|
|
230
|
+
Remove the old branches in each repo:
|
|
231
|
+
|
|
232
|
+
```
|
|
233
|
+
git branch -D repo
|
|
234
|
+
git push origin :repo
|
|
235
|
+
```
|
|
236
|
+
|
|
237
|
+
Redeploy with r10k on your Puppet Master and ensure there are no errors. The *feature*
|
|
238
|
+
dynamic environment should no longer exist at `$environmentpath/feature`.
|
|
239
|
+
|
|
240
|
+
```r10k deploy environment -p```
|
|
241
|
+
|
|
242
|
+
Customize Your Workflow
|
|
243
|
+
-----------------------
|
|
244
|
+
|
|
245
|
+
This guide is very generic in nature. Use it as a template and expand and
|
|
246
|
+
modify it to fit your team, your tools, and your company culture. Above all,
|
|
247
|
+
be consistent in your methodology.
|
data/doc/faq.mkd
ADDED
|
@@ -0,0 +1,164 @@
|
|
|
1
|
+
Frequently Asked Questions
|
|
2
|
+
==========================
|
|
3
|
+
|
|
4
|
+
### How can run I `puppet generate types` for each changed environment during deployment?
|
|
5
|
+
|
|
6
|
+
The command `puppet generate types` creates Puppet signatures for custom
|
|
7
|
+
types circumventing the need to load their Ruby code during compilation.
|
|
8
|
+
This prevents the type definitions from "leaking" across environments.
|
|
9
|
+
|
|
10
|
+
Best practice currently is to run this command as part of your Puppet
|
|
11
|
+
code deployment pipeline, and r10k's postrun command ability is a natural
|
|
12
|
+
place to do so.
|
|
13
|
+
|
|
14
|
+
The postrun command will have any occurance of "$modifiedenvs" replaced
|
|
15
|
+
with a space-seperated list of environments the deploy was configured to
|
|
16
|
+
modify. For example creating the script:
|
|
17
|
+
|
|
18
|
+
```
|
|
19
|
+
$ cat /usr/local/bin/generate-puppet-types.sh
|
|
20
|
+
!#/bin/bash
|
|
21
|
+
|
|
22
|
+
for environment in $1; do
|
|
23
|
+
/opt/puppetlabs/bin/puppet generate types --environment $environment
|
|
24
|
+
done
|
|
25
|
+
```
|
|
26
|
+
|
|
27
|
+
And configuring r10k such:
|
|
28
|
+
```
|
|
29
|
+
$ tail -2 /etc/puppetlabs/r10k/r10k.yaml
|
|
30
|
+
|
|
31
|
+
postrun: ["/usr/local/bin/generate-puppet-types.sh", "$modifiedenvs"]
|
|
32
|
+
```
|
|
33
|
+
|
|
34
|
+
Should provide you with the necessary generate type definitions for
|
|
35
|
+
improved environment isolation.
|
|
36
|
+
|
|
37
|
+
|
|
38
|
+
|
|
39
|
+
### The default Git branch is 'master', while the default Puppet environment is 'production'. How do I reconcile this?
|
|
40
|
+
|
|
41
|
+
The default Git branch name is 'master', but this is a somewhat arbitrary name
|
|
42
|
+
and doesn't necessarily map to every use case. In the case of R10K it's generally
|
|
43
|
+
easiest to rename 'master' to 'production'. You can rename the master branch
|
|
44
|
+
with the following:
|
|
45
|
+
|
|
46
|
+
```
|
|
47
|
+
git branch -m master production
|
|
48
|
+
git push --set-upstream origin production
|
|
49
|
+
```
|
|
50
|
+
|
|
51
|
+
Note that this will only create a new branch called production with a copy of
|
|
52
|
+
master - to change the default branch for all subsequent clones, read on.
|
|
53
|
+
|
|
54
|
+
#### Changing the default branch for bare Git repositories
|
|
55
|
+
|
|
56
|
+
When you clone a repository, Git checks out the [currently active branch][git-clone]
|
|
57
|
+
on the remote repository. Changing this for a non-bare repository is simple - just
|
|
58
|
+
check out a different branch and subsequent clones from that repository will
|
|
59
|
+
use that branch.
|
|
60
|
+
|
|
61
|
+
For bare repositories things are a bit more complex. Bare repositories do not
|
|
62
|
+
have a working directory that can be checked out, but they do have a [symbolic
|
|
63
|
+
ref][git-symbolic-ref] that serves the same role. To change this, run the
|
|
64
|
+
following command:
|
|
65
|
+
|
|
66
|
+
```
|
|
67
|
+
git --git-dir /path/to/bare/repo symbolic-ref HEAD refs/heads/production
|
|
68
|
+
```
|
|
69
|
+
|
|
70
|
+
#### Changing the default branch for different Git services
|
|
71
|
+
|
|
72
|
+
For Git hosting services where you may not cannot directly invoke commands,
|
|
73
|
+
there are usually administrative tools to allow you to change the default branch
|
|
74
|
+
on your remote repositories:
|
|
75
|
+
|
|
76
|
+
* [GitHub][github-default-branch]
|
|
77
|
+
* [Bitbucket][bitbucket-default-branch]
|
|
78
|
+
* [Gitolite v2][gitolite-v2-default-branch]
|
|
79
|
+
* [Gitolite v3][gitolite-v3-default-branch]
|
|
80
|
+
|
|
81
|
+
[git-clone]: https://www.kernel.org/pub/software/scm/git/docs/git-clone.html "Man page for git-clone"
|
|
82
|
+
[git-symbolic-ref]: https://www.kernel.org/pub/software/scm/git/docs/git-symbolic-ref.html "Man page for git-symbolic-ref"
|
|
83
|
+
|
|
84
|
+
[github-default-branch]: https://help.github.com/articles/setting-the-default-branch "Changing the default branch on GitHub"
|
|
85
|
+
[bitbucket-default-branch]: https://answers.atlassian.com/questions/280944/how-to-change-main-branch-in-bitbucket "Changing the default branch on Bitbucket"
|
|
86
|
+
[gitolite-v2-default-branch]: http://stackoverflow.com/questions/7091599/git-default-remote-branch-with-gitolite "Changing the default branch on Gitolite v2"
|
|
87
|
+
[gitolite-v3-default-branch]: http://stackoverflow.com/questions/13949093/git-change-default-branch-gitolite "Changing the default branch on Gitolite v3"
|
|
88
|
+
|
|
89
|
+
### How do I prevent r10k from removing modules in the `/modules` directory of my Git repository?
|
|
90
|
+
|
|
91
|
+
By default, r10k will install modules specified in the Puppetfile into the
|
|
92
|
+
`/modules` directory of each environment, but if you already use that directory
|
|
93
|
+
and keep modules in it, r10k may think those modules are not meant to exist and
|
|
94
|
+
may remove them.
|
|
95
|
+
|
|
96
|
+
There are three ways of fixing this: including your local modules in the
|
|
97
|
+
Puppetfile, moving the directory where r10k install Puppetfile sourced modules,
|
|
98
|
+
or moving your modules.
|
|
99
|
+
|
|
100
|
+
#### Including your local modules in the Puppetfile
|
|
101
|
+
|
|
102
|
+
The Puppetfile has a concept of a "local" module, otherwise known as a module
|
|
103
|
+
that r10k did not directly placed there but should not be removed. If you want
|
|
104
|
+
to continue keep your modules in the `/modules` directory and still install
|
|
105
|
+
external modules from the Puppetfile into that directory, you can add a `mod`
|
|
106
|
+
directive to the Puppetfile for each of your local modules.
|
|
107
|
+
|
|
108
|
+
```
|
|
109
|
+
|
|
110
|
+
mod 'my_ntp', :local => true
|
|
111
|
+
mod 'roles', :local => true
|
|
112
|
+
mod 'profiles', :local => true
|
|
113
|
+
|
|
114
|
+
# Include your external modules as usual
|
|
115
|
+
mod 'puppetlabs/stdlib'
|
|
116
|
+
mod 'puppetlabs/apache'
|
|
117
|
+
```
|
|
118
|
+
|
|
119
|
+
#### Move where the Puppetfile installs external modules
|
|
120
|
+
|
|
121
|
+
Instead of having to add a module entry for each of your local modules, you can
|
|
122
|
+
simply move where the Puppetfile installs modules with the `moduledir` setting.
|
|
123
|
+
|
|
124
|
+
```
|
|
125
|
+
# The moduledir setting must be set before any modules are created
|
|
126
|
+
moduledir "external-modules"
|
|
127
|
+
|
|
128
|
+
mod 'puppetlabs/stdlib'
|
|
129
|
+
mod 'puppetlabs/apache'
|
|
130
|
+
```
|
|
131
|
+
|
|
132
|
+
In Puppet 3.6 and later you can create an `environment.conf` in the root of your
|
|
133
|
+
environment to indicate which directories contain modules:
|
|
134
|
+
|
|
135
|
+
```
|
|
136
|
+
# environment.conf
|
|
137
|
+
modulepath = modules:external-modules
|
|
138
|
+
```
|
|
139
|
+
|
|
140
|
+
#### Move your local modules
|
|
141
|
+
|
|
142
|
+
Lastly, you can simply move your locally versioned modules to a separate
|
|
143
|
+
directory to avoid conflicting over the `/modules` directory entirely. With this
|
|
144
|
+
example as well you can use the `environment.conf` file to tell Puppet which
|
|
145
|
+
directories contain modules.
|
|
146
|
+
|
|
147
|
+
```
|
|
148
|
+
# environment.conf
|
|
149
|
+
modulepath = internal-modules:modules
|
|
150
|
+
```
|
|
151
|
+
|
|
152
|
+
#### Does R10K support Local/Private Forge?
|
|
153
|
+
|
|
154
|
+
Yes. Set the Forge to use _globally_ in `r10k.yaml`. see [Configuration](/doc/dynamic-environments/configuration.mkd#baseurl) for details.
|
|
155
|
+
|
|
156
|
+
|
|
157
|
+
#### What does the name mean?
|
|
158
|
+
|
|
159
|
+
It’s called R10K because I’m terrible at names. When I started working on R10K
|
|
160
|
+
I couldn’t come up with a decent name. While trying to come up with something
|
|
161
|
+
clever, I recalled that Randall Munroe wrote a bot for [controlling IRC chatter](http://blog.xkcd.com/2008/01/14/robot9000-and-xkcd-signal-attacking-noise-in-chat/),
|
|
162
|
+
and gave it the most generic name he could think of - Robot 9000. Since I just
|
|
163
|
+
needed a name, any name, I decided to go with an equally generic name by
|
|
164
|
+
incrementing the robot index.
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
Git Cloning and Mirroring
|
|
2
|
+
=========================
|
|
3
|
+
|
|
4
|
+
Most Git operations on a repository require having a full clone of that
|
|
5
|
+
repository locally available. Because this clone is a full copy, the initial
|
|
6
|
+
clone is heavyweight and generally time consuming. For a situation like r10k
|
|
7
|
+
where the same repositories are reused often, constantly cloning and deleting
|
|
8
|
+
repositories is very inefficient.
|
|
9
|
+
|
|
10
|
+
In order to speed up Git operations r10k takes a number of steps to avoid
|
|
11
|
+
cloning and fetching repositories, as well as deduplicating content across
|
|
12
|
+
multiple clones of the same repositories.
|
|
13
|
+
|
|
14
|
+
Because r10k tends to reuse the same Git repositories in multiple places, r10k
|
|
15
|
+
avoids repeated, full repository clones by mirroring repositories. When r10k
|
|
16
|
+
starts using a new repository, it first clones that repository into a central
|
|
17
|
+
location for later use. This initial clone is the only time that r10k will
|
|
18
|
+
perform a full clone of that repository.
|
|
19
|
+
|
|
20
|
+
When r10k creates an actual checkout of a Git repository, it uses the
|
|
21
|
+
corresponding mirrored repository as a [reference](#git-alternates). This allows
|
|
22
|
+
the working checkout to borrow objects from the mirrored repository instead of
|
|
23
|
+
cloning all of the Git objects again. This saves a great deal of time and space
|
|
24
|
+
as the number of copies of a repository increases.
|
|
25
|
+
|
|
26
|
+
Mirrored git repositories are cloned into the directory specified by the
|
|
27
|
+
r10k.yaml 'cachedir' setting.
|
|
28
|
+
|
|
29
|
+
The name 'cachedir' is a bit of a misnomer; Git repositories are mirrored to
|
|
30
|
+
speed up access to the remote resource like a cache, but unlike a traditional
|
|
31
|
+
cache the mirrored repositories are persistent and should not be deleted.
|
|
32
|
+
|
|
33
|
+
Because the mirrored repository contains all of the objects for all of the
|
|
34
|
+
referencing repositories, deleting the mirrored repository is akin to deleting
|
|
35
|
+
the `.git/objects` directory. Doing so effectively cripples the repository, so
|
|
36
|
+
removing mirrored repositories should be done with care to avoid deleting
|
|
37
|
+
repositories that are still in use.
|
|
38
|
+
|
|
39
|
+
Git alternates
|
|
40
|
+
--------------
|
|
41
|
+
|
|
42
|
+
A standard git repository stores all content in the `.git/objects` directory,
|
|
43
|
+
either as a zlib compressed file in `.git/objects/[0-9a-f]{2}/[0-9a-f]{38}` or
|
|
44
|
+
as part of a packfile in `.git/objects/pack`. Since content can be both stored
|
|
45
|
+
in and retrieved from this location it's treated like a simple database, and is
|
|
46
|
+
generally referred to as the Git object database.
|
|
47
|
+
|
|
48
|
+
Git allows a single repository to look in more than just `.git/objects` for
|
|
49
|
+
objects; additional object databases are referred to as **alternates**. If a
|
|
50
|
+
repository has alternate object databases set up, it will check `.git/objects`
|
|
51
|
+
and then each alternate object database when looking for an object. Git stores a
|
|
52
|
+
list of alternate object databases in `.git/objects/info/alternates`. Invoking
|
|
53
|
+
`git clone` with the `--reference <repo>` flag will use that repository as an
|
|
54
|
+
alternate object database.
|
|
55
|
+
|
|
56
|
+
Links
|
|
57
|
+
-----
|
|
58
|
+
|
|
59
|
+
* [man git-clone(1) --reference](https://www.kernel.org/pub/software/scm/git/docs/git-clone.html)
|
|
60
|
+
* [man gitrepository-layout(5) objects/info/alternates](https://www.kernel.org/pub/software/scm/git/docs/gitrepository-layout.html)
|