pdk 1.9.1 → 1.10.0
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/CHANGELOG.md +25 -0
- data/lib/pdk/cli.rb +5 -1
- data/lib/pdk/cli/build.rb +6 -2
- data/lib/pdk/cli/convert.rb +3 -0
- data/lib/pdk/cli/module/generate.rb +3 -0
- data/lib/pdk/cli/new/class.rb +0 -2
- data/lib/pdk/cli/new/defined_type.rb +0 -2
- data/lib/pdk/cli/new/module.rb +3 -0
- data/lib/pdk/cli/new/provider.rb +0 -2
- data/lib/pdk/cli/new/task.rb +0 -1
- data/lib/pdk/cli/update.rb +2 -0
- data/lib/pdk/cli/util.rb +10 -0
- data/lib/pdk/cli/validate.rb +1 -1
- data/lib/pdk/generate/module.rb +11 -9
- data/lib/pdk/generate/puppet_object.rb +5 -9
- data/lib/pdk/module/convert.rb +3 -3
- data/lib/pdk/module/metadata.rb +2 -2
- data/lib/pdk/module/templatedir.rb +54 -29
- data/lib/pdk/module/update.rb +22 -14
- data/lib/pdk/util.rb +1 -57
- data/lib/pdk/util/filesystem.rb +7 -1
- data/lib/pdk/util/git.rb +46 -1
- data/lib/pdk/util/template_uri.rb +231 -0
- data/lib/pdk/util/version.rb +1 -2
- data/lib/pdk/version.rb +1 -1
- data/locales/pdk.pot +174 -106
- metadata +12 -5
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: c1a405daa77845c20f2b65516c1a43532f4589c0
|
4
|
+
data.tar.gz: 155e5410885b024cbfb942c7b35c281c89a30402
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 253daf9ea17ec338176dc232ec049abc6fdd88facfe5995fbaba73cb804a30b4d082fa56973fea9b841ad936f86223111939ff474ff810dfddf6ab5beb3ed869
|
7
|
+
data.tar.gz: 45985a21c5d8989d8c7214a0e7fe90df74f022850d9fe1fb429d92ff01642a755a4379adda5eb2f8bf5ee71508b9668e7b164abd17e34b268a7acbcc024c3409
|
data/CHANGELOG.md
CHANGED
@@ -4,6 +4,30 @@ All changes to this repo will be documented in this file.
|
|
4
4
|
See the [release notes](https://puppet.com/docs/pdk/latest/release_notes.html) for a high-level summary.
|
5
5
|
|
6
6
|
|
7
|
+
## [v1.10.0](https://github.com/puppetlabs/pdk/tree/v1.10.0) (2019-04-02)
|
8
|
+
[Full Changelog](https://github.com/puppetlabs/pdk/compare/v1.9.1...v1.10.0)
|
9
|
+
|
10
|
+
**Implemented enhancements:**
|
11
|
+
|
12
|
+
- \(PDK-1086\) Change `pdk build --force` to warn if missing module metadata and continue [\#643](https://github.com/puppetlabs/pdk/pull/643) ([rodjek](https://github.com/rodjek))
|
13
|
+
- \(PDK-1308\) Ensure PDK-written non-templated files have trailing newline [\#640](https://github.com/puppetlabs/pdk/pull/640) ([scotje](https://github.com/scotje))
|
14
|
+
- \(PDK-718\) Add --template-ref argument for upstream template repo tags [\#434](https://github.com/puppetlabs/pdk/pull/434) ([hunner](https://github.com/hunner))
|
15
|
+
|
16
|
+
**Closed issues:**
|
17
|
+
|
18
|
+
- `pdk update` is not idempotent for deletion of CI config files [\#593](https://github.com/puppetlabs/pdk/issues/593)
|
19
|
+
- Rspec tests for CRLF line endings fail [\#587](https://github.com/puppetlabs/pdk/issues/587)
|
20
|
+
- class params feature in class object template not documented or useable [\#557](https://github.com/puppetlabs/pdk/issues/557)
|
21
|
+
- Disabling puppet-lint checks in PDK [\#538](https://github.com/puppetlabs/pdk/issues/538)
|
22
|
+
|
23
|
+
**Merged pull requests:**
|
24
|
+
|
25
|
+
- \(maint\) Fix package specs for template-ref changes [\#647](https://github.com/puppetlabs/pdk/pull/647) ([rodjek](https://github.com/rodjek))
|
26
|
+
- \(maint\) Enforce LF line endings in Rubocop [\#645](https://github.com/puppetlabs/pdk/pull/645) ([glennsarti](https://github.com/glennsarti))
|
27
|
+
- \(FM-7579, PDK-1236\) bump the version of CRI used [\#638](https://github.com/puppetlabs/pdk/pull/638) ([tphoney](https://github.com/tphoney))
|
28
|
+
- \(PDK-1294\) Update version post-release [\#637](https://github.com/puppetlabs/pdk/pull/637) ([bmjen](https://github.com/bmjen))
|
29
|
+
- \(PDK-1298\) acceptance:local test suite optimisation [\#633](https://github.com/puppetlabs/pdk/pull/633) ([rodjek](https://github.com/rodjek))
|
30
|
+
|
7
31
|
## [v1.9.1](https://github.com/puppetlabs/pdk/tree/v1.9.1) (2019-03-01)
|
8
32
|
[Full Changelog](https://github.com/puppetlabs/pdk/compare/v1.9.0...v1.9.1)
|
9
33
|
|
@@ -17,6 +41,7 @@ See the [release notes](https://puppet.com/docs/pdk/latest/release_notes.html) f
|
|
17
41
|
|
18
42
|
**Merged pull requests:**
|
19
43
|
|
44
|
+
- \(PDK-1289\) Release 1.9.1 [\#632](https://github.com/puppetlabs/pdk/pull/632) ([bmjen](https://github.com/bmjen))
|
20
45
|
- \(maint\) Pin parallel gem to 1.13.0 [\#631](https://github.com/puppetlabs/pdk/pull/631) ([rodjek](https://github.com/rodjek))
|
21
46
|
- \(PDK-1260\) Bump to 1.10.0.pre for new dev work [\#621](https://github.com/puppetlabs/pdk/pull/621) ([bmjen](https://github.com/bmjen))
|
22
47
|
|
data/lib/pdk/cli.rb
CHANGED
@@ -39,11 +39,15 @@ module PDK::CLI
|
|
39
39
|
end
|
40
40
|
|
41
41
|
def self.template_url_option(dsl)
|
42
|
-
desc = _('Specifies the URL to the template to use when creating new modules or classes. (default: %{default_url})') % { default_url: PDK::Util.
|
42
|
+
desc = _('Specifies the URL to the template to use when creating new modules or classes. (default: %{default_url})') % { default_url: PDK::Util::TemplateURI.default_template_uri }
|
43
43
|
|
44
44
|
dsl.option nil, 'template-url', desc, argument: :required
|
45
45
|
end
|
46
46
|
|
47
|
+
def self.template_ref_option(dsl)
|
48
|
+
dsl.option nil, 'template-ref', _('Specifies the template git branch or tag to use when creating new modules or classes.'), argument: :required
|
49
|
+
end
|
50
|
+
|
47
51
|
def self.skip_interview_option(dsl)
|
48
52
|
dsl.option nil, 'skip-interview', _('When specified, skips interactive querying of metadata.')
|
49
53
|
end
|
data/lib/pdk/cli/build.rb
CHANGED
@@ -28,8 +28,12 @@ module PDK::CLI
|
|
28
28
|
#
|
29
29
|
unless module_metadata.forge_ready?
|
30
30
|
if opts[:force]
|
31
|
-
PDK.logger.
|
32
|
-
|
31
|
+
PDK.logger.warn _(
|
32
|
+
'This module is missing the following fields in the metadata.json: %{fields}. ' \
|
33
|
+
'These missing fields may affect the visibility of the module on the Forge.',
|
34
|
+
) % {
|
35
|
+
fields: module_metadata.missing_fields.join(', '),
|
36
|
+
}
|
33
37
|
else
|
34
38
|
module_metadata.interview_for_forge!
|
35
39
|
module_metadata.write!('metadata.json')
|
data/lib/pdk/cli/convert.rb
CHANGED
@@ -7,6 +7,7 @@ module PDK::CLI
|
|
7
7
|
summary _('Convert an existing module to be compatible with the PDK.')
|
8
8
|
|
9
9
|
PDK::CLI.template_url_option(self)
|
10
|
+
PDK::CLI.template_ref_option(self)
|
10
11
|
PDK::CLI.skip_interview_option(self)
|
11
12
|
PDK::CLI.full_interview_option(self)
|
12
13
|
flag nil, :noop, _('Do not convert the module, just output what would be done.')
|
@@ -21,6 +22,8 @@ module PDK::CLI
|
|
21
22
|
log_level: :info,
|
22
23
|
)
|
23
24
|
|
25
|
+
PDK::CLI::Util.validate_template_opts(opts)
|
26
|
+
|
24
27
|
if opts[:noop] && opts[:force]
|
25
28
|
raise PDK::CLI::ExitWithError, _('You can not specify --noop and --force when converting a module')
|
26
29
|
end
|
@@ -7,6 +7,7 @@ module PDK::CLI
|
|
7
7
|
summary _('This command is now \'pdk new module\'.')
|
8
8
|
|
9
9
|
PDK::CLI.template_url_option(self)
|
10
|
+
PDK::CLI.template_ref_option(self)
|
10
11
|
PDK::CLI.skip_interview_option(self)
|
11
12
|
|
12
13
|
run do |opts, args, _cmd|
|
@@ -19,6 +20,8 @@ module PDK::CLI
|
|
19
20
|
exit 1
|
20
21
|
end
|
21
22
|
|
23
|
+
PDK::CLI::Util.validate_template_opts(opts)
|
24
|
+
|
22
25
|
PDK.logger.info(_('New modules are created using the ‘pdk new module’ command.'))
|
23
26
|
prompt = TTY::Prompt.new(help_color: :cyan)
|
24
27
|
redirect = PDK::CLI::Util::CommandRedirector.new(prompt)
|
data/lib/pdk/cli/new/class.rb
CHANGED
@@ -4,8 +4,6 @@ module PDK::CLI
|
|
4
4
|
usage _('defined_type [options] <name>')
|
5
5
|
summary _('Create a new defined type named <name> using given options')
|
6
6
|
|
7
|
-
PDK::CLI.template_url_option(self)
|
8
|
-
|
9
7
|
run do |opts, args, _cmd|
|
10
8
|
PDK::CLI::Util.ensure_in_module!(
|
11
9
|
message: _('Defined types can only be created from inside a valid module directory.'),
|
data/lib/pdk/cli/new/module.rb
CHANGED
@@ -5,6 +5,7 @@ module PDK::CLI
|
|
5
5
|
summary _('Create a new module named [module_name] using given options')
|
6
6
|
|
7
7
|
PDK::CLI.template_url_option(self)
|
8
|
+
PDK::CLI.template_ref_option(self)
|
8
9
|
PDK::CLI.skip_interview_option(self)
|
9
10
|
PDK::CLI.full_interview_option(self)
|
10
11
|
|
@@ -18,6 +19,8 @@ module PDK::CLI
|
|
18
19
|
module_name = args[0]
|
19
20
|
target_dir = args[1]
|
20
21
|
|
22
|
+
PDK::CLI::Util.validate_template_opts(opts)
|
23
|
+
|
21
24
|
if opts[:'skip-interview'] && opts[:'full-interview']
|
22
25
|
PDK.logger.info _('Ignoring --full-interview and continuing with --skip-interview.')
|
23
26
|
opts[:'full-interview'] = false
|
data/lib/pdk/cli/new/provider.rb
CHANGED
data/lib/pdk/cli/new/task.rb
CHANGED
@@ -4,7 +4,6 @@ module PDK::CLI
|
|
4
4
|
usage _('task [options] <name>')
|
5
5
|
summary _('Create a new task named <name> using given options')
|
6
6
|
|
7
|
-
PDK::CLI.template_url_option(self)
|
8
7
|
option nil, :description, _('A short description of the purpose of the task'), argument: :required
|
9
8
|
|
10
9
|
run do |opts, args, _cmd|
|
data/lib/pdk/cli/update.rb
CHANGED
@@ -10,6 +10,8 @@ module PDK::CLI
|
|
10
10
|
flag nil, :noop, _('Do not update the module, just output what would be done.')
|
11
11
|
flag nil, :force, _('Update the module automatically, with no prompts.')
|
12
12
|
|
13
|
+
PDK::CLI.template_ref_option(self)
|
14
|
+
|
13
15
|
run do |opts, _args, _cmd|
|
14
16
|
require 'pdk/module/update'
|
15
17
|
|
data/lib/pdk/cli/util.rb
CHANGED
@@ -188,6 +188,16 @@ module PDK
|
|
188
188
|
end
|
189
189
|
end
|
190
190
|
module_function :validate_puppet_version_opts
|
191
|
+
|
192
|
+
def validate_template_opts(opts)
|
193
|
+
if opts[:'template-ref'] && opts[:'template-url'].nil?
|
194
|
+
raise PDK::CLI::ExitWithError, _('--template-ref requires --template-url to also be specified.')
|
195
|
+
end
|
196
|
+
|
197
|
+
return unless opts[:'template-url'] && opts[:'template-url'].include?('#')
|
198
|
+
raise PDK::CLI::ExitWithError, _('--template-url may not be used to specify paths containing #\'s.')
|
199
|
+
end
|
200
|
+
module_function :validate_template_opts
|
191
201
|
end
|
192
202
|
end
|
193
203
|
end
|
data/lib/pdk/cli/validate.rb
CHANGED
data/lib/pdk/generate/module.rb
CHANGED
@@ -54,10 +54,10 @@ module PDK
|
|
54
54
|
|
55
55
|
prepare_module_directory(temp_target_dir)
|
56
56
|
|
57
|
-
|
57
|
+
template_uri = PDK::Util::TemplateURI.new(opts)
|
58
58
|
|
59
59
|
begin
|
60
|
-
PDK::Module::TemplateDir.new(
|
60
|
+
PDK::Module::TemplateDir.new(template_uri, metadata.data, true) do |templates|
|
61
61
|
templates.render do |file_path, file_content|
|
62
62
|
file = Pathname.new(temp_target_dir) + file_path
|
63
63
|
file.dirname.mkpath
|
@@ -74,21 +74,23 @@ module PDK
|
|
74
74
|
raise PDK::CLI::ExitWithError, e
|
75
75
|
end
|
76
76
|
|
77
|
-
|
78
|
-
|
79
|
-
#
|
77
|
+
# Only update the answers files after metadata has been written.
|
78
|
+
if template_uri.default?
|
79
|
+
# If the user specifies our default template url via the command
|
80
|
+
# line, remove the saved template-url answer so that the template_uri
|
81
|
+
# resolution can find new default URLs in the future.
|
80
82
|
PDK.answers.update!('template-url' => nil) if opts.key?(:'template-url')
|
81
83
|
else
|
82
|
-
# Save the template-url
|
83
|
-
#
|
84
|
-
PDK.answers.update!('template-url' =>
|
84
|
+
# Save the template-url answers if the module was generated using a
|
85
|
+
# template/reference other than ours.
|
86
|
+
PDK.answers.update!('template-url' => template_uri.metadata_format)
|
85
87
|
end
|
86
88
|
|
87
89
|
begin
|
88
90
|
if FileUtils.mv(temp_target_dir, target_dir)
|
89
91
|
Dir.chdir(target_dir) { PDK::Util::Bundler.ensure_bundle! } unless opts[:'skip-bundle-install']
|
90
92
|
|
91
|
-
PDK.logger.info
|
93
|
+
PDK.logger.info _('Module \'%{name}\' generated at path \'%{path}\', from template \'%{url}\'.') % { name: opts[:module_name], path: target_dir, url: template_uri.git_remote }
|
92
94
|
PDK.logger.info(_('In your module directory, add classes with the \'pdk new class\' command.'))
|
93
95
|
end
|
94
96
|
rescue Errno::EACCES => e
|
@@ -29,7 +29,7 @@ module PDK
|
|
29
29
|
# @param options [Hash{Symbol => Object}]
|
30
30
|
#
|
31
31
|
# @api public
|
32
|
-
def initialize(module_dir, object_name, options
|
32
|
+
def initialize(module_dir, object_name, options)
|
33
33
|
@module_dir = module_dir
|
34
34
|
@options = options
|
35
35
|
@object_name = object_name
|
@@ -205,12 +205,12 @@ module PDK
|
|
205
205
|
# @api private
|
206
206
|
def with_templates
|
207
207
|
templates.each do |template|
|
208
|
-
if template[:
|
209
|
-
PDK.logger.debug(_('No %{dir_type} template
|
208
|
+
if template[:uri].nil?
|
209
|
+
PDK.logger.debug(_('No %{dir_type} template found; trying next template directory.') % { dir_type: template[:type] })
|
210
210
|
next
|
211
211
|
end
|
212
212
|
|
213
|
-
PDK::Module::TemplateDir.new(template[:
|
213
|
+
PDK::Module::TemplateDir.new(PDK::Util::TemplateURI.new(template[:uri])) do |template_dir|
|
214
214
|
template_paths = template_dir.object_template_for(object_type)
|
215
215
|
|
216
216
|
if template_paths
|
@@ -250,11 +250,7 @@ module PDK
|
|
250
250
|
#
|
251
251
|
# @api private
|
252
252
|
def templates
|
253
|
-
@templates ||=
|
254
|
-
{ type: 'CLI', url: @options[:'template-url'], allow_fallback: false },
|
255
|
-
{ type: 'metadata', url: module_metadata.data['template-url'], allow_fallback: true },
|
256
|
-
{ type: 'default', url: PDK::Util.default_template_url, allow_fallback: false },
|
257
|
-
]
|
253
|
+
@templates ||= PDK::Util::TemplateURI.templates(@options)
|
258
254
|
end
|
259
255
|
|
260
256
|
# Retrieves the name of the module (without the forge username) from the
|
data/lib/pdk/module/convert.rb
CHANGED
@@ -68,7 +68,7 @@ module PDK
|
|
68
68
|
def stage_changes!
|
69
69
|
metadata_path = 'metadata.json'
|
70
70
|
|
71
|
-
PDK::Module::TemplateDir.new(
|
71
|
+
PDK::Module::TemplateDir.new(template_uri, nil, false) do |templates|
|
72
72
|
new_metadata = update_metadata(metadata_path, templates.metadata)
|
73
73
|
templates.module_metadata = new_metadata.data unless new_metadata.nil?
|
74
74
|
|
@@ -102,8 +102,8 @@ module PDK
|
|
102
102
|
@update_manager ||= PDK::Module::UpdateManager.new
|
103
103
|
end
|
104
104
|
|
105
|
-
def
|
106
|
-
@
|
105
|
+
def template_uri
|
106
|
+
@template_uri ||= PDK::Util::TemplateURI.new(options)
|
107
107
|
end
|
108
108
|
|
109
109
|
def update_metadata(metadata_path, template_metadata)
|
data/lib/pdk/module/metadata.rb
CHANGED
@@ -153,13 +153,13 @@ module PDK
|
|
153
153
|
end
|
154
154
|
end
|
155
155
|
|
156
|
-
private
|
157
|
-
|
158
156
|
def missing_fields
|
159
157
|
fields = DEFAULTS.keys - %w[data_provider requirements dependencies]
|
160
158
|
fields.select { |key| @data[key].nil? || @data[key].empty? }
|
161
159
|
end
|
162
160
|
|
161
|
+
private
|
162
|
+
|
163
163
|
# Do basic validation and parsing of the name parameter.
|
164
164
|
def process_name(data)
|
165
165
|
validate_name(data['name'])
|
@@ -16,8 +16,8 @@ module PDK
|
|
16
16
|
# The template directory is only guaranteed to be available on disk
|
17
17
|
# within the scope of the block passed to this method.
|
18
18
|
#
|
19
|
-
# @param
|
20
|
-
# template or a
|
19
|
+
# @param uri [PDK::Util::TemplateURI] The path to a directory to use as the
|
20
|
+
# template or a URI to a git repository.
|
21
21
|
# @param module_metadata [Hash] A Hash containing the module metadata.
|
22
22
|
# Defaults to an empty Hash.
|
23
23
|
# @yieldparam self [PDK::Module::TemplateDir] The initialised object with
|
@@ -37,17 +37,31 @@ module PDK
|
|
37
37
|
# @raise [ArgumentError] (see #validate_module_template!)
|
38
38
|
#
|
39
39
|
# @api public
|
40
|
-
def initialize(
|
40
|
+
def initialize(uri, module_metadata = {}, init = false)
|
41
41
|
unless block_given?
|
42
42
|
raise ArgumentError, _('%{class_name} must be initialized with a block.') % { class_name: self.class.name }
|
43
43
|
end
|
44
|
+
unless uri.is_a? PDK::Util::TemplateURI
|
45
|
+
raise ArgumentError, _('PDK::Module::TemplateDir.new must be initialized with a PDK::Util::TemplateURI, got a %{uri_type}') % { uri_type: uri.class }
|
46
|
+
end
|
44
47
|
|
45
|
-
if PDK::Util::Git.repo?(
|
46
|
-
|
47
|
-
@
|
48
|
+
if PDK::Util::Git.repo?(uri.git_remote)
|
49
|
+
# This is either a bare local repo or a remote. either way it needs cloning.
|
50
|
+
@path = clone_template_repo(uri)
|
51
|
+
temp_dir_clone = true
|
48
52
|
else
|
49
|
-
|
53
|
+
# if it is a local path & non-bare repo then we can use it directly.
|
54
|
+
# Still have to check the branch.
|
55
|
+
@path = uri.shell_path
|
56
|
+
# We don't do a checkout of local-path repos. There are lots of edge
|
57
|
+
# cases or user un-expectations.
|
58
|
+
if PDK::Util::Git.work_tree?(@path)
|
59
|
+
PDK.logger.warn _("Repository '%{repo}' has a work-tree; skipping git reset.") % {
|
60
|
+
repo: @path,
|
61
|
+
}
|
62
|
+
end
|
50
63
|
end
|
64
|
+
@cloned_from = uri.metadata_format
|
51
65
|
|
52
66
|
@init = init
|
53
67
|
@moduleroot_dir = File.join(@path, 'moduleroot')
|
@@ -64,7 +78,7 @@ module PDK
|
|
64
78
|
ensure
|
65
79
|
# If we cloned a git repo to get the template, remove the clone once
|
66
80
|
# we're done with it.
|
67
|
-
if
|
81
|
+
if temp_dir_clone
|
68
82
|
FileUtils.remove_dir(@path)
|
69
83
|
end
|
70
84
|
end
|
@@ -78,16 +92,11 @@ module PDK
|
|
78
92
|
#
|
79
93
|
# @api public
|
80
94
|
def metadata
|
81
|
-
|
82
|
-
'pdk-version'
|
95
|
+
{
|
96
|
+
'pdk-version' => PDK::Util::Version.version_string,
|
97
|
+
'template-url' => @cloned_from,
|
98
|
+
'template-ref' => cache_template_ref(@path),
|
83
99
|
}
|
84
|
-
|
85
|
-
result['template-url'] = @repo ? @repo : @path
|
86
|
-
|
87
|
-
ref_result = PDK::Util::Git.git('--git-dir', File.join(@path, '.git'), 'describe', '--all', '--long', '--always')
|
88
|
-
result['template-ref'] = ref_result[:stdout].strip if ref_result[:exit_code].zero?
|
89
|
-
|
90
|
-
result
|
91
100
|
end
|
92
101
|
|
93
102
|
# Loop through the files in the template, yielding each rendered file to
|
@@ -118,11 +127,11 @@ module PDK
|
|
118
127
|
else
|
119
128
|
begin
|
120
129
|
dest_content = PDK::TemplateFile.new(File.join(template_loc, template_file), configs: config, template_dir: self).render
|
121
|
-
rescue =>
|
130
|
+
rescue => error
|
122
131
|
error_msg = _(
|
123
132
|
"Failed to render template '%{template}'\n" \
|
124
133
|
'%{exception}: %{message}',
|
125
|
-
) % { template: template_file, exception:
|
134
|
+
) % { template: template_file, exception: error.class, message: error.message }
|
126
135
|
raise PDK::CLI::FatalError, error_msg
|
127
136
|
end
|
128
137
|
end
|
@@ -290,24 +299,18 @@ module PDK
|
|
290
299
|
# @raise [PDK::CLI::FatalError] If reset HEAD of the cloned repo to desired ref.
|
291
300
|
#
|
292
301
|
# @api private
|
293
|
-
def
|
302
|
+
def clone_template_repo(uri)
|
294
303
|
# @todo When switching this over to using rugged, cache the cloned
|
295
304
|
# template repo in `%AppData%` or `$XDG_CACHE_DIR` and update before
|
296
305
|
# use.
|
297
306
|
temp_dir = PDK::Util.make_tmpdir_name('pdk-templates')
|
298
|
-
|
307
|
+
origin_repo = uri.git_remote
|
308
|
+
git_ref = uri.git_ref
|
299
309
|
|
300
310
|
clone_result = PDK::Util::Git.git('clone', origin_repo, temp_dir)
|
301
311
|
|
302
312
|
if clone_result[:exit_code].zero?
|
303
|
-
|
304
|
-
reset_result = PDK::Util::Git.git('reset', '--hard', git_ref)
|
305
|
-
unless reset_result[:exit_code].zero?
|
306
|
-
PDK.logger.error reset_result[:stdout]
|
307
|
-
PDK.logger.error reset_result[:stderr]
|
308
|
-
raise PDK::CLI::FatalError, _("Unable to set HEAD of git repository at '%{repo}' to ref:'%{ref}'.") % { repo: temp_dir, ref: git_ref }
|
309
|
-
end
|
310
|
-
end
|
313
|
+
checkout_template_ref(temp_dir, git_ref)
|
311
314
|
else
|
312
315
|
PDK.logger.error clone_result[:stdout]
|
313
316
|
PDK.logger.error clone_result[:stderr]
|
@@ -316,6 +319,28 @@ module PDK
|
|
316
319
|
|
317
320
|
PDK::Util.canonical_path(temp_dir)
|
318
321
|
end
|
322
|
+
|
323
|
+
# @api private
|
324
|
+
def checkout_template_ref(path, ref)
|
325
|
+
if PDK::Util::Git.work_dir_clean?(path)
|
326
|
+
Dir.chdir(path) do
|
327
|
+
full_ref = PDK::Util::Git.ls_remote(path, ref)
|
328
|
+
cache_template_ref(path, full_ref)
|
329
|
+
reset_result = PDK::Util::Git.git('reset', '--hard', full_ref)
|
330
|
+
return if reset_result[:exit_code].zero?
|
331
|
+
|
332
|
+
PDK.logger.error reset_result[:stdout]
|
333
|
+
PDK.logger.error reset_result[:stderr]
|
334
|
+
raise PDK::CLI::FatalError, _("Unable to set HEAD of git repository at '%{repo}' to ref:'%{ref}'.") % { repo: path, ref: ref }
|
335
|
+
end
|
336
|
+
else
|
337
|
+
PDK.logger.warn _("Uncommitted changes found when attempting to set HEAD of git repository at '%{repo}' to ref '%{ref}'; skipping git reset.") % { repo: path, ref: ref }
|
338
|
+
end
|
339
|
+
end
|
340
|
+
|
341
|
+
def cache_template_ref(path, ref = nil)
|
342
|
+
@template_ref ||= PDK::Util::Git.describe(File.join(path, '.git'), ref)
|
343
|
+
end
|
319
344
|
end
|
320
345
|
end
|
321
346
|
end
|