ceedling 1.2.1 → 1.2.2

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 (276) hide show
  1. checksums.yaml +4 -4
  2. data/GIT_COMMIT_SHA +1 -1
  3. data/README.md +11 -9
  4. data/Rakefile +2 -1
  5. data/assets/features/ceedling +1 -1
  6. data/assets/fixtures/test_source_file_duplicate_basenames/test_calc_typo.c +14 -0
  7. data/assets/fixtures/tests_with_duplicate_test_names/test_foo.c +21 -0
  8. data/bin/actionator.rb +6 -12
  9. data/bin/app_cfg.rb +14 -1
  10. data/bin/ceedling +13 -3
  11. data/bin/cli.rb +25 -6
  12. data/bin/cli_handler.rb +113 -73
  13. data/bin/cli_helper.rb +51 -78
  14. data/bin/installation_selector.rb +81 -0
  15. data/bin/launchinator.rb +69 -0
  16. data/bin/mixin_resolvinator.rb +26 -36
  17. data/bin/objects.yml +13 -0
  18. data/bin/path_validator.rb +25 -29
  19. data/bin/versionator.rb +47 -48
  20. data/ceedling.gemspec +19 -15
  21. data/docs/BreakingChanges.md +70 -1
  22. data/docs/Changelog.md +74 -3
  23. data/docs/KnownIssues.md +90 -4
  24. data/docs/ReleaseNotes.md +13 -0
  25. data/lib/ceedling/build_log_writer.rb +33 -0
  26. data/lib/ceedling/config/build_root_policy.rb +70 -0
  27. data/lib/ceedling/config/configurator.rb +14 -16
  28. data/lib/ceedling/config/configurator_builder.rb +58 -28
  29. data/lib/ceedling/config/configurator_paths_validator.rb +179 -0
  30. data/lib/ceedling/config/configurator_plugins.rb +1 -1
  31. data/lib/ceedling/config/configurator_setup.rb +15 -28
  32. data/lib/ceedling/config/configurator_validator.rb +1 -110
  33. data/lib/ceedling/defaults.rb +4 -4
  34. data/lib/ceedling/dependencies/README.md +18 -16
  35. data/lib/ceedling/dependencies/dependency_cache_store.rb +20 -3
  36. data/lib/ceedling/dependencies/dependency_hasher.rb +35 -1
  37. data/lib/ceedling/filename_extension.rb +7 -1
  38. data/lib/ceedling/filesystem/FILE_TREE.md +253 -0
  39. data/lib/ceedling/filesystem/PATH_HANDLING.md +304 -0
  40. data/lib/ceedling/filesystem/README.md +41 -0
  41. data/lib/ceedling/filesystem/build_subpath.rb +102 -0
  42. data/lib/ceedling/filesystem/destination_collision.rb +25 -0
  43. data/lib/ceedling/{file_finder.rb → filesystem/file_finder.rb} +159 -104
  44. data/lib/ceedling/{file_finder_helper.rb → filesystem/file_finder_helper.rb} +36 -31
  45. data/lib/ceedling/filesystem/file_path_collection_utils.rb +183 -0
  46. data/lib/ceedling/{file_path_utils.rb → filesystem/file_path_utils.rb} +108 -97
  47. data/lib/ceedling/{file_system_wrapper.rb → filesystem/file_system_wrapper.rb} +6 -5
  48. data/lib/ceedling/filesystem/file_tree.rb +241 -0
  49. data/lib/ceedling/{file_wrapper.rb → filesystem/file_wrapper.rb} +45 -38
  50. data/lib/ceedling/filesystem/path_exclusions.rb +30 -0
  51. data/lib/ceedling/{path_matcher.rb → filesystem/path_matcher.rb} +27 -23
  52. data/lib/ceedling/{path_mirror.rb → filesystem/path_mirror.rb} +19 -18
  53. data/lib/ceedling/filesystem/path_spellings.rb +55 -0
  54. data/lib/ceedling/filesystem/project_paths.rb +184 -0
  55. data/lib/ceedling/filesystem/working_dir.rb +40 -0
  56. data/lib/ceedling/generators/generator.rb +5 -6
  57. data/lib/ceedling/generators/generator_partials.rb +1 -1
  58. data/lib/ceedling/generators/generator_test_results_backtrace.rb +7 -7
  59. data/lib/ceedling/handoff.rb +121 -0
  60. data/lib/ceedling/includes/include_factory.rb +3 -3
  61. data/lib/ceedling/includes/include_pathinator.rb +67 -10
  62. data/lib/ceedling/includes/includes.rb +1 -1
  63. data/lib/ceedling/installation.rb +92 -0
  64. data/lib/ceedling/library_resolver.rb +99 -0
  65. data/lib/ceedling/objects.yml +23 -2
  66. data/lib/ceedling/partials/partializer.rb +4 -4
  67. data/lib/ceedling/partials/partializer_config.rb +3 -1
  68. data/lib/ceedling/plugins/report_log_writer_plugin.rb +3 -5
  69. data/lib/ceedling/preprocess/preprocessinator_file_assembler.rb +1 -1
  70. data/lib/ceedling/preprocess/preprocessinator_includes_handler.rb +1 -1
  71. data/lib/ceedling/preprocess/preprocessinator_line_marker_includes_extractor.rb +1 -1
  72. data/lib/ceedling/rake_app/rakefile_component_resolver.rb +10 -17
  73. data/lib/ceedling/rakefile.rb +15 -1
  74. data/lib/ceedling/rakefiles/base/tasks_base.rake +1 -1
  75. data/lib/ceedling/rakefiles/release/rules_release.rake +4 -7
  76. data/lib/ceedling/release_invoker/release_build_executor.rb +33 -44
  77. data/lib/ceedling/release_invoker/release_build_planner.rb +14 -6
  78. data/lib/ceedling/reportinator.rb +3 -4
  79. data/lib/ceedling/setupinator.rb +94 -90
  80. data/lib/ceedling/test_context_extractor.rb +5 -1
  81. data/lib/ceedling/test_invoker/PIPELINE.md +9 -7
  82. data/lib/ceedling/test_invoker/mock_locator.rb +60 -2
  83. data/lib/ceedling/test_invoker/partials_manager.rb +12 -0
  84. data/lib/ceedling/test_invoker/standin_headerinator.rb +22 -13
  85. data/lib/ceedling/test_invoker/test_build_executor.rb +24 -40
  86. data/lib/ceedling/test_invoker/test_build_planner.rb +37 -18
  87. data/lib/ceedling/test_invoker/test_build_setup.rb +17 -12
  88. data/lib/ceedling/test_invoker/test_build_validations.rb +16 -31
  89. data/lib/ceedling/test_invoker/test_file_preprocessinator.rb +1 -1
  90. data/lib/ceedling/test_invoker/test_invoker.rb +6 -1
  91. data/lib/ceedling/test_invoker/test_pipeline_helpers.rb +1 -1
  92. data/lib/ceedling/test_invoker/test_source_file_directive_resolver.rb +40 -20
  93. data/lib/ceedling/tool_executor.rb +9 -3
  94. data/lib/ceedling/yaml_wrapper.rb +3 -2
  95. data/lib/version.rb +1 -1
  96. data/plugins/bullseye/config/defaults_bullseye.rb +1 -1
  97. data/plugins/bullseye/lib/bullseye.rb +9 -7
  98. data/plugins/cppcheck/config/defaults_cppcheck.rb +1 -1
  99. data/plugins/dependencies/config/defaults.yml +6 -6
  100. data/plugins/dependencies/dependencies.rake +4 -1
  101. data/plugins/dependencies/lib/dependencies.rb +18 -8
  102. data/plugins/dependencies/lib/dependency_spec.rb +17 -5
  103. data/plugins/fff/lib/fff.rb +45 -39
  104. data/plugins/fff/spec/fff_cmock_wrapper_spec.rb +128 -0
  105. data/plugins/gcov/config/defaults_gcov.rb +1 -1
  106. data/plugins/gcov/lib/console_reportinator.rb +4 -18
  107. data/plugins/gcov/lib/gcov.rb +9 -2
  108. data/plugins/gcov/lib/gcovr_reportinator.rb +8 -40
  109. data/plugins/gcov/lib/gcovr_thresholds.rb +74 -0
  110. data/plugins/gcov/lib/reportgenerator_reportinator.rb +1 -1
  111. data/plugins/module_generator/lib/module_generator.rb +3 -3
  112. data/plugins/report_tests_teamcity_stdout/lib/report_tests_teamcity_stdout.rb +53 -80
  113. data/plugins/sanitize/lib/sanitize_records.rb +3 -6
  114. data/plugins/valgrind/lib/valgrind.rb +14 -7
  115. data/site-local/configuration/reference/cmock.html +2 -1
  116. data/site-local/configuration/reference/files.html +9 -3
  117. data/site-local/configuration/reference/libraries.html +21 -3
  118. data/site-local/configuration/reference/paths.html +29 -6
  119. data/site-local/configuration/reference/project.html +17 -7
  120. data/site-local/configuration/reference/release-build.html +2 -0
  121. data/site-local/configuration/reference/tools.html +9 -0
  122. data/site-local/configuration/which-ceedling.html +377 -17
  123. data/site-local/development/releases.html +5 -1
  124. data/site-local/development/workflow.html +48 -43
  125. data/site-local/getting-started/builds.html +2 -0
  126. data/site-local/getting-started/command-line.html +56 -4
  127. data/site-local/plugins/dependencies.html +6 -3
  128. data/site-local/plugins/fff.html +42 -11
  129. data/site-local/plugins/gcov/gcovr.html +15 -12
  130. data/site-local/plugins/gcov/setup.html +2 -1
  131. data/site-local/plugins/report-tests-raw-output-log.html +3 -1
  132. data/site-local/plugins/report-tests-teamcity-stdout.html +6 -3
  133. data/site-local/plugins/sanitize.html +7 -6
  134. data/site-local/plugins/valgrind.html +8 -7
  135. data/site-local/project/upgrade.html +3 -0
  136. data/site-local/reference/command-line.html +9 -2
  137. data/site-local/sitemap.xml.gz +0 -0
  138. data/site-local/snapshot/plugins/bullseye/config/defaults_bullseye.rb +1 -1
  139. data/site-local/snapshot/plugins/gcov/config/defaults_gcov.rb +1 -1
  140. data/site-local/testing-guide/conventions.html +53 -0
  141. data/spec/integration/actionator_file_operations_spec.rb +91 -1
  142. data/spec/integration/compile_commands_json_db_spec.rb +1 -1
  143. data/spec/integration/configurator_validation_spec.rb +1 -1
  144. data/spec/integration/dependencies/dependency_tracker_cache_hardening_spec.rb +26 -0
  145. data/spec/integration/dependencies/dependency_tracker_core_spec.rb +22 -0
  146. data/spec/integration/launcher_handoff_spec.rb +297 -0
  147. data/spec/integration/mixin_loading_spec.rb +1 -1
  148. data/spec/integration/module_generator_spec.rb +3 -3
  149. data/spec/integration/nested_test_artifacts_spec.rb +99 -0
  150. data/spec/integration/partials_module_resolution_spec.rb +7 -4
  151. data/spec/integration/path_intake_scenarios_spec.rb +101 -0
  152. data/spec/integration/path_scenarios_spec.rb +322 -0
  153. data/spec/integration/quote_include_isolator_spec.rb +1 -1
  154. data/spec/integration/report_build_warnings_log_spec.rb +1 -1
  155. data/spec/integration/report_tests_log_factory_spec.rb +1 -1
  156. data/spec/integration/test_executable_manifest_spec.rb +1 -1
  157. data/spec/integration/test_includes_extractinator_spec.rb +2 -1
  158. data/spec/integration/test_naming_spec.rb +198 -0
  159. data/spec/integration/test_source_file_checks_spec.rb +166 -0
  160. data/spec/integration/tool_validator_spec.rb +1 -1
  161. data/spec/integration/upgrade_docs_spec.rb +84 -0
  162. data/spec/integration/vendor_copy_transient_io_retry_spec.rb +74 -5
  163. data/spec/support/file_tree_helper.rb +88 -0
  164. data/spec/support/integration/configurator_integration_helper.rb +6 -6
  165. data/spec/support/integration/dependency_tracker_integration_helper.rb +1 -1
  166. data/spec/support/integration/partials_generation_integration_helper.rb +2 -2
  167. data/spec/support/integration/path_scenario_harness.rb +173 -0
  168. data/spec/support/integration/spec_integration_helper.rb +1 -1
  169. data/spec/support/integration/test_includes_harness.rb +13 -2
  170. data/spec/support/spec_helper.rb +2 -0
  171. data/spec/support/system/spec_system_helper.rb +7 -6
  172. data/spec/support/system/system_context.rb +21 -3
  173. data/spec/support/working_dir_tracking.rb +49 -0
  174. data/spec/system/build_output_mirroring_spec.rb +2 -2
  175. data/spec/system/conditional_mock_includes_spec.rb +1 -1
  176. data/spec/system/delta_builds_spec.rb +137 -11
  177. data/spec/system/gcov_deployment_spec.rb +1 -0
  178. data/spec/system/header_include_path_validation_spec.rb +4 -4
  179. data/spec/system/launcher_handoff_spec.rb +82 -0
  180. data/spec/system/mock_include_folders_spec.rb +91 -0
  181. data/spec/system/parent_directory_reference_spec.rb +5 -3
  182. data/spec/system/path_handling_probes_spec.rb +192 -0
  183. data/spec/system/preprocessing_parameterized_tests_spec.rb +1 -1
  184. data/spec/system/rake_release_task_path_disambiguation_spec.rb +6 -6
  185. data/spec/system/rake_test_task_path_disambiguation_spec.rb +85 -0
  186. data/spec/system/special_path_characters_spec.rb +86 -0
  187. data/spec/system/support/common_test_cases.rb +23 -21
  188. data/spec/system/support/gcov_common_test_cases.rb +37 -9
  189. data/spec/system/support/sanitize_common_test_cases.rb +2 -2
  190. data/spec/system/support/valgrind_common_test_cases.rb +12 -12
  191. data/spec/system/test_pipeline_stop_points_spec.rb +4 -4
  192. data/spec/system/test_runner_system_include_spec.rb +1 -1
  193. data/spec/system/test_source_file_directive_spec.rb +34 -5
  194. data/spec/units/bin/actionator_spec.rb +14 -17
  195. data/spec/units/bin/app_cfg_spec.rb +37 -0
  196. data/spec/units/bin/cli_handler_spec.rb +282 -6
  197. data/spec/units/bin/cli_helper_spec.rb +116 -45
  198. data/spec/units/bin/installation_selector_spec.rb +114 -0
  199. data/spec/units/bin/launchinator_spec.rb +171 -0
  200. data/spec/units/bin/path_validator_spec.rb +10 -0
  201. data/spec/units/bin/versionator_spec.rb +38 -6
  202. data/spec/units/build_log_writer_spec.rb +57 -0
  203. data/spec/units/config/build_root_policy_spec.rb +61 -0
  204. data/spec/units/config/configurator_builder_spec.rb +37 -6
  205. data/spec/units/config/configurator_paths_validator_spec.rb +292 -0
  206. data/spec/units/config/configurator_setup_spec.rb +9 -65
  207. data/spec/units/config/configurator_spec.rb +27 -5
  208. data/spec/units/config/configurator_validator_spec.rb +1 -172
  209. data/spec/units/default_tools_quoting_spec.rb +83 -0
  210. data/spec/units/dependencies/dependency_cache_store_spec.rb +33 -2
  211. data/spec/units/dependencies/dependency_debug_tree_spec.rb +1 -1
  212. data/spec/units/dependencies/dependency_hasher_spec.rb +42 -1
  213. data/spec/units/dependencies/dependency_path_normalizer_spec.rb +1 -1
  214. data/spec/units/dependencies/dependency_tracker_spec.rb +3 -1
  215. data/spec/units/filename_extension_spec.rb +11 -0
  216. data/spec/units/filesystem/build_subpath_spec.rb +122 -0
  217. data/spec/units/filesystem/destination_collision_spec.rb +30 -0
  218. data/spec/units/{file_finder_helper_spec.rb → filesystem/file_finder_helper_spec.rb} +46 -1
  219. data/spec/units/{file_finder_spec.rb → filesystem/file_finder_spec.rb} +188 -22
  220. data/spec/units/{file_path_collection_utils_spec.rb → filesystem/file_path_collection_utils_spec.rb} +181 -1
  221. data/spec/units/{file_path_utils_spec.rb → filesystem/file_path_utils_spec.rb} +204 -87
  222. data/spec/units/filesystem/file_system_wrapper_spec.rb +33 -0
  223. data/spec/units/filesystem/file_tree_spec.rb +511 -0
  224. data/spec/units/filesystem/file_tree_windows_spec.rb +78 -0
  225. data/spec/units/{file_wrapper_spec.rb → filesystem/file_wrapper_spec.rb} +95 -12
  226. data/spec/units/{path_matcher_spec.rb → filesystem/path_matcher_spec.rb} +12 -1
  227. data/spec/units/{path_mirror_spec.rb → filesystem/path_mirror_spec.rb} +32 -4
  228. data/spec/units/filesystem/project_paths_spec.rb +147 -0
  229. data/spec/units/filesystem/working_dir_spec.rb +71 -0
  230. data/spec/units/generators/generator_spec.rb +12 -6
  231. data/spec/units/generators/generator_test_results_backtrace_spec.rb +50 -46
  232. data/spec/units/generators/generator_test_results_spec.rb +1 -1
  233. data/spec/units/handoff_spec.rb +205 -0
  234. data/spec/units/includes/include_factory_spec.rb +3 -3
  235. data/spec/units/includes/include_pathinator_spec.rb +46 -0
  236. data/spec/units/installation_spec.rb +228 -0
  237. data/spec/units/library_resolver_spec.rb +157 -0
  238. data/spec/units/mock_locator_spec.rb +76 -1
  239. data/spec/units/partials/partializer_config_spec.rb +7 -0
  240. data/spec/units/partials/partializer_spec.rb +1 -0
  241. data/spec/units/partials_manager_spec.rb +17 -0
  242. data/spec/units/plugins/bullseye_spec.rb +15 -2
  243. data/spec/units/plugins/console_reportinator_spec.rb +18 -20
  244. data/spec/units/plugins/dependencies_spec.rb +33 -7
  245. data/spec/units/plugins/dependency_spec_spec.rb +17 -0
  246. data/spec/units/plugins/gcov_spec.rb +28 -3
  247. data/spec/units/plugins/gcovr_reportinator_spec.rb +19 -47
  248. data/spec/units/plugins/gcovr_thresholds_spec.rb +95 -0
  249. data/spec/units/plugins/module_generator_spec.rb +5 -5
  250. data/spec/units/plugins/report_build_warnings_log_spec.rb +3 -3
  251. data/spec/units/plugins/report_log_writer_plugin_spec.rb +10 -1
  252. data/spec/units/plugins/report_tests_raw_output_log_spec.rb +13 -2
  253. data/spec/units/plugins/report_tests_teamcity_stdout_spec.rb +77 -3
  254. data/spec/units/plugins/reportgenerator_reportinator_spec.rb +1 -1
  255. data/spec/units/plugins/sanitize_records_spec.rb +3 -1
  256. data/spec/units/plugins/sanitize_spec.rb +1 -1
  257. data/spec/units/plugins/valgrind_spec.rb +23 -8
  258. data/spec/units/preprocess/preprocessinator_comment_stripper_spec.rb +1 -1
  259. data/spec/units/rake_app/rakefile_component_resolver_spec.rb +21 -0
  260. data/spec/units/release_build_executor_spec.rb +53 -14
  261. data/spec/units/release_build_planner_spec.rb +15 -3
  262. data/spec/units/reportinator_spec.rb +5 -5
  263. data/spec/units/standin_headerinator_spec.rb +31 -1
  264. data/spec/units/test_build_executor_spec.rb +65 -3
  265. data/spec/units/test_build_planner_spec.rb +104 -2
  266. data/spec/units/test_build_setup_spec.rb +96 -12
  267. data/spec/units/test_context_extractor_spec.rb +25 -0
  268. data/spec/units/test_file_preprocessinator_spec.rb +17 -1
  269. data/spec/units/test_includes_extractinator_spec.rb +5 -1
  270. data/spec/units/test_invoker/objects_wiring_spec.rb +6 -3
  271. data/spec/units/test_invoker_spec.rb +14 -1
  272. data/spec/units/test_source_file_directive_resolver_spec.rb +38 -7
  273. data/spec/units/tool_executor_spec.rb +26 -0
  274. data/spec/units/yaml_wrapper_spec.rb +11 -0
  275. metadata +109 -25
  276. data/lib/ceedling/file_path_collection_utils.rb +0 -164
@@ -1830,6 +1830,78 @@
1830
1830
  </span>
1831
1831
  </a>
1832
1832
 
1833
+ </li>
1834
+
1835
+ <li class="md-nav__item">
1836
+ <a href="#hand-off" class="md-nav__link">
1837
+ <span class="md-ellipsis">
1838
+
1839
+ Hand-off
1840
+
1841
+ </span>
1842
+ </a>
1843
+
1844
+ <nav class="md-nav" aria-label="Hand-off">
1845
+ <ul class="md-nav__list">
1846
+
1847
+ <li class="md-nav__item">
1848
+ <a href="#hand-off-by-condition" class="md-nav__link">
1849
+ <span class="md-ellipsis">
1850
+
1851
+ Hand-off by condition
1852
+
1853
+ </span>
1854
+ </a>
1855
+
1856
+ </li>
1857
+
1858
+ <li class="md-nav__item">
1859
+ <a href="#version" class="md-nav__link">
1860
+ <span class="md-ellipsis">
1861
+
1862
+ version
1863
+
1864
+ </span>
1865
+ </a>
1866
+
1867
+ </li>
1868
+
1869
+ <li class="md-nav__item">
1870
+ <a href="#older-launchers" class="md-nav__link">
1871
+ <span class="md-ellipsis">
1872
+
1873
+ Older launchers
1874
+
1875
+ </span>
1876
+ </a>
1877
+
1878
+ </li>
1879
+
1880
+ <li class="md-nav__item">
1881
+ <a href="#projects-vendored-by-110-through-121" class="md-nav__link">
1882
+ <span class="md-ellipsis">
1883
+
1884
+ Projects vendored by 1.1.0 through 1.2.1
1885
+
1886
+ </span>
1887
+ </a>
1888
+
1889
+ </li>
1890
+
1891
+ </ul>
1892
+ </nav>
1893
+
1894
+ </li>
1895
+
1896
+ <li class="md-nav__item">
1897
+ <a href="#ceedling-development" class="md-nav__link">
1898
+ <span class="md-ellipsis">
1899
+
1900
+ Ceedling development
1901
+
1902
+ </span>
1903
+ </a>
1904
+
1833
1905
  </li>
1834
1906
 
1835
1907
  </ul>
@@ -4305,6 +4377,78 @@
4305
4377
  </span>
4306
4378
  </a>
4307
4379
 
4380
+ </li>
4381
+
4382
+ <li class="md-nav__item">
4383
+ <a href="#hand-off" class="md-nav__link">
4384
+ <span class="md-ellipsis">
4385
+
4386
+ Hand-off
4387
+
4388
+ </span>
4389
+ </a>
4390
+
4391
+ <nav class="md-nav" aria-label="Hand-off">
4392
+ <ul class="md-nav__list">
4393
+
4394
+ <li class="md-nav__item">
4395
+ <a href="#hand-off-by-condition" class="md-nav__link">
4396
+ <span class="md-ellipsis">
4397
+
4398
+ Hand-off by condition
4399
+
4400
+ </span>
4401
+ </a>
4402
+
4403
+ </li>
4404
+
4405
+ <li class="md-nav__item">
4406
+ <a href="#version" class="md-nav__link">
4407
+ <span class="md-ellipsis">
4408
+
4409
+ version
4410
+
4411
+ </span>
4412
+ </a>
4413
+
4414
+ </li>
4415
+
4416
+ <li class="md-nav__item">
4417
+ <a href="#older-launchers" class="md-nav__link">
4418
+ <span class="md-ellipsis">
4419
+
4420
+ Older launchers
4421
+
4422
+ </span>
4423
+ </a>
4424
+
4425
+ </li>
4426
+
4427
+ <li class="md-nav__item">
4428
+ <a href="#projects-vendored-by-110-through-121" class="md-nav__link">
4429
+ <span class="md-ellipsis">
4430
+
4431
+ Projects vendored by 1.1.0 through 1.2.1
4432
+
4433
+ </span>
4434
+ </a>
4435
+
4436
+ </li>
4437
+
4438
+ </ul>
4439
+ </nav>
4440
+
4441
+ </li>
4442
+
4443
+ <li class="md-nav__item">
4444
+ <a href="#ceedling-development" class="md-nav__link">
4445
+ <span class="md-ellipsis">
4446
+
4447
+ Ceedling development
4448
+
4449
+ </span>
4450
+ </a>
4451
+
4308
4452
  </li>
4309
4453
 
4310
4454
  </ul>
@@ -4394,16 +4538,14 @@ in <code>lib/</code>. The code in <code>/bin</code> manages lots of startup deta
4394
4538
  configuration. Ultimately, it then launches the main application code from
4395
4539
  <code>lib/</code>.</p>
4396
4540
  <p>The features and conventions controlling <em>which ceedling</em> dictate which
4397
- application code the <code>ceedling</code> command line handler launches.</p>
4541
+ installation of Ceedling runs your command. When they select an
4542
+ installation other than the one whose <code>ceedling</code> command you ran, the launcher
4543
+ hands your command off to that installation’s own launcher. See
4544
+ <a href="#hand-off">Hand-off</a>.</p>
4398
4545
  <div class="admonition note">
4399
- <p class="admonition-title">Ceedling development in <code>bin/</code></p>
4400
- <p>Working on the code in Ceedling’s <code>bin/</code> and need to run it while a gem is
4401
- installed? You must take the additional step of specifying the path to the
4402
- <code>ceedling</code> launcher in your filesystem.</p>
4403
- <p>In Unix-like systems:
4404
- <code>&gt; my/ceedling/changes/bin/ceedling &lt;args&gt;</code>.</p>
4405
- <p>On Windows systems:
4406
- <code>&gt; ruby my\ceedling\changes\bin\ceedling &lt;args&gt;</code>.</p>
4546
+ <p class="admonition-title">Ceedling development</p>
4547
+ <p><em>Which ceedling</em> lets the <code>ceedling</code> command you have installed run your local
4548
+ Ceedling repository. See <a href="#ceedling-development">Ceedling development</a>.</p>
4407
4549
  </div>
4408
4550
  <h2 id="options-and-precedence">Options and precedence</h2>
4409
4551
  <p>When Ceedling starts up, it evaluates a handful of conditions to determine
@@ -4422,25 +4564,243 @@ which Ceedling location to launch.</p>
4422
4564
  <code>ceedling</code> launcher is running. In the typical case this is the default
4423
4565
  gem installation.</li>
4424
4566
  </ol>
4567
+ <p>A path in <code>WHICH_CEEDLING</code> or <code>:which_ceedling</code> may begin with <code>~</code> to name
4568
+ your home directory, as in <code>:which_ceedling: ~/ceedlings/1.2.0</code>.</p>
4425
4569
  <div class="admonition note">
4426
4570
  <p class="admonition-title">Configuration entry (2) does not make sense in some scenarios</p>
4427
- <p>When running <code>ceedling new</code>, <code>ceedling examples</code>, or <code>ceedling example</code>
4428
- there is no project file to read. Similarly, <code>ceedling upgrade</code> does not
4429
- load a project file; it merely works with the directory structure and
4430
- contents of a project. In these cases, the environment variable is your
4431
- only option to set which Ceedling to launch.</p>
4571
+ <p><code>ceedling new</code>, <code>ceedling examples</code>, <code>ceedling example</code>, <code>ceedling docs</code>,
4572
+ and <code>ceedling help</code> outside a project have no project file to read. They
4573
+ use the environment variable or a <code>vendor/ceedling</code> path in your working
4574
+ directory.</p>
4575
+ <p><code>ceedling upgrade</code> re-vendors a project from the Ceedling you run, or from
4576
+ the installation the environment variable names. It never selects a
4577
+ <code>vendor/ceedling</code> path, which inside a project is the copy being replaced.</p>
4578
+ <p><code>ceedling version</code> reads your project file when one is available. See
4579
+ <a href="#hand-off">Hand-off</a>.</p>
4432
4580
  </div>
4433
4581
  <h2 id="settings">Settings</h2>
4434
4582
  <p>The environment variable and configuration entry for <em>Which Ceedling</em> can
4435
4583
  contain two values:</p>
4436
4584
  <ol>
4437
- <li>The value <code>gem</code> indicates that the command line <code>ceedling</code> launcher
4438
- should run the application packaged alongside it in <code>lib/</code> (these
4585
+ <li>The value <code>gem</code>, in any case, indicates that the command line <code>ceedling</code>
4586
+ launcher should run the application packaged alongside it in <code>lib/</code> (these
4439
4587
  paths are typically found in the gem installation location).</li>
4440
4588
  <li>A relative or absolute path in your file system. Such a path should
4441
4589
  point to the top-level directory that contains Ceedling’s <code>bin/</code> and
4442
- <code>lib/</code> sub-directories.</li>
4590
+ <code>lib/</code> sub-directories. A relative path is relative to your working
4591
+ directory, not to your project file.</li>
4592
+ </ol>
4593
+ <h2 id="hand-off">Hand-off</h2>
4594
+ <p>When <em>which ceedling</em> selects an installation other than the one whose
4595
+ <code>ceedling</code> command you ran, every command except <code>version</code> runs in the selected
4596
+ installation. Its own launcher replaces the one you ran, in a new process,
4597
+ and receives your original command line. Your command then runs wholly on the
4598
+ selected installation’s code, whatever its version.</p>
4599
+ <p>One command falls back. A <code>--local</code> copy carries no documentation bundle, so
4600
+ <code>ceedling docs</code> with such a copy selected exports the documentation of the
4601
+ <code>ceedling</code> command you ran instead, with a notice naming both installations.</p>
4602
+ <p>Both sides log a notice, naming each installation and its version where
4603
+ it can be read:</p>
4604
+ <div class="highlight"><pre><span></span><code><a id="__codelineno-0-1" name="__codelineno-0-1" href="#__codelineno-0-1"></a>NOTICE: Ceedling launcher 1.2.2 at /var/lib/gems/3.3.0/gems/ceedling-1.2.2/ is handing off to Ceedling 1.2.0 at /home/me/project/vendor/ceedling/, which runs in its own process.
4605
+ </code></pre></div>
4606
+ <div class="highlight"><pre><span></span><code><a id="__codelineno-1-1" name="__codelineno-1-1" href="#__codelineno-1-1"></a>NOTICE: Ceedling 1.2.3 at /home/me/project/vendor/ceedling/ is now running, launched from Ceedling 1.2.2 at /var/lib/gems/3.3.0/gems/ceedling-1.2.2/.
4607
+ </code></pre></div>
4608
+ <p>The second notice comes only from Ceedling 1.2.2 or later. Commands that
4609
+ quiet logging, such as <code>help</code> and <code>dumpconfig</code>, show neither.</p>
4610
+ <p>A hand-off adds about 0.2 seconds to a command.</p>
4611
+ <h3 id="hand-off-by-condition">Hand-off by condition</h3>
4612
+ <p>The table names one of five mechanisms per condition:</p>
4613
+ <ul>
4614
+ <li><strong>In-process:</strong> the <code>ceedling</code> command you run does the work itself.</li>
4615
+ <li><strong>Hand-off:</strong> the selected installation’s own launcher runs the command, in a new process.</li>
4616
+ <li><strong>Restart:</strong> an application loaded by an older launcher restarts in its own process.</li>
4617
+ <li><strong>Report:</strong> the <code>ceedling</code> command you run reports on both installations without running the selected one.</li>
4618
+ <li><strong>Stop:</strong> the <code>ceedling</code> command you run stops with advice.</li>
4619
+ </ul>
4620
+ <table>
4621
+ <thead>
4622
+ <tr>
4623
+ <th>Condition</th>
4624
+ <th>Example</th>
4625
+ <th>Mechanism</th>
4626
+ <th>Behavior in 1.2.2+</th>
4627
+ </tr>
4628
+ </thead>
4629
+ <tbody>
4630
+ <tr>
4631
+ <td>The selection is the installation you run</td>
4632
+ <td><code>ceedling test:all</code> with the gem and <code>:which_ceedling: gem</code></td>
4633
+ <td>In-process</td>
4634
+ <td>Runs as before 1.2.2, with no notice</td>
4635
+ </tr>
4636
+ <tr>
4637
+ <td>The selection is the same installation by another path</td>
4638
+ <td><code>:which_ceedling</code> names a symlink to the gem’s directory</td>
4639
+ <td>In-process</td>
4640
+ <td>Paths are compared after resolving links, so nothing is handed off</td>
4641
+ </tr>
4642
+ <tr>
4643
+ <td>The selection is another installation</td>
4644
+ <td>The gem’s <code>ceedling test:all</code> in a <code>--local</code> project</td>
4645
+ <td>Hand-off</td>
4646
+ <td>The vendored copy runs the build whole, whatever its version. Both sides log a notice.</td>
4647
+ </tr>
4648
+ <tr>
4649
+ <td>A command without a project selects another installation</td>
4650
+ <td><code>ceedling new</code> with <code>WHICH_CEEDLING</code> set</td>
4651
+ <td>Hand-off</td>
4652
+ <td>The selected installation creates the project with its own code and files</td>
4653
+ </tr>
4654
+ <tr>
4655
+ <td>The selection is a development checkout</td>
4656
+ <td>The gem’s <code>ceedling test:all</code> with <code>:which_ceedling: /home/me/dev/ceedling</code></td>
4657
+ <td>Hand-off</td>
4658
+ <td>The checkout’s own <code>bin/</code> and <code>lib/</code> run the command, so every change takes effect</td>
4659
+ </tr>
4660
+ <tr>
4661
+ <td><code>docs</code> selects a <code>--local</code> copy</td>
4662
+ <td><code>ceedling docs out/</code> in a <code>--local</code> project</td>
4663
+ <td>In-process</td>
4664
+ <td>Exports the documentation of the <code>ceedling</code> command you run, with a notice</td>
4665
+ </tr>
4666
+ <tr>
4667
+ <td><code>version</code> with a selection</td>
4668
+ <td><code>ceedling version</code> in a <code>--local</code> project</td>
4669
+ <td>Report</td>
4670
+ <td>Lists <code>Ceedling Launcher =&gt;</code> and <code>Ceedling App =&gt;</code>, each with its own version</td>
4671
+ </tr>
4672
+ <tr>
4673
+ <td><code>upgrade</code> inside a <code>--local</code> project</td>
4674
+ <td><code>ceedling upgrade .</code></td>
4675
+ <td>Stop</td>
4676
+ <td>Refuses to upgrade the vendored copy from itself</td>
4677
+ </tr>
4678
+ <tr>
4679
+ <td>The selection is a copy vendored by 1.1.0 through 1.2.1</td>
4680
+ <td>The gem’s <code>ceedling test:all</code> in a project vendored by 1.2.0</td>
4681
+ <td>Stop</td>
4682
+ <td>Advises re-vendoring with <code>ceedling upgrade</code></td>
4683
+ </tr>
4684
+ <tr>
4685
+ <td>A launcher before 1.2.2 selects a 1.2.2+ application</td>
4686
+ <td>A 1.2.1 gem <code>ceedling test:all</code> in a project vendoring 1.2.2</td>
4687
+ <td>Restart</td>
4688
+ <td>Logs a warning, then the application runs whole. If it can’t restart, it warns and continues in the older launcher’s process.</td>
4689
+ </tr>
4690
+ <tr>
4691
+ <td>A launcher before 1.2.2 runs a command without a project</td>
4692
+ <td>A 1.2.1 gem <code>ceedling new</code> with <code>WHICH_CEEDLING</code> naming 1.2.2</td>
4693
+ <td>In-process</td>
4694
+ <td>The older launcher’s own code runs the command. Upgrade the <code>ceedling</code> command you run.</td>
4695
+ </tr>
4696
+ </tbody>
4697
+ </table>
4698
+ <h4 id="example-scenarios">Example scenarios</h4>
4699
+ <p>These show when the conditions above come into play, and which goal each
4700
+ serves.</p>
4701
+ <p><strong>Pin a team’s project to one Ceedling version.</strong> Create the project with
4702
+ <code>ceedling new --local</code>, and commit <code>vendor/ceedling/</code>. Each teammate can then
4703
+ run the project with whatever 1.2.2+ gem they have installed. The gem hands
4704
+ each command off to the vendored copy, so everyone builds with the same
4705
+ version. <code>ceedling version</code> confirms it under <code>Ceedling App =&gt;</code>.</p>
4706
+ <p><strong>Keep an older project on its version while you upgrade the gem.</strong> A
4707
+ project vendoring 1.2.0 still builds with 1.2.0 after you install the 1.2.2
4708
+ gem, because the gem hands off to the vendored copy. If the copy was vendored
4709
+ by 1.1.0 through 1.2.1, the gem stops instead. Re-vendor it as below, or
4710
+ copy Unity’s <code>test/targets/</code> into the copy to keep its version.</p>
4711
+ <p><strong>Upgrade a vendored project.</strong> Run <code>upgrade</code> with the Ceedling you want,
4712
+ from outside the project:</p>
4713
+ <div class="highlight"><pre><span></span><code><a id="__codelineno-2-1" name="__codelineno-2-1" href="#__codelineno-2-1"></a><span class="w"> </span>&gt;<span class="w"> </span>ceedling<span class="w"> </span>upgrade<span class="w"> </span>my_project
4714
+ </code></pre></div>
4715
+ <p>To re-vendor with an installation other than the one you run, name it in
4716
+ <code>WHICH_CEEDLING</code>. Run from inside the project, <code>upgrade</code> stops, because the
4717
+ vendored copy would be both source and destination.</p>
4718
+ <p><strong>Create a project with a version you haven’t installed as a gem.</strong> Point
4719
+ <code>WHICH_CEEDLING</code> at an unpacked copy or a checkout of that version. <code>new</code>
4720
+ hands off to it, so the project, its vendored files, and its recorded
4721
+ <code>:ceedling_version:</code> all come from that version:</p>
4722
+ <div class="highlight"><pre><span></span><code><a id="__codelineno-3-1" name="__codelineno-3-1" href="#__codelineno-3-1"></a><span class="w"> </span>&gt;<span class="w"> </span><span class="nv">WHICH_CEEDLING</span><span class="o">=</span>~/ceedlings/1.2.0<span class="w"> </span>ceedling<span class="w"> </span>new<span class="w"> </span>--local<span class="w"> </span>my_project
4723
+ </code></pre></div>
4724
+ <p><strong>Compare versions, or find where a behavior changed.</strong> Set <code>WHICH_CEEDLING</code>
4725
+ for each run instead of editing the project file. It overrides
4726
+ <code>:which_ceedling</code> and a <code>vendor/ceedling/</code> copy, so a CI job can build one
4727
+ project with several versions:</p>
4728
+ <div class="highlight"><pre><span></span><code><a id="__codelineno-4-1" name="__codelineno-4-1" href="#__codelineno-4-1"></a><span class="w"> </span>&gt;<span class="w"> </span><span class="nv">WHICH_CEEDLING</span><span class="o">=</span>~/ceedlings/1.2.0<span class="w"> </span>ceedling<span class="w"> </span>test:all
4729
+ <a id="__codelineno-4-2" name="__codelineno-4-2" href="#__codelineno-4-2"></a><span class="w"> </span>&gt;<span class="w"> </span><span class="nv">WHICH_CEEDLING</span><span class="o">=</span>~/ceedlings/1.2.2<span class="w"> </span>ceedling<span class="w"> </span>test:all
4730
+ </code></pre></div>
4731
+ <p><strong>Run a 1.2.2 project in a CI image with an older gem.</strong> A Docker image
4732
+ shipping a 1.2.1 gem loads the vendored 1.2.2 application into its own
4733
+ process. The application restarts itself, with a warning. To avoid the
4734
+ restart, run the project’s <code>./ceedling</code> launch script, or upgrade the image.</p>
4735
+ <p><strong>Develop Ceedling itself.</strong> Point <code>:which_ceedling</code> at your local
4736
+ repository and keep running the installed gem. See
4737
+ <a href="#ceedling-development">Ceedling development</a>.</p>
4738
+ <div class="admonition note">
4739
+ <p class="admonition-title">The launcher you run still parses your command line</p>
4740
+ <p>The <code>ceedling</code> command you run reads your command line before it hands off, so it
4741
+ rejects an option that only the selected installation knows. Run the
4742
+ selected installation’s own launcher instead, such as <code>./ceedling</code> in a
4743
+ <code>--local</code> project.</p>
4744
+ </div>
4745
+ <h3 id="version"><code>version</code></h3>
4746
+ <p><code>ceedling version</code> reports on both installations rather than hand off. It
4747
+ reads your project file when one is available, or the one <code>--project</code> names,
4748
+ along with any <code>--mixin</code>s. When the project selects another installation, it
4749
+ lists <code>Ceedling Launcher =&gt;</code> and <code>Ceedling App =&gt;</code> separately, each with its
4750
+ own version.</p>
4751
+ <h3 id="older-launchers">Older launchers</h3>
4752
+ <p>A launcher before 1.2.2 loads the selected installation’s application into
4753
+ its own process instead of handing off. A 1.2.2 or later application detects
4754
+ this, logs a warning, and restarts in its own process with your original
4755
+ command line. <code>new</code>, <code>example</code>, <code>examples</code>, <code>upgrade</code>, <code>docs</code>, and <code>help</code>
4756
+ without a project never load the application, so these still run the older
4757
+ launcher’s own code. Upgrade the <code>ceedling</code> command you run to avoid this.</p>
4758
+ <h3 id="projects-vendored-by-110-through-121">Projects vendored by 1.1.0 through 1.2.1</h3>
4759
+ <p><code>ceedling new --local</code> in Ceedling 1.1.0 through 1.2.1 left Unity’s built-in
4760
+ mixins out of the vendored copy, so that copy cannot run on its own. The
4761
+ <code>ceedling</code> command you run stops with advice instead of handing off to it. Re-vendor
4762
+ the project with <code>ceedling upgrade &lt;project path&gt;</code>.</p>
4763
+ <h2 id="ceedling-development">Ceedling development</h2>
4764
+ <p><em>Which ceedling</em> lets you run your local Ceedling repository on a project
4765
+ from the <code>ceedling</code> command you already have installed. Set <code>:project</code> ↳
4766
+ <code>:which_ceedling</code> in the project file, or <code>WHICH_CEEDLING</code>, to the path of
4767
+ your repository:</p>
4768
+ <div class="highlight"><pre><span></span><code><a id="__codelineno-5-1" name="__codelineno-5-1" href="#__codelineno-5-1"></a><span class="nt">:project</span><span class="p">:</span>
4769
+ <a id="__codelineno-5-2" name="__codelineno-5-2" href="#__codelineno-5-2"></a><span class="w"> </span><span class="nt">:which_ceedling</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">/home/me/dev/ceedling</span>
4770
+ </code></pre></div>
4771
+ <p>The installed <code>ceedling</code> command hands every command off to your repository’s own
4772
+ <code>bin/ceedling</code>. Your command runs wholly on your repository’s <code>bin/</code> and
4773
+ <code>lib/</code>, so changes in either take effect. <code>ceedling version</code> lists both
4774
+ installations, your repository with its <code>.dev</code> tag.</p>
4775
+ <p>Before 1.2.2, the installed <code>ceedling</code> command loaded your repository’s application
4776
+ into its own process. Any <code>lib/</code> file it had already loaded stayed the
4777
+ installed copy, so changes to those files were silently ignored.</p>
4778
+ <p>Keep in mind:</p>
4779
+ <ol>
4780
+ <li><strong>Your repository’s <code>bin/</code> runs as well as its <code>lib/</code>.</strong> The installed
4781
+ launcher never runs your repository’s application. To exercise a
4782
+ particular launcher, run its <code>bin/ceedling</code> directly.</li>
4783
+ <li><strong>The installed <code>ceedling</code> command parses your command line first.</strong> It rejects a
4784
+ command or option that exists only in your repository. Run your
4785
+ repository’s launcher directly for those.</li>
4786
+ <li><strong>Your repository must run on its own.</strong> It needs <code>bin/ceedling</code> and its
4787
+ checked-out Git submodules, including Unity’s <code>test/targets/</code>. Otherwise
4788
+ the installed <code>ceedling</code> command stops with advice.</li>
4789
+ <li><strong>A debugger or profiler loses the command at the hand-off.</strong> It attaches
4790
+ to the installed <code>ceedling</code> command, whose process the hand-off replaces. Attach
4791
+ it to your repository’s launcher directly instead.</li>
4792
+ <li><strong>A hand-off adds about 0.2 seconds</strong> to each command.</li>
4793
+ <li><strong><code>ceedling docs</code> exports the installed <code>ceedling</code> command’s documentation</strong> when
4794
+ your repository has no built <code>site-local/</code> bundle.</li>
4795
+ <li><strong>A path that resolves to the installation you run is not handed off.</strong>
4796
+ The plugin test suites’ <code>:which_ceedling: ../../../..</code> names the
4797
+ repository running them, so they run in-process.</li>
4443
4798
  </ol>
4799
+ <p>To run your repository’s launcher directly:</p>
4800
+ <ul>
4801
+ <li>In Unix-like systems: <code>&gt; ~/dev/ceedling/bin/ceedling &lt;args&gt;</code>.</li>
4802
+ <li>On Windows systems: <code>&gt; ruby %USERPROFILE%\dev\ceedling\bin\ceedling &lt;args&gt;</code>.</li>
4803
+ </ul>
4444
4804
  <p><br/><br/></p>
4445
4805
 
4446
4806
 
@@ -4654,8 +4654,12 @@ release, then commit and continue development.</p>
4654
4654
  <li>Push <code>v1.2.0-pre.1</code> from <code>next_version</code>. CI creates a GitHub-available pre-release.</li>
4655
4655
  <li>Iterate with <code>-pre.2</code> and onward as needed.</li>
4656
4656
  <li>Bring the work onto <code>master</code> once the release is ready.</li>
4657
+ <li>Date the release’s sections in <code>docs/Changelog.md</code>, <code>docs/BreakingChanges.md</code>, and <code>docs/KnownIssues.md</code>.</li>
4657
4658
  <li>Push <code>v1.2.0</code> from <code>master</code>. CI creates the GitHub-available release and publishes the gem to RubyGems.org.</li>
4658
- <li>Bump <code>lib/version.rb</code> and continue development.</li>
4659
+ <li>Bump <code>lib/version.rb</code> and continue development. Open the next release’s sections:</li>
4660
+ <li><code>docs/Changelog.md</code>: a new, empty section.</li>
4661
+ <li><code>docs/KnownIssues.md</code>: a copy of the released section. Remove each issue the next release resolves, and close the released section by naming it.</li>
4662
+ <li><code>docs/BreakingChanges.md</code>: a section only once the next release breaks something.</li>
4659
4663
  </ol>
4660
4664
  <h2 id="documentation-deployment">Documentation deployment</h2>
4661
4665
  <p>Documentation versions are deployed by hand, separately from the gem. These tasks
@@ -4012,6 +4012,23 @@
4012
4012
  </span>
4013
4013
  </a>
4014
4014
 
4015
+ <nav class="md-nav" aria-label="Code organization">
4016
+ <ul class="md-nav__list">
4017
+
4018
+ <li class="md-nav__item">
4019
+ <a href="#running-your-repository-with-which-ceedling" class="md-nav__link">
4020
+ <span class="md-ellipsis">
4021
+
4022
+ Running your repository with Which Ceedling
4023
+
4024
+ </span>
4025
+ </a>
4026
+
4027
+ </li>
4028
+
4029
+ </ul>
4030
+ </nav>
4031
+
4015
4032
  </li>
4016
4033
 
4017
4034
  <li class="md-nav__item">
@@ -4351,17 +4368,6 @@
4351
4368
  </ul>
4352
4369
  </nav>
4353
4370
 
4354
- </li>
4355
-
4356
- <li class="md-nav__item">
4357
- <a href="#bin-vs-lib" class="md-nav__link">
4358
- <span class="md-ellipsis">
4359
-
4360
- bin/ vs. lib/
4361
-
4362
- </span>
4363
- </a>
4364
-
4365
4371
  </li>
4366
4372
 
4367
4373
  </ul>
@@ -4611,6 +4617,23 @@
4611
4617
  </span>
4612
4618
  </a>
4613
4619
 
4620
+ <nav class="md-nav" aria-label="Code organization">
4621
+ <ul class="md-nav__list">
4622
+
4623
+ <li class="md-nav__item">
4624
+ <a href="#running-your-repository-with-which-ceedling" class="md-nav__link">
4625
+ <span class="md-ellipsis">
4626
+
4627
+ Running your repository with Which Ceedling
4628
+
4629
+ </span>
4630
+ </a>
4631
+
4632
+ </li>
4633
+
4634
+ </ul>
4635
+ </nav>
4636
+
4614
4637
  </li>
4615
4638
 
4616
4639
  <li class="md-nav__item">
@@ -4950,17 +4973,6 @@
4950
4973
  </ul>
4951
4974
  </nav>
4952
4975
 
4953
- </li>
4954
-
4955
- <li class="md-nav__item">
4956
- <a href="#bin-vs-lib" class="md-nav__link">
4957
- <span class="md-ellipsis">
4958
-
4959
- bin/ vs. lib/
4960
-
4961
- </span>
4962
- </a>
4963
-
4964
4976
  </li>
4965
4977
 
4966
4978
  </ul>
@@ -5049,6 +5061,20 @@
5049
5061
  processing, validation, and plugin loading.</li>
5050
5062
  <li>Triggering the build/plugin task named at the command line.</li>
5051
5063
  </ol>
5064
+ <h3 id="running-your-repository-with-which-ceedling">Running your repository with Which Ceedling</h3>
5065
+ <p>Depending on what you’re working on you may need to run Ceedling using
5066
+ a specialized approach.</p>
5067
+ <p>To run your local repository on a project, either:</p>
5068
+ <ol>
5069
+ <li>Point <code>:project</code> ↳ <code>:which_ceedling</code> or <code>WHICH_CEEDLING</code> at your
5070
+ repository, then run the <code>ceedling</code> command you already have installed. It hands
5071
+ each command off to your repository’s own <code>bin/ceedling</code>, so your changes
5072
+ in both <code>bin/</code> and <code>lib/</code> run.</li>
5073
+ <li>Run your repository’s <code>bin/ceedling</code> directly. Do this for a command or
5074
+ option only your repository knows, or to attach a debugger.</li>
5075
+ </ol>
5076
+ <p>See <a href="../configuration/which-ceedling.html#ceedling-development">Which Ceedling: Ceedling development</a> for the
5077
+ details and caveats.</p>
5052
5078
  <h2 id="installation-options">Installation options</h2>
5053
5079
  <h3 id="local-installation">Local installation</h3>
5054
5080
  <p>After installing Ruby…</p>
@@ -5560,27 +5586,6 @@ configuration is in <code>mkdocs.yml</code> while the local site bundle configur
5560
5586
  port 8000, VS Code detects it and shows a notification. The <strong>Ports</strong> panel also
5561
5587
  provides an <strong>Open in Browser</strong> button.</p>
5562
5588
  <p><strong>Hosted site:</strong> <a href="https://docs.throwtheswitch.org/Ceedling/">https://docs.throwtheswitch.org/Ceedling/</a></p>
5563
- <h2 id="bin-vs-lib"><code>bin/</code> vs. <code>lib/</code></h2>
5564
- <p>Most of Ceedling’s functionality is contained in the application code residing
5565
- in <code>lib/</code>. Ceedling’s command line handling, startup configuration, project
5566
- file loading, and mixin handling are contained in a “bootloader” in <code>bin/</code>.
5567
- The code in <code>bin/</code> is the source of the <code>ceedling</code> command line tool and
5568
- launches the application from <code>lib/</code>.</p>
5569
- <p>Depending on what you’re working on you may need to run Ceedling using
5570
- a specialized approach.</p>
5571
- <p>If you are only working in <code>lib/</code>, you can:</p>
5572
- <ol>
5573
- <li>Run Ceedling using the <code>ceedling</code> command line utility you already have
5574
- installed. The code in <code>bin/</code> will run from your locally installed gem or
5575
- from within your Docker container and launch the Ceedling application for
5576
- you.</li>
5577
- <li>Modify a project file by setting a path value for <code>:project</code> ↳ <code>:which_ceedling</code>
5578
- that points to the local copy of Ceedling you cloned from the Git repository.</li>
5579
- </ol>
5580
- <p>If you are working in <code>bin/</code>, running <code>ceedling</code> at the command line will not
5581
- call your modified code. Instead, you must execute the path to the executable
5582
- <code>ceedling</code> in the <code>bin/</code> folder of the local Ceedling repository you are
5583
- working on.</p>
5584
5589
  <p><br/><br/></p>
5585
5590
 
5586
5591
 
@@ -4452,6 +4452,8 @@
4452
4452
  </ol>
4453
4453
  <p>Where a C file change ripples out only along that file’s dependency chain, a shared configuration change ripples out across every target that reads that piece of configuration — often the whole project. File changes tend to trigger depth-oriented rebuilds while configuration changes tend to trigger breadth-oriented rebuilds.</p>
4454
4454
  <h2 id="delta-build-special-cases">Delta build special cases</h2>
4455
+ <p>An upgrade that changes where Ceedling organizes build output rebuilds everything once. The first build after upgrading logs a warning saying so. Run <code>ceedling clobber</code> to remove the output left in the old layout, which coverage reports in particular would otherwise still read.</p>
4456
+ <p>A link artifact is relinked when a dependent library changes. Ceedling finds library files <a href="../configuration/reference/libraries.html"><code>:libraries</code></a> among <code>:paths</code> ↳ <code>:libraries</code>, and tracks the libraries the <a href="../plugins/dependencies.html">Dependencies plugin</a> builds. A library found only on your toolchain’s own search paths, or through a <code>-L</code> written into <code>:flags</code>, is not tracked. Run <code>ceedling clobber</code> after any such “untracked” library changes.</p>
4455
4457
  <p>Add the <a href="command-line.html#ceedling-build-tasks"><code>--force-test-rerun</code></a> flag to test build tasks to bypass the checks for only running changed test fixture executables. This command line flag forces those executables to run and produce fresh test results.</p>
4456
4458
  <p>When <a href="../configuration/reference/unity.html#shuffle_tests">Unity’s test shuffling feature</a> is enabled, delta builds automatically rerun test fixture executables to randomize test case order regardless of change or lack thereof in a test’s dependency tree. That is, since the feature requires test executables to run in order to shuffle test case order, effectively, delta builds are disabled for test fixture executables.</p>
4457
4459
  <h2 id="delta-build-examples">Delta build examples</h2>