lib/pdk/generators/module.rb in pdk-0.5.0 vs lib/pdk/generators/module.rb in pdk-0.6.0

- old
+ new

@@ -22,10 +22,22 @@ if File.exist?(target_dir) raise PDK::CLI::FatalError, _("The destination directory '%{dir}' already exists") % { dir: target_dir } end + parent_dir = File.dirname(target_dir) + + begin + test_file = File.join(parent_dir, '.pdk-test-writable') + File.open(test_file, 'w') { |f| f.write('This file was created by the Puppet Development Kit to test if this folder was writable, you can safely remove this file.') } + FileUtils.rm_f(test_file) + rescue Errno::EACCES + raise PDK::CLI::FatalError, _("You do not have permission to write to '%{parent_dir}'") % { + parent_dir: parent_dir, + } + end + metadata = prepare_metadata(opts) temp_target_dir = PDK::Util.make_tmpdir_name('pdk-module-target') prepare_module_directory(temp_target_dir) @@ -48,11 +60,19 @@ end end PDK.answers.update!('template-url' => template_url) - FileUtils.mv(temp_target_dir, target_dir) + begin + FileUtils.mv(temp_target_dir, target_dir) + rescue Errno::EACCES => e + raise PDK::CLI::FatalError, _("Failed to move '%{source}' to '%{target}': %{message}") % { + source: temp_target_dir, + target: target_dir, + message: e.message, + } + end end def self.username_from_login login = Etc.getlogin || '' login_clean = login.gsub(%r{[^0-9a-z]}i, '') @@ -95,12 +115,15 @@ File.join(target_dir, 'manifests'), File.join(target_dir, 'templates'), ].each do |dir| begin FileUtils.mkdir_p(dir) - rescue SystemCallError - raise PDK::CLI::FatalError, _("Unable to create directory '%{dir}'") % { dir: dir } + rescue SystemCallError => e + raise PDK::CLI::FatalError, _("Unable to create directory '%{dir}': %{message}") % { + dir: dir, + message: e.message, + } end end end def self.module_interview(metadata, opts = {}) @@ -163,10 +186,10 @@ help: _('A web site with a public bug tracker for your module.'), default: metadata.data['issues_url'], }, ] - prompt = TTY::Prompt.new + prompt = TTY::Prompt.new(help_color: :cyan) interview = PDK::CLI::Util::Interview.new(prompt) questions.reject! { |q| q[:name] == 'license' } if opts.key?(:license)