rake-funnel 0.18.0 → 0.19.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/.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
|