rake-funnel 0.18.0 → 0.19.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.rspec +1 -0
- data/.simplecov +24 -0
- data/Gemfile +27 -19
- data/README.md +1 -1
- data/lib/rake/funnel/ambiguous_file_error.rb +1 -0
- data/lib/rake/funnel/execution_error.rb +1 -0
- data/lib/rake/funnel/extensions/common_path.rb +5 -4
- data/lib/rake/funnel/extensions/shell.rb +3 -2
- data/lib/rake/funnel/integration/progress_report.rb +3 -2
- data/lib/rake/funnel/integration/sync_output.rb +1 -0
- data/lib/rake/funnel/integration/teamcity/nunit_plugin.rb +2 -1
- data/lib/rake/funnel/integration/teamcity/progress_report.rb +1 -1
- data/lib/rake/funnel/integration/teamcity/service_messages.rb +8 -3
- data/lib/rake/funnel/integration/teamcity/teamcity.rb +5 -4
- data/lib/rake/funnel/support/argument_mapper/styles/default.rb +5 -4
- data/lib/rake/funnel/support/argument_mapper/styles/msbuild.rb +6 -5
- data/lib/rake/funnel/support/argument_mapper/styles/msdeploy.rb +13 -12
- data/lib/rake/funnel/support/argument_mapper/styles/nunit.rb +6 -5
- data/lib/rake/funnel/support/assembly_version/from_version_files.rb +2 -1
- data/lib/rake/funnel/support/assembly_version_writer.rb +1 -0
- data/lib/rake/funnel/support/binary_version_reader.rb +14 -7
- data/lib/rake/funnel/support/copier.rb +1 -0
- data/lib/rake/funnel/support/environments/loader.rb +13 -8
- data/lib/rake/funnel/support/internal/finder.rb +2 -1
- data/lib/rake/funnel/support/internal/instantiate_symbol.rb +9 -4
- data/lib/rake/funnel/support/mapper.rb +7 -6
- data/lib/rake/funnel/support/mono.rb +1 -3
- data/lib/rake/funnel/support/msbuild/build_tool.rb +35 -12
- data/lib/rake/funnel/support/msdeploy/registry_patch.rb +14 -17
- data/lib/rake/funnel/support/patch.rb +1 -0
- data/lib/rake/funnel/support/specs_remover.rb +14 -11
- data/lib/rake/funnel/support/template_engine.rb +1 -0
- data/lib/rake/funnel/support/timing/report.rb +11 -10
- data/lib/rake/funnel/support/version_info.rb +8 -9
- data/lib/rake/funnel/support/zipper.rb +1 -0
- data/lib/rake/funnel/tasks/assembly_version.rb +4 -3
- data/lib/rake/funnel/tasks/bin_path.rb +3 -2
- data/lib/rake/funnel/tasks/copy.rb +2 -1
- data/lib/rake/funnel/tasks/environments.rb +13 -9
- data/lib/rake/funnel/tasks/msbuild.rb +4 -6
- data/lib/rake/funnel/tasks/msdeploy.rb +6 -5
- data/lib/rake/funnel/tasks/nunit.rb +3 -2
- data/lib/rake/funnel/tasks/paket.rb +2 -1
- data/lib/rake/funnel/tasks/quick_template.rb +3 -2
- data/lib/rake/funnel/tasks/side_by_side_specs.rb +2 -1
- data/lib/rake/funnel/tasks/timing.rb +7 -6
- data/lib/rake/funnel/tasks/zip.rb +3 -2
- data/lib/rake/funnel/version.rb +1 -1
- data/rake-funnel.gemspec +11 -11
- data/spec/rake/funnel/execution_error_spec.rb +2 -2
- data/spec/rake/funnel/extensions/rexml_spec.rb +5 -2
- data/spec/rake/funnel/extensions/shell_spec.rb +26 -17
- data/spec/rake/funnel/integration/progress_report_spec.rb +32 -36
- data/spec/rake/funnel/integration/sync_output_spec.rb +5 -5
- data/spec/rake/funnel/integration/teamcity/nunit_plugin_spec.rb +32 -20
- data/spec/rake/funnel/integration/teamcity/progress_report_spec.rb +31 -25
- data/spec/rake/funnel/integration/teamcity/service_messages_spec.rb +56 -20
- data/spec/rake/funnel/integration/teamcity/teamcity_spec.rb +7 -5
- data/spec/rake/funnel/support/argument_mapper/styles/msdeploy_spec.rb +2 -0
- data/spec/rake/funnel/support/argument_mapper/styles/nunit_spec.rb +6 -4
- data/spec/rake/funnel/support/argument_mapper/styles/styles_spec.rb +76 -67
- data/spec/rake/funnel/support/assembly_version/from_version_files_spec.rb +17 -19
- data/spec/rake/funnel/support/assembly_version_writer_spec.rb +49 -52
- data/spec/rake/funnel/support/binary_version_reader_spec.rb +2 -2
- data/spec/rake/funnel/support/copier_spec.rb +5 -5
- data/spec/rake/funnel/support/environments/loader_spec.rb +32 -32
- data/spec/rake/funnel/support/internal/finder_spec.rb +8 -6
- data/spec/rake/funnel/support/internal/instantiate_symbol_spec.rb +27 -27
- data/spec/rake/funnel/support/mapper_spec.rb +4 -3
- data/spec/rake/funnel/support/mono_spec.rb +7 -7
- data/spec/rake/funnel/support/msbuild/build_tool_spec.rb +13 -10
- data/spec/rake/funnel/support/msdeploy/registry_patch_spec.rb +47 -41
- data/spec/rake/funnel/support/patch_spec.rb +11 -11
- data/spec/rake/funnel/support/specs_remover/project/paket.references +3 -3
- data/spec/rake/funnel/support/specs_remover/project/uncompiled-code/paket.references +3 -3
- data/spec/rake/funnel/support/specs_remover/project-specific paket.references/Sample.csproj.paket.references +3 -3
- data/spec/rake/funnel/support/specs_remover/project-specific paket.references/paket.references +3 -3
- data/spec/rake/funnel/support/specs_remover_spec.rb +31 -33
- data/spec/rake/funnel/support/template_engine_spec.rb +6 -3
- data/spec/rake/funnel/support/timing/report_spec.rb +19 -20
- data/spec/rake/funnel/support/trace_spec.rb +6 -6
- data/spec/rake/funnel/support/version_info_spec.rb +8 -6
- data/spec/rake/funnel/support/which_spec.rb +7 -7
- data/spec/rake/funnel/support/zipper_spec.rb +8 -8
- data/spec/rake/funnel/tasks/assembly_version_spec.rb +9 -9
- data/spec/rake/funnel/tasks/bin_path_spec.rb +23 -21
- data/spec/rake/funnel/tasks/copy_spec.rb +10 -10
- data/spec/rake/funnel/tasks/environments_spec.rb +48 -46
- data/spec/rake/funnel/tasks/msbuild_spec.rb +21 -17
- data/spec/rake/funnel/tasks/msdeploy_spec.rb +31 -31
- data/spec/rake/funnel/tasks/nunit_spec.rb +12 -10
- data/spec/rake/funnel/tasks/paket_spec.rb +25 -21
- data/spec/rake/funnel/tasks/quick_template_spec.rb +7 -7
- data/spec/rake/funnel/tasks/side_by_side_specs_spec.rb +12 -12
- data/spec/rake/funnel/tasks/timing_spec.rb +12 -12
- data/spec/rake/funnel/tasks/zip_spec.rb +16 -16
- data/spec/spec_helper.rb +5 -31
- metadata +7 -6
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: d994a7aee19d9d6394f52bd560fceb3e7c1d0dba
|
4
|
+
data.tar.gz: 845d2b7a7862dcb29bfbdc3c06bc7a4620ccb585
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: f473e9b4620d0c95e97a729ae1eb65fd148e5088203218a377ece7900f5283d38f57b57fa04411a669e05b7d185096e045fb63af063f1084eeaf777f8fd3d8b6
|
7
|
+
data.tar.gz: 8dad0dae6e75d942e9e04045ff3d1cdf0d6e953bba0001d3dd87f548f721f29711f0698481eb56addcbca58ab23b57c5acc91da0428952a7b9c0c4d7c464d491
|
data/.rspec
CHANGED
data/.simplecov
ADDED
@@ -0,0 +1,24 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
|
3
|
+
require 'pathname'
|
4
|
+
require 'coveralls'
|
5
|
+
require 'simplecov-teamcity-summary'
|
6
|
+
|
7
|
+
SimpleCov.start do
|
8
|
+
track_files('lib/**/*.rb')
|
9
|
+
|
10
|
+
add_filter do |file|
|
11
|
+
relative_path = Pathname.new(file.filename)
|
12
|
+
.relative_path_from(Pathname.new(SimpleCov.root))
|
13
|
+
relative_path.to_s =~ %r{^spec/}
|
14
|
+
end
|
15
|
+
|
16
|
+
coverage_dir('build/coverage')
|
17
|
+
|
18
|
+
format = [::SimpleCov::Formatter::HTMLFormatter]
|
19
|
+
|
20
|
+
format << Coveralls::SimpleCov::Formatter if Coveralls.will_run?
|
21
|
+
format << SimpleCov::Formatter::TeamcitySummaryFormatter if ENV['TEAMCITY_PROJECT_NAME']
|
22
|
+
|
23
|
+
formatter(::SimpleCov::Formatter::MultiFormatter.new(format))
|
24
|
+
end
|
data/Gemfile
CHANGED
@@ -1,33 +1,41 @@
|
|
1
|
-
require 'rbconfig'
|
2
|
-
|
3
1
|
source 'https://rubygems.org'
|
4
2
|
|
5
3
|
gemspec
|
6
4
|
|
7
|
-
group :
|
5
|
+
group :coverage do
|
6
|
+
gem 'codeclimate-test-reporter'
|
7
|
+
gem 'coveralls'
|
8
|
+
gem 'simplecov-teamcity-summary'
|
9
|
+
end
|
10
|
+
|
11
|
+
group :style do
|
12
|
+
gem 'rubocop', '~> 0.46'
|
13
|
+
gem 'rubocop-rspec'
|
14
|
+
end
|
15
|
+
|
16
|
+
group :test do
|
17
|
+
gem 'rspec', '~> 3.0'
|
18
|
+
gem 'rspec-collection_matchers'
|
19
|
+
gem 'rspec-its'
|
20
|
+
end
|
21
|
+
|
22
|
+
group :development, :guard do
|
8
23
|
gem 'guard-bundler'
|
9
24
|
gem 'guard-rspec'
|
10
25
|
gem 'guard-rubocop'
|
11
26
|
|
12
|
-
|
13
|
-
|
27
|
+
# guard notifications.
|
28
|
+
install_if(-> { Gem.win_platform? }) do
|
14
29
|
gem 'ruby_gntp'
|
15
30
|
gem 'wdm'
|
16
|
-
|
31
|
+
end
|
32
|
+
|
33
|
+
install_if(-> { RbConfig::CONFIG['target_os'] =~ /linux/i }) do
|
17
34
|
gem 'rb-inotify'
|
18
|
-
when /mac|darwin/i
|
19
|
-
gem 'rb-fsevent'
|
20
|
-
gem 'growl'
|
21
35
|
end
|
22
|
-
end
|
23
36
|
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
gem 'coveralls'
|
29
|
-
gem 'codeclimate-test-reporter'
|
30
|
-
gem 'rubocop', '~> 0.37.2'
|
31
|
-
gem 'rubocop-rspec'
|
32
|
-
gem 'simplecov-teamcity-summary'
|
37
|
+
install_if(-> { RbConfig::CONFIG['target_os'] =~ /mac|darwin/i }) do
|
38
|
+
gem 'rb-fsevent'
|
39
|
+
gem 'terminal-notifier-guard'
|
40
|
+
end
|
33
41
|
end
|
data/README.md
CHANGED
@@ -4,7 +4,7 @@
|
|
4
4
|
|
5
5
|
rake-funnel is my set of rake tasks, mostly targeted at .NET development.
|
6
6
|
|
7
|
-
* Tested against Ruby 2.0.0, 2.1.0
|
7
|
+
* Tested against Ruby 2.0.0, 2.1.0, 2.2.0, 2.3.0, 2.4.0 and ruby-head
|
8
8
|
* Ruby < 2.0 is not supported
|
9
9
|
|
10
10
|
## Installation
|
@@ -7,8 +7,8 @@ module Rake
|
|
7
7
|
module CommonPath
|
8
8
|
def common_path
|
9
9
|
list = to_a
|
10
|
-
|
11
|
-
|
10
|
+
.compact
|
11
|
+
.map { |x| components(x) }
|
12
12
|
|
13
13
|
min = list.min_by(&:length)
|
14
14
|
|
@@ -17,17 +17,18 @@ module Rake
|
|
17
17
|
end
|
18
18
|
|
19
19
|
private
|
20
|
+
|
20
21
|
def components(path)
|
21
22
|
paths = []
|
22
23
|
Pathname.new(path).descend do |p|
|
23
24
|
paths << p
|
24
25
|
end
|
25
26
|
|
26
|
-
paths = paths.inject([])
|
27
|
+
paths = paths.inject([]) do |components, p|
|
27
28
|
relative = p.relative_path_from(components.last[:absolute]) if components.any?
|
28
29
|
|
29
30
|
components << { absolute: p, relative: relative || p }
|
30
|
-
|
31
|
+
end
|
31
32
|
|
32
33
|
paths.map { |component| component[:relative].to_s }
|
33
34
|
end
|
@@ -12,13 +12,14 @@ module Rake
|
|
12
12
|
|
13
13
|
run(cmd, log_file, error_lines) do |success, readable_cmd, result, log|
|
14
14
|
if block
|
15
|
-
|
15
|
+
yield(success, readable_cmd, result, log)
|
16
16
|
return
|
17
17
|
end
|
18
18
|
end
|
19
19
|
end
|
20
20
|
|
21
21
|
private
|
22
|
+
|
22
23
|
def run(cmd, log_file, error_lines)
|
23
24
|
cmd, readable_cmd = normalize(cmd)
|
24
25
|
|
@@ -32,7 +33,7 @@ module Rake
|
|
32
33
|
|
33
34
|
yield(success, *result) if block_given?
|
34
35
|
|
35
|
-
|
36
|
+
raise Rake::Funnel::ExecutionError.new(*result) unless success
|
36
37
|
end
|
37
38
|
end
|
38
39
|
|
@@ -29,11 +29,12 @@ module Rake
|
|
29
29
|
end
|
30
30
|
|
31
31
|
private
|
32
|
+
|
32
33
|
def patch
|
33
34
|
@patch ||= create_patch
|
34
35
|
end
|
35
36
|
|
36
|
-
def create_patch
|
37
|
+
def create_patch # rubocop:disable Metrics/MethodLength, Metrics/AbcSize
|
37
38
|
Rake::Funnel::Support::Patch.new(self) do |p|
|
38
39
|
p.setup do |context|
|
39
40
|
Rake::Task.class_eval do
|
@@ -49,7 +50,7 @@ module Rake
|
|
49
50
|
error = e
|
50
51
|
ensure
|
51
52
|
context.finished.call(self, args, error) if context.finished
|
52
|
-
|
53
|
+
raise error if error
|
53
54
|
end
|
54
55
|
end
|
55
56
|
|
@@ -3,7 +3,7 @@ module Rake
|
|
3
3
|
module Integration
|
4
4
|
module TeamCity
|
5
5
|
class NUnitPlugin
|
6
|
-
ENV_VAR = 'teamcity.dotnet.nunitaddin'
|
6
|
+
ENV_VAR = 'teamcity.dotnet.nunitaddin'.freeze
|
7
7
|
|
8
8
|
class << self
|
9
9
|
def setup(nunit_executable)
|
@@ -16,6 +16,7 @@ module Rake
|
|
16
16
|
end
|
17
17
|
|
18
18
|
private
|
19
|
+
|
19
20
|
def get_addin_dir(source)
|
20
21
|
return nil unless source
|
21
22
|
|
@@ -7,7 +7,7 @@ module Rake
|
|
7
7
|
class ProgressReport < Rake::Funnel::Integration::ProgressReport
|
8
8
|
include Rake::Funnel::Integration
|
9
9
|
|
10
|
-
def initialize
|
10
|
+
def initialize # rubocop:disable Metrics/MethodLength, Metrics/AbcSize, Metrics/CyclomaticComplexity
|
11
11
|
super do
|
12
12
|
task_starting do |task, _args|
|
13
13
|
next unless TeamCity.running?
|
@@ -4,14 +4,19 @@ module Rake
|
|
4
4
|
module TeamCity
|
5
5
|
class ServiceMessages
|
6
6
|
class << self
|
7
|
-
def
|
7
|
+
def respond_to_missing?(_method, _include_private = false)
|
8
|
+
true
|
9
|
+
end
|
10
|
+
|
11
|
+
def method_missing(method, *args, &_block) # rubocop:disable Style/MethodMissing
|
8
12
|
return unless Rake::Funnel::Integration::TeamCity.running?
|
9
13
|
|
10
14
|
message_name = method.camelize
|
11
|
-
publish
|
15
|
+
publish(message_name, args[0])
|
12
16
|
end
|
13
17
|
|
14
18
|
private
|
19
|
+
|
15
20
|
def publish(message_name, args)
|
16
21
|
args = [message_name] << escaped_array_of(args)
|
17
22
|
args = args.flatten.reject(&:nil?)
|
@@ -19,7 +24,7 @@ module Rake
|
|
19
24
|
puts "##teamcity[#{args.join(' ')}]"
|
20
25
|
end
|
21
26
|
|
22
|
-
def escape(string)
|
27
|
+
def escape(string) # rubocop:disable Metrics/MethodLength
|
23
28
|
string
|
24
29
|
.to_s
|
25
30
|
.gsub(/\|/, '||')
|
@@ -2,8 +2,8 @@ module Rake
|
|
2
2
|
module Funnel
|
3
3
|
module Integration
|
4
4
|
module TeamCity
|
5
|
-
PROJECT_ENV_VAR = 'TEAMCITY_PROJECT_NAME'
|
6
|
-
JRE_ENV_VAR = 'TEAMCITY_JRE'
|
5
|
+
PROJECT_ENV_VAR = 'TEAMCITY_PROJECT_NAME'.freeze
|
6
|
+
JRE_ENV_VAR = 'TEAMCITY_JRE'.freeze
|
7
7
|
|
8
8
|
class << self
|
9
9
|
def running?
|
@@ -14,7 +14,7 @@ module Rake
|
|
14
14
|
running? && Object.const_defined?('Rake') && Rake.const_defined?('TeamCityApplication')
|
15
15
|
end
|
16
16
|
|
17
|
-
def with_java_runtime
|
17
|
+
def with_java_runtime
|
18
18
|
return unless block_given?
|
19
19
|
|
20
20
|
begin
|
@@ -22,13 +22,14 @@ module Rake
|
|
22
22
|
|
23
23
|
ENV['PATH'] = ([] << ENV['PATH'] << teamcity_jre).compact.join(File::PATH_SEPARATOR)
|
24
24
|
|
25
|
-
|
25
|
+
yield
|
26
26
|
ensure
|
27
27
|
ENV['PATH'] = original_path
|
28
28
|
end
|
29
29
|
end
|
30
30
|
|
31
31
|
private
|
32
|
+
|
32
33
|
def teamcity_jre
|
33
34
|
return nil unless ENV.include?(JRE_ENV_VAR)
|
34
35
|
File.join(ENV[JRE_ENV_VAR], 'bin')
|
@@ -12,14 +12,15 @@ module Rake
|
|
12
12
|
end
|
13
13
|
|
14
14
|
def generate_from(model)
|
15
|
-
model.map
|
16
|
-
switch.values.flatten.map
|
15
|
+
model.map do |switch|
|
16
|
+
switch.values.flatten.map do |value|
|
17
17
|
[top_level(switch), nested(value)].reject(&:empty?)
|
18
|
-
|
19
|
-
|
18
|
+
end
|
19
|
+
end.flatten(2)
|
20
20
|
end
|
21
21
|
|
22
22
|
private
|
23
|
+
|
23
24
|
def top_level(switch)
|
24
25
|
[prefix, switch.switch]
|
25
26
|
end
|
@@ -13,19 +13,20 @@ module Rake
|
|
13
13
|
end
|
14
14
|
|
15
15
|
def generate_from(model)
|
16
|
-
model.
|
17
|
-
switch.values.flatten.map
|
16
|
+
model.flat_map do |switch|
|
17
|
+
switch.values.flatten.map do |value|
|
18
18
|
top_level(switch) + nested(value)
|
19
|
-
|
20
|
-
|
19
|
+
end
|
20
|
+
end
|
21
21
|
end
|
22
22
|
|
23
23
|
private
|
24
|
+
|
24
25
|
def top_level(switch)
|
25
26
|
[prefix, switch.switch]
|
26
27
|
end
|
27
28
|
|
28
|
-
def nested(value)
|
29
|
+
def nested(value) # rubocop:disable Metrics/AbcSize
|
29
30
|
res = []
|
30
31
|
res << separator unless value.key.nil? && value.value.nil?
|
31
32
|
res << value.key
|
@@ -14,27 +14,28 @@ module Rake
|
|
14
14
|
end
|
15
15
|
|
16
16
|
def generate_from(model)
|
17
|
-
model.
|
18
|
-
switch.values.map
|
19
|
-
if item.is_a?(Enumerable)
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
17
|
+
model.flat_map do |switch|
|
18
|
+
switch.values.map do |item|
|
19
|
+
values = if item.is_a?(Enumerable)
|
20
|
+
item.map.with_index { |nested, index| nested(nested, index) }
|
21
|
+
else
|
22
|
+
nested(item)
|
23
|
+
end
|
24
24
|
|
25
25
|
(top_level(switch) + values).flatten
|
26
|
-
|
27
|
-
|
26
|
+
end
|
27
|
+
end
|
28
28
|
end
|
29
29
|
|
30
30
|
private
|
31
|
+
|
31
32
|
def top_level(switch)
|
32
33
|
[prefix, quote(switch.switch)]
|
33
34
|
end
|
34
35
|
|
35
|
-
def nested(value, index = 0)
|
36
|
+
def nested(value, index = 0) # rubocop:disable Metrics/AbcSize, Metrics/CyclomaticComplexity
|
36
37
|
res = []
|
37
|
-
res << value_list_separator unless index
|
38
|
+
res << value_list_separator unless index.zero?
|
38
39
|
res << separator unless value.key.nil? && value.value.nil? || index != 0
|
39
40
|
res << quote(value.key)
|
40
41
|
res << value_separator unless value.key.nil? || value.value.nil?
|
@@ -44,7 +45,7 @@ module Rake
|
|
44
45
|
|
45
46
|
def quote(value)
|
46
47
|
value = value.gsub(/"/, '""') if value.is_a?(String)
|
47
|
-
return %
|
48
|
+
return %("#{value}") if value =~ /\s/
|
48
49
|
value
|
49
50
|
end
|
50
51
|
end
|
@@ -13,19 +13,20 @@ module Rake
|
|
13
13
|
end
|
14
14
|
|
15
15
|
def generate_from(model)
|
16
|
-
model.
|
17
|
-
switch.values.flatten.map
|
16
|
+
model.flat_map do |switch|
|
17
|
+
switch.values.flatten.map do |value|
|
18
18
|
top_level(switch) + nested(value)
|
19
|
-
|
20
|
-
|
19
|
+
end
|
20
|
+
end
|
21
21
|
end
|
22
22
|
|
23
23
|
private
|
24
|
+
|
24
25
|
def top_level(switch)
|
25
26
|
[prefix, switch.switch]
|
26
27
|
end
|
27
28
|
|
28
|
-
def nested(value)
|
29
|
+
def nested(value) # rubocop:disable Metrics/AbcSize
|
29
30
|
res = []
|
30
31
|
res << separator unless value.key.nil? && value.value.nil?
|
31
32
|
res << value.key
|
@@ -14,7 +14,7 @@ module Rake
|
|
14
14
|
end
|
15
15
|
|
16
16
|
def each
|
17
|
-
block_given?
|
17
|
+
block_given? || (return enum_for(__method__))
|
18
18
|
|
19
19
|
files.each do |file|
|
20
20
|
Rake.rake_output_message("Reading #{file}")
|
@@ -29,6 +29,7 @@ module Rake
|
|
29
29
|
end
|
30
30
|
|
31
31
|
private
|
32
|
+
|
32
33
|
def files
|
33
34
|
Finder.new(search_pattern, self, 'No version files found.').all_or_default
|
34
35
|
end
|
@@ -3,32 +3,39 @@ module Rake
|
|
3
3
|
module Support
|
4
4
|
class BinaryVersionReader
|
5
5
|
class << self
|
6
|
-
KNOWN_ATTRIBUTES =
|
7
|
-
|
6
|
+
KNOWN_ATTRIBUTES = %i(company_name
|
7
|
+
file_description
|
8
|
+
file_version
|
9
|
+
legal_copyright
|
10
|
+
product_name
|
11
|
+
product_version
|
12
|
+
assembly_version).freeze
|
13
|
+
SEPARATOR = "\0".freeze
|
8
14
|
TERMINATOR = "\0" * 3
|
9
15
|
|
10
16
|
def read_from(assembly)
|
11
17
|
binary = File.binread(assembly)
|
12
18
|
|
13
|
-
attributes = KNOWN_ATTRIBUTES.map
|
19
|
+
attributes = KNOWN_ATTRIBUTES.map do |attr|
|
14
20
|
read_attribute(binary, attr)
|
15
|
-
|
21
|
+
end
|
16
22
|
|
17
|
-
hash = attributes.inject({})
|
23
|
+
hash = attributes.inject({}) do |memo, attr|
|
18
24
|
memo.merge(attr)
|
19
|
-
|
25
|
+
end
|
20
26
|
|
21
27
|
VersionInfo.new(hash)
|
22
28
|
end
|
23
29
|
|
24
30
|
private
|
31
|
+
|
25
32
|
def read_attribute(binary, attr)
|
26
33
|
binary_attr = attr.pascalize.gsub(/(.)/) { |match| match + SEPARATOR }
|
27
34
|
|
28
35
|
data = binary.match(/#{binary_attr}#{SEPARATOR}+(.*?)#{TERMINATOR}/)
|
29
36
|
return {} if data.nil?
|
30
37
|
|
31
|
-
{
|
38
|
+
{ attr.to_s => data[1].gsub(/#{SEPARATOR}/, '') }
|
32
39
|
end
|
33
40
|
end
|
34
41
|
end
|
@@ -13,7 +13,19 @@ module Rake
|
|
13
13
|
store.reset!
|
14
14
|
|
15
15
|
store.env = config[:name]
|
16
|
+
load(config, store)
|
16
17
|
|
18
|
+
customizer.call(store) if customizer && customizer.respond_to?(:call)
|
19
|
+
|
20
|
+
store.lock!
|
21
|
+
|
22
|
+
Rake.rake_output_message('')
|
23
|
+
Rake.rake_output_message(store.inspect)
|
24
|
+
end
|
25
|
+
|
26
|
+
private
|
27
|
+
|
28
|
+
def load(config, store)
|
17
29
|
operation = 'Loading'
|
18
30
|
config.fetch(:config_files, []).each do |file|
|
19
31
|
Rake.rake_output_message("#{operation} #{file}")
|
@@ -21,16 +33,9 @@ module Rake
|
|
21
33
|
|
22
34
|
yaml = File.read(file)
|
23
35
|
yaml = evaluate_erb(yaml, file)
|
24
|
-
yaml = YAML.load(yaml) || {}
|
36
|
+
yaml = YAML.load(yaml) || {} # rubocop:disable Security/YAMLLoad
|
25
37
|
store.configure_from_hash(yaml)
|
26
38
|
end
|
27
|
-
|
28
|
-
customizer.call(store) if customizer && customizer.respond_to?(:call)
|
29
|
-
|
30
|
-
store.lock!
|
31
|
-
|
32
|
-
Rake.rake_output_message('')
|
33
|
-
Rake.rake_output_message(store.inspect)
|
34
39
|
end
|
35
40
|
|
36
41
|
def evaluate_erb(yaml, filename)
|
@@ -11,7 +11,7 @@ module Rake
|
|
11
11
|
end
|
12
12
|
|
13
13
|
def each
|
14
|
-
block_given?
|
14
|
+
block_given? || (return enum_for(__method__))
|
15
15
|
all_or_default.each { |x| yield x }
|
16
16
|
end
|
17
17
|
|
@@ -40,6 +40,7 @@ module Rake
|
|
40
40
|
end
|
41
41
|
|
42
42
|
private
|
43
|
+
|
43
44
|
def first_sln
|
44
45
|
return candidates.first if candidates.one?
|
45
46
|
|
@@ -11,20 +11,25 @@ module Rake
|
|
11
11
|
attr_reader :module
|
12
12
|
|
13
13
|
private
|
14
|
+
|
14
15
|
def instantiate(mod)
|
15
16
|
@module = mod
|
16
17
|
end
|
17
18
|
end
|
18
19
|
|
19
20
|
private
|
20
|
-
|
21
|
+
|
22
|
+
def create(sym, *args) # rubocop:disable Metrics/AbcSize
|
21
23
|
return sym unless sym.is_a?(Symbol)
|
22
24
|
|
23
25
|
found = [sym, sym.pascalize.to_sym]
|
24
|
-
|
25
|
-
|
26
|
+
.select { |candidate| mod.constants.include?(candidate) }
|
27
|
+
.first
|
26
28
|
|
27
|
-
|
29
|
+
if found.nil?
|
30
|
+
raise NameError,
|
31
|
+
"Unknown type to instantiate: #{sym.inspect}. Available types are: #{available.inspect}"
|
32
|
+
end
|
28
33
|
|
29
34
|
type = mod.const_get(found)
|
30
35
|
type.new(*args)
|
@@ -16,8 +16,8 @@ module Rake
|
|
16
16
|
@style = create(style)
|
17
17
|
end
|
18
18
|
|
19
|
-
def map(args = {})
|
20
|
-
model = (args || {}).map
|
19
|
+
def map(args = {}) # rubocop:disable Metrics/MethodLength
|
20
|
+
model = (args || {}).map do |switch, value|
|
21
21
|
value = [value] unless value.is_a?(Array)
|
22
22
|
|
23
23
|
values = value.map do |val|
|
@@ -25,20 +25,21 @@ module Rake
|
|
25
25
|
end
|
26
26
|
|
27
27
|
Switch.new(switch, values)
|
28
|
-
|
28
|
+
end.flatten
|
29
29
|
|
30
30
|
@style
|
31
31
|
.generate_from(model)
|
32
|
-
.map { |
|
32
|
+
.map { |arguments| arguments.map { |arg| camel_case_symbols(arg) } }
|
33
33
|
.map(&:join)
|
34
34
|
end
|
35
35
|
|
36
36
|
private
|
37
|
+
|
37
38
|
def get_values(value)
|
38
39
|
if value.is_a?(Enumerable)
|
39
|
-
pairs = value.map
|
40
|
+
pairs = value.map do |k, v|
|
40
41
|
KeyValuePair.new(k, v)
|
41
|
-
|
42
|
+
end
|
42
43
|
|
43
44
|
return Array.new(pairs) if value.is_a?(Array)
|
44
45
|
pairs
|
@@ -6,9 +6,7 @@ module Rake
|
|
6
6
|
def invocation(executable, *args)
|
7
7
|
exe_args = ([executable] << args).flatten.compact
|
8
8
|
|
9
|
-
if Rake::Win32.windows?
|
10
|
-
return exe_args
|
11
|
-
end
|
9
|
+
return exe_args if Rake::Win32.windows?
|
12
10
|
|
13
11
|
executable = exe_args.shift
|
14
12
|
found = Which.which(executable) || executable
|