From 371f2a3c549e0bc57ac1f53d0050c340d71fb5e9 Mon Sep 17 00:00:00 2001 From: Hugo Corbucci Date: Mon, 12 Nov 2018 19:10:57 -0500 Subject: [PATCH] Fix erikhuda/thor#587 --- lib/thor/actions/file_manipulation.rb | 4 ++-- spec/actions/file_manipulation_spec.rb | 8 ++++++++ spec/fixtures/preserve/%filename%.sh | 3 +++ 3 files changed, 13 insertions(+), 2 deletions(-) create mode 100755 spec/fixtures/preserve/%filename%.sh diff --git a/lib/thor/actions/file_manipulation.rb b/lib/thor/actions/file_manipulation.rb index b45bfbd44..725548236 100644 --- a/lib/thor/actions/file_manipulation.rb +++ b/lib/thor/actions/file_manipulation.rb @@ -23,14 +23,14 @@ def copy_file(source, *args, &block) destination = args.first || source source = File.expand_path(find_in_source_paths(source.to_s)) - create_file destination, nil, config do + resulting_destination = create_file destination, nil, config do content = File.binread(source) content = yield(content) if block content end if config[:mode] == :preserve mode = File.stat(source).mode - chmod(destination, mode, config) + chmod(resulting_destination, mode, config) end end diff --git a/spec/actions/file_manipulation_spec.rb b/spec/actions/file_manipulation_spec.rb index 5ebd3c7da..1e4c177fe 100644 --- a/spec/actions/file_manipulation_spec.rb +++ b/spec/actions/file_manipulation_spec.rb @@ -76,6 +76,14 @@ def file expect(File.stat(original).mode).to eq(File.stat(copy).mode) end + it "copies file from source to default destination and preserves file mode for templated filenames" do + expect(runner).to receive(:filename).and_return("app") + action :copy_file, "preserve/%filename%.sh", :mode => :preserve + original = File.join(source_root, "preserve/%filename%.sh") + copy = File.join(destination_root, "preserve/app.sh") + expect(File.stat(original).mode).to eq(File.stat(copy).mode) + end + it "logs status" do expect(action(:copy_file, "command.thor")).to eq(" create command.thor\n") end diff --git a/spec/fixtures/preserve/%filename%.sh b/spec/fixtures/preserve/%filename%.sh new file mode 100755 index 000000000..c52d3c26b --- /dev/null +++ b/spec/fixtures/preserve/%filename%.sh @@ -0,0 +1,3 @@ +#!/bin/sh + +exit 0