ceedling 0.0.3 → 0.0.4

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.
Files changed (72) hide show
  1. data/Rakefile +55 -6
  2. data/examples/temp_sensor/project.yml +2 -2
  3. data/lib/ceedling/version.rb +3 -3
  4. data/lib/ceedling/version.rb.erb +1 -1
  5. data/new_project_template/project.yml +1 -1
  6. data/new_project_template/vendor/ceedling/{vendor/c_exception/docs → docs}/CExceptionSummary.pdf +0 -0
  7. data/new_project_template/vendor/ceedling/vendor/cmock/docs/CMock Summary.pdf b/data/new_project_template/vendor/ceedling/docs/CMock → Summary.pdf +0 -0
  8. data/new_project_template/vendor/ceedling/vendor/c_exception/vendor/unity/docs/Unity Summary.pdf b/data/new_project_template/vendor/ceedling/docs/Unity → Summary.pdf +0 -0
  9. data/new_project_template/vendor/ceedling/lib/configurator.rb +65 -16
  10. data/new_project_template/vendor/ceedling/lib/configurator_builder.rb +1 -8
  11. data/new_project_template/vendor/ceedling/lib/configurator_plugins.rb +8 -1
  12. data/new_project_template/vendor/ceedling/lib/configurator_setup.rb +30 -34
  13. data/new_project_template/vendor/ceedling/lib/configurator_validator.rb +32 -5
  14. data/new_project_template/vendor/ceedling/lib/constants.rb +17 -4
  15. data/new_project_template/vendor/ceedling/lib/defaults.rb +120 -106
  16. data/new_project_template/vendor/ceedling/lib/file_path_utils.rb +1 -1
  17. data/new_project_template/vendor/ceedling/lib/generator.rb +14 -6
  18. data/new_project_template/vendor/ceedling/lib/objects.yml +5 -0
  19. data/new_project_template/vendor/ceedling/lib/plugin.rb +2 -1
  20. data/new_project_template/vendor/ceedling/lib/plugin_manager.rb +6 -1
  21. data/new_project_template/vendor/ceedling/lib/preprocessinator_file_handler.rb +2 -2
  22. data/new_project_template/vendor/ceedling/lib/preprocessinator_includes_handler.rb +2 -2
  23. data/new_project_template/vendor/ceedling/lib/rules_cmock.rake +1 -1
  24. data/new_project_template/vendor/ceedling/lib/rules_preprocess.rake +2 -2
  25. data/new_project_template/vendor/ceedling/lib/rules_release.rake +4 -4
  26. data/new_project_template/vendor/ceedling/lib/rules_release_aux_dependencies.rake +1 -1
  27. data/new_project_template/vendor/ceedling/lib/rules_tests.rake +5 -5
  28. data/new_project_template/vendor/ceedling/lib/rules_tests_aux_dependencies.rake +1 -1
  29. data/new_project_template/vendor/ceedling/lib/setupinator.rb +10 -3
  30. data/new_project_template/vendor/ceedling/lib/system_utils.rb +32 -0
  31. data/new_project_template/vendor/ceedling/lib/system_wrapper.rb +13 -5
  32. data/new_project_template/vendor/ceedling/lib/tasks_base.rake +2 -2
  33. data/new_project_template/vendor/ceedling/lib/tasks_release.rake +1 -1
  34. data/new_project_template/vendor/ceedling/lib/tasks_tests.rake +1 -1
  35. data/new_project_template/vendor/ceedling/lib/tool_executor.rb +38 -10
  36. data/new_project_template/vendor/ceedling/lib/tool_executor_helper.rb +68 -10
  37. data/new_project_template/vendor/ceedling/plugins/bullseye/bullseye.rake +142 -0
  38. data/new_project_template/vendor/ceedling/plugins/bullseye/bullseye.rb +145 -0
  39. data/new_project_template/vendor/ceedling/plugins/bullseye/defaults.yml +49 -0
  40. data/new_project_template/vendor/ceedling/plugins/bullseye/template.erb +15 -0
  41. data/new_project_template/vendor/ceedling/plugins/gcov/defaults.yml +34 -0
  42. data/new_project_template/vendor/ceedling/plugins/gcov/gcov.rake +136 -0
  43. data/new_project_template/vendor/ceedling/plugins/gcov/gcov.rb +115 -0
  44. data/new_project_template/vendor/ceedling/plugins/gcov/template.erb +15 -0
  45. data/new_project_template/vendor/ceedling/plugins/stdout_ide_tests_report/stdout_ide_tests_report.rb +1 -1
  46. data/new_project_template/vendor/ceedling/plugins/stdout_pretty_tests_report/stdout_pretty_tests_report.rb +3 -63
  47. data/new_project_template/vendor/ceedling/plugins/stdout_pretty_tests_report/template.erb +59 -0
  48. data/new_project_template/vendor/ceedling/plugins/warnings_report/warnings_report.rb +71 -0
  49. data/new_project_template/vendor/ceedling/release/build.info +1 -1
  50. data/new_project_template/vendor/ceedling/vendor/c_exception/release/version.info +1 -1
  51. data/new_project_template/vendor/ceedling/vendor/unity/src/unity.c +30 -21
  52. metadata +18 -27
  53. data/new_project_template/vendor/ceedling/docs/Ceedling Packet.odt +0 -0
  54. data/new_project_template/vendor/ceedling/docs/CeedlingLogo.png +0 -0
  55. data/new_project_template/vendor/ceedling/rakefile.rb +0 -59
  56. data/new_project_template/vendor/ceedling/rakefile_helper.rb +0 -23
  57. data/new_project_template/vendor/ceedling/vendor/c_exception/docs/CExceptionSummary.odt +0 -0
  58. data/new_project_template/vendor/ceedling/vendor/c_exception/docs/license.txt +0 -30
  59. data/new_project_template/vendor/ceedling/vendor/c_exception/docs/readme.txt +0 -236
  60. data/new_project_template/vendor/ceedling/vendor/c_exception/vendor/unity/docs/Unity Summary.txt +0 -217
  61. data/new_project_template/vendor/ceedling/vendor/cmock/docs/CMock Summary.odt +0 -0
  62. data/new_project_template/vendor/ceedling/vendor/cmock/docs/license.txt +0 -31
  63. data/new_project_template/vendor/ceedling/vendor/deep_merge/MIT-LICENSE +0 -20
  64. data/new_project_template/vendor/ceedling/vendor/deep_merge/README +0 -94
  65. data/new_project_template/vendor/ceedling/vendor/deep_merge/Rakefile +0 -28
  66. data/new_project_template/vendor/ceedling/vendor/deep_merge/test/test_deep_merge.rb +0 -553
  67. data/new_project_template/vendor/ceedling/vendor/diy/History.txt +0 -28
  68. data/new_project_template/vendor/ceedling/vendor/diy/README.rdoc +0 -233
  69. data/new_project_template/vendor/ceedling/vendor/unity/docs/Unity Summary.odt +0 -0
  70. data/new_project_template/vendor/ceedling/vendor/unity/docs/Unity Summary.pdf +0 -0
  71. data/new_project_template/vendor/ceedling/vendor/unity/docs/Unity Summary.txt +0 -217
  72. data/new_project_template/vendor/ceedling/vendor/unity/docs/license.txt +0 -31
@@ -8,8 +8,8 @@ class PreprocessinatorFileHandler
8
8
  def preprocess_file(filepath, includes)
9
9
  preprocessed_filepath = @file_path_utils.form_preprocessed_file_filepath(filepath)
10
10
 
11
- command_line = @tool_executor.build_command_line(@configurator.tools_test_file_preprocessor, filepath, preprocessed_filepath)
12
- @tool_executor.exec(command_line)
11
+ command = @tool_executor.build_command_line(@configurator.tools_test_file_preprocessor, filepath, preprocessed_filepath)
12
+ @tool_executor.exec(command[:line], command[:options])
13
13
 
14
14
  contents = @preprocessinator_extractor.extract_base_file_from_preprocessed_expansion(preprocessed_filepath)
15
15
 
@@ -24,8 +24,8 @@ class PreprocessinatorIncludesHandler
24
24
 
25
25
  # extract the make-style dependency rule telling the preprocessor to
26
26
  # ignore the fact that it can't find the included files
27
- command_line = @tool_executor.build_command_line(@configurator.tools_test_includes_preprocessor, temp_filepath)
28
- shell_result = @tool_executor.exec(command_line)
27
+ command = @tool_executor.build_command_line(@configurator.tools_test_includes_preprocessor, temp_filepath)
28
+ shell_result = @tool_executor.exec(command[:line], command[:options])
29
29
 
30
30
  return shell_result[:output]
31
31
  end
@@ -5,5 +5,5 @@ rule(/#{CMOCK_MOCK_PREFIX}.+#{'\\'+EXTENSION_SOURCE}$/ => [
5
5
  @ceedling[:file_finder].find_header_input_for_mock_file(task_name)
6
6
  end
7
7
  ]) do |mock|
8
- @ceedling[:generator].generate_mock(TEST_CONTEXT, mock.source)
8
+ @ceedling[:generator].generate_mock(TEST_SYM, mock.source)
9
9
  end
@@ -11,7 +11,7 @@ rule(/#{PROJECT_TEST_PREPROCESS_FILES_PATH}\/.+/ => [
11
11
  if (not @ceedling[:configurator].project_use_auxiliary_dependencies)
12
12
  raise 'ERROR: Ceedling preprocessing rule invoked though neccessary auxiliary dependency support not enabled.'
13
13
  end
14
- @ceedling[:generator].generate_preprocessed_file(TEST_CONTEXT, file.source)
14
+ @ceedling[:generator].generate_preprocessed_file(TEST_SYM, file.source)
15
15
  end
16
16
 
17
17
 
@@ -21,6 +21,6 @@ rule(/#{PROJECT_TEST_PREPROCESS_INCLUDES_PATH}\/.+/ => [
21
21
  @ceedling[:file_finder].find_test_or_source_or_header_file(task_name)
22
22
  end
23
23
  ]) do |file|
24
- @ceedling[:generator].generate_shallow_includes_list(TEST_CONTEXT, file.source)
24
+ @ceedling[:generator].generate_shallow_includes_list(TEST_SYM, file.source)
25
25
  end
26
26
 
@@ -9,7 +9,7 @@ rule(/#{PROJECT_RELEASE_BUILD_OUTPUT_ASM_PATH}\/#{'.+\\'+EXTENSION_OBJECT}$/ =>
9
9
  @ceedling[:file_finder].find_assembly_file(task_name)
10
10
  end
11
11
  ]) do |object|
12
- @ceedling[:generator].generate_object_file(TOOLS_RELEASE_ASSEMBLER, RELEASE_CONTEXT, object.source, object.name)
12
+ @ceedling[:generator].generate_object_file(TOOLS_RELEASE_ASSEMBLER, RELEASE_SYM, object.source, object.name)
13
13
  end
14
14
  end
15
15
 
@@ -19,16 +19,16 @@ rule(/#{PROJECT_RELEASE_BUILD_OUTPUT_C_PATH}\/#{'.+\\'+EXTENSION_OBJECT}$/ => [
19
19
  @ceedling[:file_finder].find_compilation_input_file(task_name)
20
20
  end
21
21
  ]) do |object|
22
- @ceedling[:generator].generate_object_file(TOOLS_RELEASE_COMPILER, RELEASE_CONTEXT, object.source, object.name)
22
+ @ceedling[:generator].generate_object_file(TOOLS_RELEASE_COMPILER, RELEASE_SYM, object.source, object.name)
23
23
  end
24
24
 
25
25
 
26
26
  rule(/#{PROJECT_RELEASE_BUILD_TARGET}/) do |bin_file|
27
- @ceedling[:generator].generate_executable_file(TOOLS_RELEASE_LINKER, RELEASE_CONTEXT, bin_file.prerequisites, bin_file.name)
27
+ @ceedling[:generator].generate_executable_file(TOOLS_RELEASE_LINKER, RELEASE_SYM, bin_file.prerequisites, bin_file.name)
28
28
  end
29
29
 
30
30
 
31
- namespace RELEASE_CONTEXT do
31
+ namespace RELEASE_SYM do
32
32
  # use rules to increase efficiency for large projects (instead of iterating through all sources and creating defined tasks)
33
33
 
34
34
  namespace :compile do
@@ -7,7 +7,7 @@ rule(/#{PROJECT_RELEASE_DEPENDENCIES_PATH}\/#{'.+\\'+EXTENSION_DEPENDENCIES}$/ =
7
7
  ]) do |dep|
8
8
  @ceedling[:generator].generate_dependencies_file(
9
9
  TOOLS_RELEASE_DEPENDENCIES_GENERATOR,
10
- RELEASE_CONTEXT,
10
+ RELEASE_SYM,
11
11
  dep.source,
12
12
  @ceedling[:file_path_utils].form_release_build_c_object_filepath(dep.source),
13
13
  dep.name)
@@ -5,7 +5,7 @@ rule(/#{PROJECT_TEST_FILE_PREFIX}#{'.+'+TEST_RUNNER_FILE_SUFFIX}#{'\\'+EXTENSION
5
5
  @ceedling[:file_finder].find_test_input_for_runner_file(task_name)
6
6
  end
7
7
  ]) do |runner|
8
- @ceedling[:generator].generate_test_runner(TEST_CONTEXT, runner.source, runner.name)
8
+ @ceedling[:generator].generate_test_runner(TEST_SYM, runner.source, runner.name)
9
9
  end
10
10
 
11
11
 
@@ -14,12 +14,12 @@ rule(/#{PROJECT_TEST_BUILD_OUTPUT_PATH}\/#{'.+\\'+EXTENSION_OBJECT}$/ => [
14
14
  @ceedling[:file_finder].find_compilation_input_file(task_name)
15
15
  end
16
16
  ]) do |object|
17
- @ceedling[:generator].generate_object_file(TOOLS_TEST_COMPILER, TEST_CONTEXT, object.source, object.name)
17
+ @ceedling[:generator].generate_object_file(TOOLS_TEST_COMPILER, TEST_SYM, object.source, object.name)
18
18
  end
19
19
 
20
20
 
21
21
  rule(/#{PROJECT_TEST_BUILD_OUTPUT_PATH}\/#{'.+\\'+EXTENSION_EXECUTABLE}$/) do |bin_file|
22
- @ceedling[:generator].generate_executable_file(TOOLS_TEST_LINKER, TEST_CONTEXT, bin_file.prerequisites, bin_file.name)
22
+ @ceedling[:generator].generate_executable_file(TOOLS_TEST_LINKER, TEST_SYM, bin_file.prerequisites, bin_file.name)
23
23
  end
24
24
 
25
25
 
@@ -28,11 +28,11 @@ rule(/#{PROJECT_TEST_RESULTS_PATH}\/#{'.+\\'+EXTENSION_TESTPASS}$/ => [
28
28
  @ceedling[:file_path_utils].form_test_executable_filepath(task_name)
29
29
  end
30
30
  ]) do |test_result|
31
- @ceedling[:generator].generate_test_results(TOOLS_TEST_FIXTURE, TEST_CONTEXT, test_result.source, test_result.name)
31
+ @ceedling[:generator].generate_test_results(TOOLS_TEST_FIXTURE, TEST_SYM, test_result.source, test_result.name)
32
32
  end
33
33
 
34
34
 
35
- namespace TEST_CONTEXT do
35
+ namespace TEST_SYM do
36
36
  # use rules to increase efficiency for large projects (instead of iterating through all sources and creating defined tasks)
37
37
 
38
38
  rule(/^#{TEST_TASK_ROOT}\S+$/ => [ # test task names by regex
@@ -7,7 +7,7 @@ rule(/#{PROJECT_TEST_DEPENDENCIES_PATH}\/#{'.+\\'+EXTENSION_DEPENDENCIES}$/ => [
7
7
  ]) do |dep|
8
8
  @ceedling[:generator].generate_dependencies_file(
9
9
  TOOLS_TEST_DEPENDENCIES_GENERATOR,
10
- TEST_CONTEXT,
10
+ TEST_SYM,
11
11
  dep.source,
12
12
  @ceedling[:file_path_utils].form_test_build_object_filepath(dep.source),
13
13
  dep.name)
@@ -24,15 +24,22 @@ class Setupinator
24
24
  @ceedling[:configurator].populate_unity_defines( config_hash )
25
25
  @ceedling[:configurator].populate_cmock_defaults( config_hash )
26
26
  @ceedling[:configurator].find_and_merge_plugins( config_hash )
27
- @ceedling[:configurator].populate_tool_names_and_stderr_redirect( config_hash )
27
+ @ceedling[:configurator].tools_setup( config_hash )
28
28
  @ceedling[:configurator].eval_environment_variables( config_hash )
29
29
  @ceedling[:configurator].eval_paths( config_hash )
30
30
  @ceedling[:configurator].standardize_paths( config_hash )
31
31
  @ceedling[:configurator].validate( config_hash )
32
- @ceedling[:configurator].build( config_hash )
32
+ @ceedling[:configurator].build( config_hash, :environment )
33
+
33
34
  @ceedling[:configurator].insert_rake_plugins( @ceedling[:configurator].rake_plugins )
35
+ @ceedling[:configurator].tools_supplement_arguments( config_hash )
36
+
37
+ # merge in any environment variables plugins specify, after the main build
38
+ @ceedling[:plugin_manager].load_plugin_scripts( @ceedling[:configurator].script_plugins, @ceedling ) do |env|
39
+ @ceedling[:configurator].eval_environment_variables( env )
40
+ @ceedling[:configurator].build_supplement( config_hash, env )
41
+ end
34
42
 
35
- @ceedling[:plugin_manager].load_plugin_scripts( @ceedling[:configurator].script_plugins, @ceedling )
36
43
  @ceedling[:plugin_reportinator].set_system_objects( @ceedling )
37
44
  @ceedling[:file_finder].prepare_search_sources
38
45
  @ceedling[:loginator].setup_log_filepath
@@ -0,0 +1,32 @@
1
+
2
+ class Object
3
+ def deep_clone
4
+ Marshal::load(Marshal.dump(self))
5
+ end
6
+ end
7
+
8
+
9
+ class SystemUtils
10
+
11
+ constructor :system_wrapper
12
+
13
+ def setup
14
+ @tcsh_shell = nil
15
+ end
16
+
17
+ def tcsh_shell?
18
+ # once run a single time, return state determined at that execution
19
+ return @tcsh_shell if not @tcsh_shell.nil?
20
+
21
+ result = @system_wrapper.shell_backticks('echo $version')
22
+
23
+ if ((result[:exit_code] == 0) and (result[:output].strip =~ /^tcsh/))
24
+ @tcsh_shell = true
25
+ else
26
+ @tcsh_shell = false
27
+ end
28
+
29
+ return @tcsh_shell
30
+ end
31
+
32
+ end
@@ -3,13 +3,13 @@ require 'rbconfig'
3
3
  class SystemWrapper
4
4
 
5
5
  # static method for use in defaults
6
- def self.is_windows?
6
+ def self.windows?
7
7
  return ((Config::CONFIG['host_os'] =~ /mswin|mingw/) ? true : false)
8
8
  end
9
9
 
10
10
  # class method so as to be mockable for tests
11
- def is_windows?
12
- return SystemWrapper.is_windows?
11
+ def windows?
12
+ return SystemWrapper.windows?
13
13
  end
14
14
 
15
15
  def module_eval(string)
@@ -40,9 +40,17 @@ class SystemWrapper
40
40
  return Time.now.asctime
41
41
  end
42
42
 
43
- def shell_execute(command)
43
+ def shell_backticks(command)
44
44
  return {
45
- :output => `#{command}`,
45
+ :output => `#{command}`,
46
+ :exit_code => ($?.exitstatus)
47
+ }
48
+ end
49
+
50
+ def shell_system(command)
51
+ system( command )
52
+ return {
53
+ :output => '',
46
54
  :exit_code => ($?.exitstatus)
47
55
  }
48
56
  end
@@ -64,10 +64,10 @@ end
64
64
 
65
65
 
66
66
  # list expanded environment variables
67
- if (not COLLECTION_ENVIRONMENT.empty?)
67
+ if (not ENVIRONMENT.empty?)
68
68
  desc "List all configured environment variables."
69
69
  task :environment do
70
- COLLECTION_ENVIRONMENT.each do |env|
70
+ ENVIRONMENT.each do |env|
71
71
  env.each_key do |key|
72
72
  name = key.to_s.upcase
73
73
  puts " - #{name}: \"#{env[key]}\""
@@ -3,7 +3,7 @@ require 'file_path_utils'
3
3
 
4
4
 
5
5
  desc "Build release target."
6
- task RELEASE_CONTEXT => [:directories] do
6
+ task RELEASE_SYM => [:directories] do
7
7
  header = "Release build '#{File.basename(PROJECT_RELEASE_BUILD_TARGET)}'"
8
8
  @ceedling[:streaminator].stdout_puts("\n\n#{header}\n#{'-' * header.length}")
9
9
 
@@ -1,5 +1,5 @@
1
1
 
2
- namespace TEST_CONTEXT do
2
+ namespace TEST_SYM do
3
3
 
4
4
  desc "Run all unit tests."
5
5
  task :all => [:directories] do
@@ -15,27 +15,55 @@ class ToolExecutor
15
15
  @tool_name = tool_config[:name]
16
16
  @executable = tool_config[:executable]
17
17
 
18
+ command = {}
19
+
18
20
  # basic premise is to iterate top to bottom through arguments using '$' as
19
21
  # a string replacement indicator to expand globals or inline yaml arrays
20
22
  # into command line arguments via substitution strings
21
- return [
23
+ command[:line] = [
22
24
  @tool_executor_helper.osify_path_separators( expandify_element(@executable, *args) ),
23
25
  build_arguments(tool_config[:arguments], *args),
24
- @tool_executor_helper.stderr_redirect_addendum(tool_config) ].compact.join(' ')
26
+ ].join(' ').strip
27
+
28
+ command[:options] = {
29
+ :stderr_redirect => @tool_executor_helper.stderr_redirection(tool_config, @configurator.project_logging),
30
+ :background_exec => tool_config[:background_exec]
31
+ }
32
+
33
+ return command
25
34
  end
26
35
 
27
36
 
28
37
  # shell out, execute command, and return response
29
- def exec(command, args=[], options={:boom => true})
30
- command_str = "#{command} #{args.join(' ')}".strip
38
+ def exec(command, options={}, args=[])
39
+ options[:boom] = true if (options[:boom].nil?)
40
+ options[:stderr_redirect] = StdErrRedirect::NONE if (options[:stderr_redirect].nil?)
41
+ options[:background_exec] = BackgroundExec::NONE if (options[:background_exec].nil?)
31
42
 
32
- shell_result = @system_wrapper.shell_execute(command_str)
33
-
34
- @tool_executor_helper.print_happy_results(command_str, shell_result)
35
- @tool_executor_helper.print_error_results(command_str, shell_result) if (options[:boom])
36
-
43
+ # build command line
44
+ command_line = [
45
+ @tool_executor_helper.background_exec_cmdline_prepend( options ),
46
+ command.strip,
47
+ args,
48
+ @tool_executor_helper.stderr_redirect_cmdline_append( options ),
49
+ @tool_executor_helper.background_exec_cmdline_append( options ),
50
+ ].flatten.compact.join(' ')
51
+
52
+ shell_result = {}
53
+
54
+ # depending on background exec option, we shell out differently
55
+ if (options[:background_exec] != BackgroundExec::NONE)
56
+ shell_result = @system_wrapper.shell_system( command_line )
57
+ else
58
+ shell_result = @system_wrapper.shell_backticks( command_line )
59
+ end
60
+
61
+ @tool_executor_helper.print_happy_results( command_line, shell_result, options[:boom] )
62
+ @tool_executor_helper.print_error_results( command_line, shell_result, options[:boom] )
63
+
64
+ # go boom if exit code isn't 0 (but in some cases we don't want a non-0 exit code to raise)
37
65
  raise if ((shell_result[:exit_code] != 0) and options[:boom])
38
-
66
+
39
67
  return shell_result
40
68
  end
41
69
 
@@ -2,22 +2,61 @@ require 'constants' # for Verbosity enumeration & $stderr redirect enumeration
2
2
 
3
3
  class ToolExecutorHelper
4
4
 
5
- constructor :streaminator, :system_wrapper
5
+ constructor :streaminator, :system_utils, :system_wrapper
6
+
7
+ def stderr_redirection(tool_config, logging)
8
+ # if there's no logging enabled, return :stderr_redirect unmodified
9
+ return tool_config[:stderr_redirect] if (not logging)
10
+
11
+ # if there is logging enabled but the redirect is a custom value (not enum), return the custom string
12
+ return tool_config[:stderr_redirect] if (tool_config[:stderr_redirect].class == String)
13
+
14
+ # if logging is enabled but there's no custom string, return the AUTO enumeration so $stderr goes into the log
15
+ return StdErrRedirect::AUTO
16
+ end
17
+
18
+ def background_exec_cmdline_prepend(tool_config)
19
+ return nil if (tool_config[:background_exec].nil?)
20
+
21
+ config_exec = tool_config[:background_exec]
22
+
23
+ if ((config_exec == BackgroundExec::AUTO) and (@system_wrapper.windows?))
24
+ return 'start'
25
+ end
26
+
27
+ if (config_exec == BackgroundExec::WIN)
28
+ return 'start'
29
+ end
30
+
31
+ return nil
32
+ end
6
33
 
7
34
  def osify_path_separators(executable)
8
- return executable.gsub(/\//, '\\') if (@system_wrapper.is_windows?)
35
+ return executable.gsub(/\//, '\\') if (@system_wrapper.windows?)
9
36
  return executable
10
37
  end
11
38
 
12
- def stderr_redirect_addendum(tool_config)
39
+ def stderr_redirect_cmdline_append(tool_config)
13
40
  return nil if (tool_config[:stderr_redirect].nil?)
14
41
 
15
- redirect = tool_config[:stderr_redirect]
42
+ config_redirect = tool_config[:stderr_redirect]
43
+ redirect = StdErrRedirect::NONE
16
44
 
45
+ if (config_redirect == StdErrRedirect::AUTO)
46
+ if (@system_wrapper.windows?)
47
+ redirect = StdErrRedirect::WIN
48
+ else
49
+ if (@system_utils.tcsh_shell?)
50
+ redirect = StdErrRedirect::TCSH
51
+ else
52
+ redirect = StdErrRedirect::UNIX
53
+ end
54
+ end
55
+ end
56
+
17
57
  case redirect
18
58
  # we may need more complicated processing after some learning with various environments
19
59
  when StdErrRedirect::NONE then nil
20
- when StdErrRedirect::AUTO then '2>&1'
21
60
  when StdErrRedirect::WIN then '2>&1'
22
61
  when StdErrRedirect::UNIX then '2>&1'
23
62
  when StdErrRedirect::TCSH then '|&'
@@ -25,22 +64,41 @@ class ToolExecutorHelper
25
64
  end
26
65
  end
27
66
 
67
+ def background_exec_cmdline_append(tool_config)
68
+ return nil if (tool_config[:background_exec].nil?)
69
+
70
+ config_exec = tool_config[:background_exec]
71
+
72
+ # if :auto & windows, then we already prepended 'start' and should append nothing
73
+ return nil if ((config_exec == BackgroundExec::AUTO) and (@system_wrapper.windows?))
74
+
75
+ # if :auto & not windows, then we append standard '&'
76
+ return '&' if ((config_exec == BackgroundExec::AUTO) and (not @system_wrapper.windows?))
77
+
78
+ # if explicitly Unix, then append '&'
79
+ return '&' if (config_exec == BackgroundExec::UNIX)
80
+
81
+ # all other cases, including :none, :win, & anything unrecognized, append nothing
82
+ return nil
83
+ end
84
+
28
85
  # if command succeeded and we have verbosity cranked up, spill our guts
29
- def print_happy_results(command_str, shell_result)
30
- if (shell_result[:exit_code] == 0)
86
+ def print_happy_results(command_str, shell_result, boom)
87
+ if ((shell_result[:exit_code] == 0) or ((shell_result[:exit_code] != 0) and not boom))
31
88
  output = "> Shell executed command:\n"
32
89
  output += "#{command_str}\n"
33
90
  output += "> Produced response:\n" if (not shell_result[:output].empty?)
34
91
  output += "#{shell_result[:output].strip}\n" if (not shell_result[:output].empty?)
92
+ output += "> And exited with status: [#{shell_result[:exit_code]}].\n" if (shell_result[:exit_code] != 0)
35
93
  output += "\n"
36
-
94
+
37
95
  @streaminator.stdout_puts(output, Verbosity::OBNOXIOUS)
38
96
  end
39
97
  end
40
98
 
41
99
  # if command failed and we have verbosity set to minimum error level, spill our guts
42
- def print_error_results(command_str, shell_result)
43
- if (shell_result[:exit_code] != 0)
100
+ def print_error_results(command_str, shell_result, boom)
101
+ if ((shell_result[:exit_code] != 0) and boom)
44
102
  output = "ERROR: Shell command failed.\n"
45
103
  output += "> Shell executed command:\n"
46
104
  output += "'#{command_str}'\n"