From 21be1a1a854b2f35ddc574d8b8f50ed55a1bc23a Mon Sep 17 00:00:00 2001
From: "tgstation-server-ci[bot]"
<161980869+tgstation-server-ci[bot]@users.noreply.github.com>
Date: Sun, 18 Aug 2024 13:02:50 +0000
Subject: [PATCH] Deploy code docs to GitHub Pages for workflow run 3224
Commit: b0fa8e7c91f3ab39379da19d378ecacabce14a71
---
_byond_installer_base_8cs_source.html | 6 +-
_delegating_engine_installer_8cs_source.html | 6 +-
_dream_maker_8cs_source.html | 4 +-
_engine_controller_8cs_source.html | 343 +--
_engine_installer_base_8cs_source.html | 6 +-
_engine_manager_8cs_source.html | 852 ++++----
_fetch_options_extensions_8cs_source.html | 16 +-
_i_dream_maker_8cs_source.html | 2 +-
_i_engine_installer_8cs_source.html | 6 +-
_i_engine_manager_8cs_source.html | 8 +-
_i_process_base_8cs_source.html | 4 +-
_i_repository_8cs_source.html | 14 +-
_i_repository_manager_8cs_source.html | 8 +-
_job_entrypoint_8cs_source.html | 2 +-
_job_progress_reporter_8cs_source.html | 312 ++-
_job_service_8cs_source.html | 194 +-
_open_dream_installer_8cs_source.html | 471 +++--
_process_8cs_source.html | 442 ++--
_repository_8cs_source.html | 1864 +++++++++--------
_repository_manager_8cs_source.html | 16 +-
_repository_update_service_8cs_source.html | 971 ++++-----
_session_controller_8cs_source.html | 6 +-
...st_2_components_2_instance_8cs_source.html | 6 +-
_watchdog_base_8cs_source.html | 4 +-
_windows_open_dream_installer_8cs_source.html | 2 +-
changelog.yml | 5 +
class_i_disposable.html | 37 +-
class_i_disposable__inherit__graph.map | 37 +-
class_i_disposable__inherit__graph.md5 | 2 +-
class_i_disposable__inherit__graph.png | Bin 298326 -> 306239 bytes
...1_1_api_1_1_models_1_1_engine_version.html | 20 +-
...76a2503f8e4371139e9abe80df44d2_icgraph.map | 6 +-
...76a2503f8e4371139e9abe80df44d2_icgraph.md5 | 2 +-
..._1_1_internal_1_1_repository_settings.html | 4 +-
..._server_1_1_api_1_1_models_1_1_limits.html | 2 +-
..._extensions_1_1_value_task_extensions.html | 2 +-
...onents_1_1_deployment_1_1_dream_maker.html | 4 +-
...gine_1_1_byond_installer_base-members.html | 2 +-
...s_1_1_engine_1_1_byond_installer_base.html | 42 +-
...0f9b30cccd75058679a819522f0b74_icgraph.map | 2 +-
...0f9b30cccd75058679a819522f0b74_icgraph.md5 | 2 +-
...f1546f8ef11d749bc75509ce63bdae5_cgraph.map | 0
...f1546f8ef11d749bc75509ce63bdae5_cgraph.md5 | 0
...f1546f8ef11d749bc75509ce63bdae5_cgraph.png | Bin
...1_delegating_engine_installer-members.html | 2 +-
...ngine_1_1_delegating_engine_installer.html | 26 +-
...ine_1_1_engine_installer_base-members.html | 2 +-
..._1_1_engine_1_1_engine_installer_base.html | 38 +-
...0a63f182a77bc1a099f3c7f8cd6849_icgraph.map | 4 +-
...0a63f182a77bc1a099f3c7f8cd6849_icgraph.md5 | 2 +-
...1_1_engine_1_1_engine_manager-members.html | 6 +-
...ponents_1_1_engine_1_1_engine_manager.html | 1036 ++++-----
...303d46d250191f69bb5251c89ca301d_cgraph.md5 | 1 -
...303d46d250191f69bb5251c89ca301d_cgraph.png | Bin 85220 -> 0 bytes
...03d46d250191f69bb5251c89ca301d_icgraph.md5 | 1 -
...d4c2604e3020f77b073021bf3016b4_icgraph.map | 2 +-
...d4c2604e3020f77b073021bf3016b4_icgraph.md5 | 2 +-
...d2a758adff2c72db49e822c8f6ceccf_cgraph.md5 | 1 -
...d2a758adff2c72db49e822c8f6ceccf_cgraph.png | Bin 126786 -> 0 bytes
...2a758adff2c72db49e822c8f6ceccf_icgraph.md5 | 1 -
...d0593064aa1c11835cfa1ab2823ec34_cgraph.map | 32 +-
...d0593064aa1c11835cfa1ab2823ec34_cgraph.md5 | 1 +
...d0593064aa1c11835cfa1ab2823ec34_cgraph.png | Bin 0 -> 155232 bytes
...0593064aa1c11835cfa1ab2823ec34_icgraph.map | 2 +-
...0593064aa1c11835cfa1ab2823ec34_icgraph.md5 | 1 +
...0593064aa1c11835cfa1ab2823ec34_icgraph.png | Bin
...03c2123e6edceee48d8b4897be532c6_cgraph.map | 36 +-
...03c2123e6edceee48d8b4897be532c6_cgraph.md5 | 2 +-
...03c2123e6edceee48d8b4897be532c6_cgraph.png | Bin 137052 -> 164267 bytes
...9978534a863e31d7d58e51c86b5886c_cgraph.map | 42 +-
...9978534a863e31d7d58e51c86b5886c_cgraph.md5 | 1 +
...9978534a863e31d7d58e51c86b5886c_cgraph.png | Bin 0 -> 184344 bytes
...06e9789785574f8d657a29fdd183795_cgraph.map | 20 +-
...06e9789785574f8d657a29fdd183795_cgraph.md5 | 1 +
...06e9789785574f8d657a29fdd183795_cgraph.png | Bin 0 -> 102272 bytes
...6e9789785574f8d657a29fdd183795_icgraph.map | 4 +-
...6e9789785574f8d657a29fdd183795_icgraph.md5 | 1 +
...6e9789785574f8d657a29fdd183795_icgraph.png | Bin
...40140865facd71ee580f625a8c95bc_icgraph.map | 4 +-
...40140865facd71ee580f625a8c95bc_icgraph.md5 | 2 +-
...2cedaccbf100b9dcf3922a9443f8f19_cgraph.md5 | 1 -
...2cedaccbf100b9dcf3922a9443f8f19_cgraph.png | Bin 169926 -> 0 bytes
...gine_1_1_open_dream_installer-members.html | 2 +-
...s_1_1_engine_1_1_open_dream_installer.html | 507 ++---
...df90470a5fd85e870cf0d959181e7d8_cgraph.map | 8 -
...df90470a5fd85e870cf0d959181e7d8_cgraph.md5 | 1 -
...df90470a5fd85e870cf0d959181e7d8_cgraph.png | Bin 38513 -> 0 bytes
...0f999e3876ac5a4c9c92684df68ec12_cgraph.map | 11 +
...0f999e3876ac5a4c9c92684df68ec12_cgraph.md5 | 1 +
...0f999e3876ac5a4c9c92684df68ec12_cgraph.png | Bin 0 -> 68826 bytes
...ine_1_1_posix_byond_installer-members.html | 2 +-
..._1_1_engine_1_1_posix_byond_installer.html | 26 +-
...e_1_1_windows_byond_installer-members.html | 2 +-
..._1_engine_1_1_windows_byond_installer.html | 26 +-
..._windows_open_dream_installer-members.html | 2 +-
...gine_1_1_windows_open_dream_installer.html | 30 +-
..._1_1_host_1_1_components_1_1_instance.html | 283 +--
...1cc04923d2557eefd57ad2ded9eb7f2_cgraph.md5 | 2 +-
...2340b0e0ecd2c2ccc812d88f86f7a3c_cgraph.map | 89 +-
...2340b0e0ecd2c2ccc812d88f86f7a3c_cgraph.md5 | 2 +-
...2340b0e0ecd2c2ccc812d88f86f7a3c_cgraph.png | Bin 468619 -> 460703 bytes
...6b97c61b214295da99e737ab2570b5a_cgraph.map | 91 +-
...6b97c61b214295da99e737ab2570b5a_cgraph.md5 | 2 +-
...6b97c61b214295da99e737ab2570b5a_cgraph.png | Bin 480223 -> 469720 bytes
...437eb5855fbd7575d4a5b0c71217745_cgraph.map | 2 +-
...437eb5855fbd7575d4a5b0c71217745_cgraph.md5 | 2 +-
...437eb5855fbd7575d4a5b0c71217745_cgraph.png | Bin 69632 -> 72568 bytes
...c1fd9e8dc3bd57b78dbcbc4e7f449b4_cgraph.map | 95 +-
...c1fd9e8dc3bd57b78dbcbc4e7f449b4_cgraph.md5 | 2 +-
...c1fd9e8dc3bd57b78dbcbc4e7f449b4_cgraph.png | Bin 498542 -> 485142 bytes
...1_1_repository_1_1_repository-members.html | 37 +-
...ponents_1_1_repository_1_1_repository.html | 1591 +++++++-------
...repository_1_1_repository__coll__graph.map | 3 +-
...repository_1_1_repository__coll__graph.md5 | 2 +-
...repository_1_1_repository__coll__graph.png | Bin 183140 -> 192586 bytes
...44a180597fe2bde35fd85e43d0dd59d_cgraph.map | 10 +-
...44a180597fe2bde35fd85e43d0dd59d_cgraph.md5 | 1 +
...44a180597fe2bde35fd85e43d0dd59d_cgraph.png | Bin 0 -> 51487 bytes
...28bfe68ce247974125194b074003c1b_cgraph.md5 | 1 -
...28bfe68ce247974125194b074003c1b_cgraph.png | Bin 17882 -> 0 bytes
...8bfe68ce247974125194b074003c1b_icgraph.md5 | 1 -
...a8561c6ba67a42fec9a9830a043fbdc_cgraph.map | 7 +-
...a8561c6ba67a42fec9a9830a043fbdc_cgraph.md5 | 2 +-
...a8561c6ba67a42fec9a9830a043fbdc_cgraph.png | Bin 69166 -> 69729 bytes
...dc9ca8cfb27f89f6d595412d819021a_cgraph.map | 6 +-
...dc9ca8cfb27f89f6d595412d819021a_cgraph.md5 | 2 +-
...dc9ca8cfb27f89f6d595412d819021a_cgraph.png | Bin 15081 -> 17096 bytes
...32cb5984c52022a23716cbabb1e4a40_cgraph.map | 9 +
...32cb5984c52022a23716cbabb1e4a40_cgraph.md5 | 1 +
...32cb5984c52022a23716cbabb1e4a40_cgraph.png | Bin 0 -> 46644 bytes
...fefc02e22b5c22787b498a045107740_cgraph.map | 7 +-
...fefc02e22b5c22787b498a045107740_cgraph.md5 | 1 +
...fefc02e22b5c22787b498a045107740_cgraph.png | Bin 0 -> 23487 bytes
...efc02e22b5c22787b498a045107740_icgraph.map | 2 +-
...efc02e22b5c22787b498a045107740_icgraph.md5 | 1 +
...efc02e22b5c22787b498a045107740_icgraph.png | Bin
...5068b3afe9edb4dc3a0474422f650aa_cgraph.map | 8 -
...5068b3afe9edb4dc3a0474422f650aa_cgraph.md5 | 1 -
...5068b3afe9edb4dc3a0474422f650aa_cgraph.png | Bin 40344 -> 0 bytes
...52e74ecb862a3cb6c26b89970ccc402_cgraph.md5 | 1 -
...52e74ecb862a3cb6c26b89970ccc402_cgraph.png | Bin 17853 -> 0 bytes
...a21ca98ea484845f3a7094fcc782814_cgraph.md5 | 1 -
...a21ca98ea484845f3a7094fcc782814_cgraph.png | Bin 38211 -> 0 bytes
...23395c46c6ba3e61646128d392d586b_cgraph.md5 | 1 -
...23395c46c6ba3e61646128d392d586b_cgraph.png | Bin 17556 -> 0 bytes
...3395c46c6ba3e61646128d392d586b_icgraph.md5 | 1 -
...63b639a5a6a59e780677f9849122b1f_cgraph.map | 4 +
...63b639a5a6a59e780677f9849122b1f_cgraph.md5 | 1 +
...63b639a5a6a59e780677f9849122b1f_cgraph.png | Bin 0 -> 11617 bytes
...97958179867ac2592eebd95711cf822_cgraph.map | 7 +-
...97958179867ac2592eebd95711cf822_cgraph.md5 | 1 +
...97958179867ac2592eebd95711cf822_cgraph.png | Bin 0 -> 23319 bytes
...7958179867ac2592eebd95711cf822_icgraph.map | 2 +-
...7958179867ac2592eebd95711cf822_icgraph.md5 | 1 +
...7958179867ac2592eebd95711cf822_icgraph.png | Bin
...e952092abaede9670adeaf6114d7d73_cgraph.map | 13 +-
...e952092abaede9670adeaf6114d7d73_cgraph.md5 | 2 +-
...e952092abaede9670adeaf6114d7d73_cgraph.png | Bin 45686 -> 46294 bytes
...ee48c4e5681a5003e8b626bfbbc2ef8_cgraph.map | 6 +-
...ee48c4e5681a5003e8b626bfbbc2ef8_cgraph.md5 | 1 +
...ee48c4e5681a5003e8b626bfbbc2ef8_cgraph.png | Bin 0 -> 17564 bytes
...sitory_1_1_repository_manager-members.html | 2 +-
...1_1_repository_1_1_repository_manager.html | 61 +-
...7aa1886c83c4ddb306ad33074f3a365_cgraph.md5 | 1 -
...7aa1886c83c4ddb306ad33074f3a365_cgraph.png | Bin 93800 -> 0 bytes
...40bff5e7feecd1e71018b1d6fab7bc_icgraph.map | 2 +-
...40bff5e7feecd1e71018b1d6fab7bc_icgraph.md5 | 2 +-
...d9235dfb77b745164af1553b922573d_cgraph.map | 19 +-
...d9235dfb77b745164af1553b922573d_cgraph.md5 | 1 +
...d9235dfb77b745164af1553b922573d_cgraph.png | Bin 0 -> 96717 bytes
...ository_1_1_repository_update_service.html | 982 ++++-----
...52e0821327fb59aa750db441622df34_cgraph.map | 8 +-
...52e0821327fb59aa750db441622df34_cgraph.md5 | 2 +-
...52e0821327fb59aa750db441622df34_cgraph.png | Bin 36135 -> 32935 bytes
...11d4f50183fc2f990b464da1fd0b240_cgraph.map | 15 +-
...11d4f50183fc2f990b464da1fd0b240_cgraph.md5 | 2 +-
...11d4f50183fc2f990b464da1fd0b240_cgraph.png | Bin 47869 -> 51941 bytes
..._1_1_repository_1_1_test_merge_result.html | 2 +-
...ession_1_1_session_controller-members.html | 2 +-
...ts_1_1_session_1_1_session_controller.html | 20 +-
...nfiguration_1_1_general_configuration.html | 2 +-
...nfiguration_1_1_session_configuration.html | 2 +-
...1_1_controllers_1_1_engine_controller.html | 325 +--
..._1_1_fetch_options_extensions-members.html | 4 +-
...tensions_1_1_fetch_options_extensions.html | 49 +-
...e986ebc3ee757beadd72f98f99076c_icgraph.md5 | 1 -
...19e6ba4a3ccca999a74240886628b41_cgraph.md5 | 1 -
...b564fc1ab3f6caf84958bc85d5236a_icgraph.map | 2 +-
...b564fc1ab3f6caf84958bc85d5236a_icgraph.md5 | 1 +
...b564fc1ab3f6caf84958bc85d5236a_icgraph.png | Bin
...e0e1a7712aa907faf658940322b8478_cgraph.map | 2 +-
...e0e1a7712aa907faf658940322b8478_cgraph.md5 | 1 +
...e0e1a7712aa907faf658940322b8478_cgraph.png | Bin
..._host_1_1_i_o_1_1_default_i_o_manager.html | 4 +-
...obs_1_1_job_progress_reporter-members.html | 12 +-
...st_1_1_jobs_1_1_job_progress_reporter.html | 594 ++++--
...1_1_job_progress_reporter__coll__graph.map | 13 +-
...1_1_job_progress_reporter__coll__graph.md5 | 2 +-
...1_1_job_progress_reporter__coll__graph.png | Bin 29853 -> 38056 bytes
..._job_progress_reporter__inherit__graph.map | 4 +
..._job_progress_reporter__inherit__graph.md5 | 1 +
..._job_progress_reporter__inherit__graph.png | Bin 0 -> 6698 bytes
...2254a185da6e76e7fcd2d72a8032970_cgraph.map | 4 +-
...2254a185da6e76e7fcd2d72a8032970_cgraph.md5 | 2 +-
...2254a185da6e76e7fcd2d72a8032970_cgraph.png | Bin 10028 -> 11568 bytes
...254a185da6e76e7fcd2d72a8032970_icgraph.map | 39 +-
...254a185da6e76e7fcd2d72a8032970_icgraph.md5 | 2 +-
...254a185da6e76e7fcd2d72a8032970_icgraph.png | Bin 141843 -> 187474 bytes
...e9230c68a7eff4ddf044bb8c07836cc_cgraph.map | 4 +
...e9230c68a7eff4ddf044bb8c07836cc_cgraph.md5 | 1 +
...e9230c68a7eff4ddf044bb8c07836cc_cgraph.png | Bin 0 -> 9209 bytes
...5af832a3c5781b796441234fc0e5fe_icgraph.map | 25 +
...5af832a3c5781b796441234fc0e5fe_icgraph.md5 | 1 +
...5af832a3c5781b796441234fc0e5fe_icgraph.png | Bin 0 -> 196024 bytes
...36a80d9d56a20711468d9b8e27e3c1_icgraph.map | 48 +-
...36a80d9d56a20711468d9b8e27e3c1_icgraph.md5 | 2 +-
...36a80d9d56a20711468d9b8e27e3c1_icgraph.png | Bin 239861 -> 151935 bytes
...ver_1_1_host_1_1_jobs_1_1_job_service.html | 188 +-
...1_security_1_1_authentication_context.html | 2 +-
...1_1_host_1_1_system_1_1_dotnet_helper.html | 2 +-
...1_host_1_1_system_1_1_process-members.html | 2 +-
...erver_1_1_host_1_1_system_1_1_process.html | 434 ++--
..._host_1_1_system_1_1_process_executor.html | 2 +-
..._host_1_1_utils_1_1_reference_counter.html | 6 +-
...603269a01198b149ea66eaba0dd014_icgraph.map | 4 +-
...603269a01198b149ea66eaba0dd014_icgraph.md5 | 2 +-
...tils_1_1_reference_counting_container.html | 10 +-
...512890f504f0e2fa9593bbd5ab851f_icgraph.map | 4 +-
...512890f504f0e2fa9593bbd5ab851f_icgraph.md5 | 2 +-
..._1_1_utils_1_1_semaphore_slim_context.html | 6 +-
...773d588476671bbe480f096d839c91_icgraph.map | 4 +-
...773d588476671bbe480f096d839c91_icgraph.md5 | 2 +-
functions.html | 8 +-
functions_c.html | 13 +-
functions_d.html | 4 +-
functions_f.html | 2 +-
functions_func.html | 2 +-
functions_func_c.html | 6 +-
functions_func_d.html | 6 +-
functions_func_f.html | 2 +-
functions_func_g.html | 2 +-
functions_func_h.html | 2 +-
functions_func_i.html | 2 +-
functions_func_j.html | 2 +-
functions_func_r.html | 2 +-
functions_func_t.html | 2 +-
functions_func_u.html | 2 +-
functions_g.html | 6 +-
functions_h.html | 9 +-
functions_i.html | 6 +-
functions_j.html | 4 +-
functions_m.html | 2 +-
functions_o.html | 2 +-
functions_p.html | 5 +-
functions_prop_m.html | 2 +-
functions_r.html | 2 +-
functions_s.html | 10 +-
functions_t.html | 5 +-
functions_u.html | 6 +-
functions_vars_p.html | 1 +
functions_vars_s.html | 1 +
hierarchy.html | 550 ++---
index.html | 2 +-
inherit_graph_156.map | 4 +-
inherit_graph_156.md5 | 2 +-
inherit_graph_156.png | Bin 4344 -> 17647 bytes
inherit_graph_157.map | 7 +-
inherit_graph_157.md5 | 2 +-
inherit_graph_157.png | Bin 17647 -> 18886 bytes
inherit_graph_158.map | 11 +-
inherit_graph_158.md5 | 2 +-
inherit_graph_158.png | Bin 18886 -> 36946 bytes
inherit_graph_159.map | 12 +-
inherit_graph_159.md5 | 2 +-
inherit_graph_159.png | Bin 36946 -> 29445 bytes
inherit_graph_160.map | 6 +-
inherit_graph_160.md5 | 2 +-
inherit_graph_160.png | Bin 29445 -> 5198 bytes
inherit_graph_161.map | 2 +-
inherit_graph_161.md5 | 2 +-
inherit_graph_161.png | Bin 5198 -> 4159 bytes
inherit_graph_162.map | 2 +-
inherit_graph_162.md5 | 2 +-
inherit_graph_162.png | Bin 4159 -> 4525 bytes
inherit_graph_163.map | 2 +-
inherit_graph_163.md5 | 2 +-
inherit_graph_163.png | Bin 4525 -> 2720 bytes
inherit_graph_164.map | 3 +-
inherit_graph_164.md5 | 2 +-
inherit_graph_164.png | Bin 2720 -> 9645 bytes
inherit_graph_165.map | 5 +-
inherit_graph_165.md5 | 2 +-
inherit_graph_165.png | Bin 9645 -> 16662 bytes
inherit_graph_166.map | 5 +-
inherit_graph_166.md5 | 2 +-
inherit_graph_166.png | Bin 16662 -> 8408 bytes
inherit_graph_167.map | 4 +-
inherit_graph_167.md5 | 2 +-
inherit_graph_167.png | Bin 8408 -> 9215 bytes
inherit_graph_168.map | 9 +-
inherit_graph_168.md5 | 2 +-
inherit_graph_168.png | Bin 9215 -> 40800 bytes
inherit_graph_169.map | 8 +-
inherit_graph_169.md5 | 2 +-
inherit_graph_169.png | Bin 40800 -> 4088 bytes
inherit_graph_170.map | 2 +-
inherit_graph_170.md5 | 2 +-
inherit_graph_170.png | Bin 4088 -> 3479 bytes
inherit_graph_171.map | 2 +-
inherit_graph_171.md5 | 2 +-
inherit_graph_171.png | Bin 3479 -> 4179 bytes
inherit_graph_172.map | 3 +-
inherit_graph_172.md5 | 2 +-
inherit_graph_172.png | Bin 4179 -> 5076 bytes
inherit_graph_173.map | 4 +-
inherit_graph_173.md5 | 2 +-
inherit_graph_173.png | Bin 5076 -> 6278 bytes
inherit_graph_174.map | 3 +-
inherit_graph_174.md5 | 2 +-
inherit_graph_174.png | Bin 6278 -> 4420 bytes
inherit_graph_175.map | 2 +-
inherit_graph_175.md5 | 2 +-
inherit_graph_175.png | Bin 4420 -> 5149 bytes
inherit_graph_176.map | 2 +-
inherit_graph_176.md5 | 2 +-
inherit_graph_176.png | Bin 5149 -> 4878 bytes
inherit_graph_177.map | 2 +-
inherit_graph_177.md5 | 2 +-
inherit_graph_177.png | Bin 4878 -> 4909 bytes
inherit_graph_178.map | 2 +-
inherit_graph_178.md5 | 2 +-
inherit_graph_178.png | Bin 4909 -> 3793 bytes
inherit_graph_179.map | 3 +-
inherit_graph_179.md5 | 2 +-
inherit_graph_179.png | Bin 3793 -> 9803 bytes
inherit_graph_180.map | 4 +-
inherit_graph_180.md5 | 2 +-
inherit_graph_180.png | Bin 9803 -> 9013 bytes
inherit_graph_181.map | 4 +-
inherit_graph_181.md5 | 2 +-
inherit_graph_181.png | Bin 9013 -> 8304 bytes
inherit_graph_182.map | 4 +-
inherit_graph_182.md5 | 2 +-
inherit_graph_182.png | Bin 8304 -> 8145 bytes
inherit_graph_183.map | 3 +-
inherit_graph_183.md5 | 2 +-
inherit_graph_183.png | Bin 8145 -> 4294 bytes
inherit_graph_184.map | 2 +-
inherit_graph_184.md5 | 2 +-
inherit_graph_184.png | Bin 4294 -> 4658 bytes
inherit_graph_185.map | 2 +-
inherit_graph_185.md5 | 2 +-
inherit_graph_185.png | Bin 4658 -> 4246 bytes
inherit_graph_186.map | 2 +-
inherit_graph_186.md5 | 2 +-
inherit_graph_186.png | Bin 4246 -> 4589 bytes
inherit_graph_187.map | 4 +-
inherit_graph_187.md5 | 2 +-
inherit_graph_187.png | Bin 4589 -> 8539 bytes
inherit_graph_188.map | 5 +-
inherit_graph_188.md5 | 2 +-
inherit_graph_188.png | Bin 8539 -> 9218 bytes
inherit_graph_189.map | 4 +-
inherit_graph_189.md5 | 2 +-
inherit_graph_189.png | Bin 9218 -> 8540 bytes
inherit_graph_190.map | 4 +-
inherit_graph_190.md5 | 2 +-
inherit_graph_190.png | Bin 8540 -> 8046 bytes
inherit_graph_191.map | 3 +-
inherit_graph_191.md5 | 2 +-
inherit_graph_191.png | Bin 8046 -> 6478 bytes
inherit_graph_192.map | 2 +-
inherit_graph_192.md5 | 2 +-
inherit_graph_192.png | Bin 6478 -> 4408 bytes
inherit_graph_193.map | 3 +-
inherit_graph_193.md5 | 2 +-
inherit_graph_193.png | Bin 4408 -> 10192 bytes
inherit_graph_194.map | 3 +-
inherit_graph_194.md5 | 2 +-
inherit_graph_194.png | Bin 10192 -> 9112 bytes
inherit_graph_195.map | 2 +-
inherit_graph_195.md5 | 2 +-
inherit_graph_195.png | Bin 9112 -> 7322 bytes
inherit_graph_196.map | 5 +-
inherit_graph_196.md5 | 2 +-
inherit_graph_196.png | Bin 7322 -> 26197 bytes
inherit_graph_197.map | 6 +-
inherit_graph_197.md5 | 2 +-
inherit_graph_197.png | Bin 26197 -> 5272 bytes
inherit_graph_198.map | 4 +-
inherit_graph_198.md5 | 2 +-
inherit_graph_198.png | Bin 5272 -> 5688 bytes
inherit_graph_199.map | 4 -
inherit_graph_199.md5 | 1 -
inherit_graph_199.png | Bin 5688 -> 0 bytes
inherit_graph_2.map | 323 +--
inherit_graph_2.md5 | 2 +-
inherit_graph_2.png | Bin 1328458 -> 1362871 bytes
inherits.html | 396 ++--
..._1_1_engine_1_1_i_engine_installation.html | 2 +-
...engine_1_1_i_engine_installation_data.html | 8 +-
...12d13d543fde6cbb64c9085f9370b7_icgraph.map | 6 +-
...12d13d543fde6cbb64c9085f9370b7_icgraph.md5 | 2 +-
...engine_1_1_i_engine_installer-members.html | 2 +-
...nts_1_1_engine_1_1_i_engine_installer.html | 44 +-
...ac565523ae59fd18a8ad6eb1dfb616_icgraph.map | 4 +-
...ac565523ae59fd18a8ad6eb1dfb616_icgraph.md5 | 2 +-
...41dfb27438fbd4d70462cd137bcb42_icgraph.map | 6 +-
...41dfb27438fbd4d70462cd137bcb42_icgraph.md5 | 1 +
...41dfb27438fbd4d70462cd137bcb42_icgraph.png | Bin
...100637a7abd23c97157b7a4deb4736_icgraph.md5 | 1 -
...982c374c0d5d56779125fce7c933be_icgraph.map | 6 +-
...982c374c0d5d56779125fce7c933be_icgraph.md5 | 2 +-
...1_engine_1_1_i_engine_manager-members.html | 2 +-
...nents_1_1_engine_1_1_i_engine_manager.html | 16 +-
...nents_1_1_events_1_1_i_event_consumer.html | 10 +-
...4f82eb43566dabd77e37191b4e3d37_icgraph.map | 8 +-
...4f82eb43566dabd77e37191b4e3d37_icgraph.md5 | 2 +-
...st_1_1_components_1_1_i_instance_core.html | 2 +-
...repository_1_1_i_credentials_provider.html | 10 +-
...b24a1c8a29d90d03abdb627eb24635_icgraph.map | 4 +-
...b24a1c8a29d90d03abdb627eb24635_icgraph.md5 | 2 +-
...dfc1a59c4a3f30bc795c43b3c6fa42_icgraph.map | 2 +-
...dfc1a59c4a3f30bc795c43b3c6fa42_icgraph.md5 | 2 +-
..._1_repository_1_1_i_lib_git2_commands.html | 4 +-
...60f1ded05e762c347ffc43c6d71700_icgraph.map | 2 +-
...60f1ded05e762c347ffc43c6d71700_icgraph.md5 | 2 +-
...ory_1_1_i_lib_git2_repository_factory.html | 4 +-
...6ed81450e50013e2ec1bae65e5f8cb_icgraph.map | 2 +-
...6ed81450e50013e2ec1bae65e5f8cb_icgraph.md5 | 2 +-
...a092f96f2408453c2a1b5d5b0a4f30_icgraph.map | 2 +-
...a092f96f2408453c2a1b5d5b0a4f30_icgraph.md5 | 2 +-
...1_repository_1_1_i_repository-members.html | 4 +-
...nents_1_1_repository_1_1_i_repository.html | 65 +-
...e15b3dd9fe05cabc167ad5e6b3cdcd_icgraph.map | 7 +-
...e15b3dd9fe05cabc167ad5e6b3cdcd_icgraph.md5 | 2 +-
...e15b3dd9fe05cabc167ad5e6b3cdcd_icgraph.png | Bin 22663 -> 30211 bytes
...47fd2dbfe8a1f51ea38ca78259eabd_icgraph.md5 | 1 -
...47fd2dbfe8a1f51ea38ca78259eabd_icgraph.png | Bin 13564 -> 0 bytes
...a99bf9d0bc659cc3989ba4318cdfcc_icgraph.map | 5 +-
...a99bf9d0bc659cc3989ba4318cdfcc_icgraph.md5 | 1 +
...a99bf9d0bc659cc3989ba4318cdfcc_icgraph.png | Bin 0 -> 20730 bytes
...a5d05808bd1a5314dc619c6c2a6428_icgraph.map | 4 +
...a5d05808bd1a5314dc619c6c2a6428_icgraph.md5 | 1 +
...a5d05808bd1a5314dc619c6c2a6428_icgraph.png | Bin 0 -> 11212 bytes
...tory_1_1_i_repository_manager-members.html | 2 +-
...1_repository_1_1_i_repository_manager.html | 24 +-
...642bc09ffdcb87116758727bcbd813_icgraph.md5 | 1 -
...06fb30c8098ae3520612c13fcbac0c_icgraph.map | 2 +-
...06fb30c8098ae3520612c13fcbac0c_icgraph.md5 | 1 +
...06fb30c8098ae3520612c13fcbac0c_icgraph.png | Bin
...58009c7d92a55634a7ddd80ca60b1b_icgraph.map | 2 +-
...58009c7d92a55634a7ddd80ca60b1b_icgraph.md5 | 2 +-
...sion_1_1_i_session_controller-members.html | 2 +-
..._1_1_session_1_1_i_session_controller.html | 6 +-
...tabase_1_1_i_database_context_factory.html | 2 +-
..._1_host_1_1_i_o_1_1_i_file_downloader.html | 2 +-
...327aceb0182d4678f593c3385131de_icgraph.map | 2 +-
...327aceb0182d4678f593c3385131de_icgraph.md5 | 2 +-
...er_1_1_host_1_1_i_o_1_1_i_i_o_manager.html | 66 +-
...a442b5dff16f5e7a730ec354e81d78_icgraph.map | 8 +-
...a442b5dff16f5e7a730ec354e81d78_icgraph.md5 | 2 +-
...6f4eb5c679683b7e519847a6c3574e_icgraph.map | 6 +-
...6f4eb5c679683b7e519847a6c3574e_icgraph.md5 | 2 +-
...aa1b9dbeb6af3744e568095c4376e7_icgraph.map | 6 +-
...aa1b9dbeb6af3744e568095c4376e7_icgraph.md5 | 2 +-
...eb8b83ea3f4b13a183b6ac55b35a70_icgraph.map | 6 +-
...eb8b83ea3f4b13a183b6ac55b35a70_icgraph.md5 | 2 +-
...e0dda4b7fbad4c77f48ba3b2681dc7_icgraph.map | 8 +-
...e0dda4b7fbad4c77f48ba3b2681dc7_icgraph.md5 | 2 +-
...e08438da658a3c0afddbb7960e4faa_icgraph.map | 2 +-
...e08438da658a3c0afddbb7960e4faa_icgraph.md5 | 2 +-
...host_1_1_i_o_1_1_i_post_write_handler.html | 4 +-
...host_1_1_system_1_1_i_process-members.html | 2 +-
...ver_1_1_host_1_1_system_1_1_i_process.html | 6 +-
...1_1_system_1_1_i_process_base-members.html | 2 +-
..._1_host_1_1_system_1_1_i_process_base.html | 14 +-
...ost_1_1_system_1_1_i_process_features.html | 8 +-
search/all_1.js | 242 +--
search/all_10.js | 345 ++-
search/all_12.js | 113 +-
search/all_13.js | 265 +--
search/all_14.js | 114 +-
search/all_15.js | 109 +-
search/all_2.js | 59 +-
search/all_3.js | 341 +--
search/all_4.js | 461 ++--
search/all_6.js | 81 +-
search/all_7.js | 10 +-
search/all_8.js | 43 +-
search/all_9.js | 749 +++----
search/all_a.js | 24 +-
search/all_c.js | 8 +-
search/all_d.js | 2 +-
search/all_e.js | 4 +-
search/all_f.js | 127 +-
search/functions_0.js | 2 +-
search/functions_11.js | 2 +-
search/functions_13.js | 2 +-
search/functions_14.js | 2 +-
search/functions_2.js | 6 +-
search/functions_3.js | 18 +-
search/functions_5.js | 2 +-
search/functions_6.js | 2 +-
search/functions_7.js | 2 +-
search/functions_8.js | 2 +-
search/functions_9.js | 2 +-
search/properties_c.js | 2 +-
search/variables_12.js | 111 +-
search/variables_14.js | 4 +-
search/variables_2.js | 4 +-
search/variables_8.js | 27 +-
search/variables_f.js | 5 +-
513 files changed, 9526 insertions(+), 8745 deletions(-)
rename class_tgstation_1_1_server_1_1_host_1_1_components_1_1_engine_1_1_byond_installer_base_a6bd81dbdb1f24aaf80bba10224b4773f_cgraph.map => class_tgstation_1_1_server_1_1_host_1_1_components_1_1_engine_1_1_byond_installer_base_adf1546f8ef11d749bc75509ce63bdae5_cgraph.map (100%)
rename class_tgstation_1_1_server_1_1_host_1_1_components_1_1_engine_1_1_byond_installer_base_a6bd81dbdb1f24aaf80bba10224b4773f_cgraph.md5 => class_tgstation_1_1_server_1_1_host_1_1_components_1_1_engine_1_1_byond_installer_base_adf1546f8ef11d749bc75509ce63bdae5_cgraph.md5 (100%)
rename class_tgstation_1_1_server_1_1_host_1_1_components_1_1_engine_1_1_byond_installer_base_a6bd81dbdb1f24aaf80bba10224b4773f_cgraph.png => class_tgstation_1_1_server_1_1_host_1_1_components_1_1_engine_1_1_byond_installer_base_adf1546f8ef11d749bc75509ce63bdae5_cgraph.png (100%)
delete mode 100644 class_tgstation_1_1_server_1_1_host_1_1_components_1_1_engine_1_1_engine_manager_a0303d46d250191f69bb5251c89ca301d_cgraph.md5
delete mode 100644 class_tgstation_1_1_server_1_1_host_1_1_components_1_1_engine_1_1_engine_manager_a0303d46d250191f69bb5251c89ca301d_cgraph.png
delete mode 100644 class_tgstation_1_1_server_1_1_host_1_1_components_1_1_engine_1_1_engine_manager_a0303d46d250191f69bb5251c89ca301d_icgraph.md5
delete mode 100644 class_tgstation_1_1_server_1_1_host_1_1_components_1_1_engine_1_1_engine_manager_a3d2a758adff2c72db49e822c8f6ceccf_cgraph.md5
delete mode 100644 class_tgstation_1_1_server_1_1_host_1_1_components_1_1_engine_1_1_engine_manager_a3d2a758adff2c72db49e822c8f6ceccf_cgraph.png
delete mode 100644 class_tgstation_1_1_server_1_1_host_1_1_components_1_1_engine_1_1_engine_manager_a3d2a758adff2c72db49e822c8f6ceccf_icgraph.md5
rename class_tgstation_1_1_server_1_1_host_1_1_components_1_1_engine_1_1_engine_manager_a3d2a758adff2c72db49e822c8f6ceccf_cgraph.map => class_tgstation_1_1_server_1_1_host_1_1_components_1_1_engine_1_1_engine_manager_a4d0593064aa1c11835cfa1ab2823ec34_cgraph.map (69%)
create mode 100644 class_tgstation_1_1_server_1_1_host_1_1_components_1_1_engine_1_1_engine_manager_a4d0593064aa1c11835cfa1ab2823ec34_cgraph.md5
create mode 100644 class_tgstation_1_1_server_1_1_host_1_1_components_1_1_engine_1_1_engine_manager_a4d0593064aa1c11835cfa1ab2823ec34_cgraph.png
rename class_tgstation_1_1_server_1_1_host_1_1_components_1_1_engine_1_1_engine_manager_a3d2a758adff2c72db49e822c8f6ceccf_icgraph.map => class_tgstation_1_1_server_1_1_host_1_1_components_1_1_engine_1_1_engine_manager_a4d0593064aa1c11835cfa1ab2823ec34_icgraph.map (85%)
create mode 100644 class_tgstation_1_1_server_1_1_host_1_1_components_1_1_engine_1_1_engine_manager_a4d0593064aa1c11835cfa1ab2823ec34_icgraph.md5
rename class_tgstation_1_1_server_1_1_host_1_1_components_1_1_engine_1_1_engine_manager_a3d2a758adff2c72db49e822c8f6ceccf_icgraph.png => class_tgstation_1_1_server_1_1_host_1_1_components_1_1_engine_1_1_engine_manager_a4d0593064aa1c11835cfa1ab2823ec34_icgraph.png (100%)
rename class_tgstation_1_1_server_1_1_host_1_1_components_1_1_engine_1_1_engine_manager_ad2cedaccbf100b9dcf3922a9443f8f19_cgraph.map => class_tgstation_1_1_server_1_1_host_1_1_components_1_1_engine_1_1_engine_manager_aa9978534a863e31d7d58e51c86b5886c_cgraph.map (64%)
create mode 100644 class_tgstation_1_1_server_1_1_host_1_1_components_1_1_engine_1_1_engine_manager_aa9978534a863e31d7d58e51c86b5886c_cgraph.md5
create mode 100644 class_tgstation_1_1_server_1_1_host_1_1_components_1_1_engine_1_1_engine_manager_aa9978534a863e31d7d58e51c86b5886c_cgraph.png
rename class_tgstation_1_1_server_1_1_host_1_1_components_1_1_engine_1_1_engine_manager_a0303d46d250191f69bb5251c89ca301d_cgraph.map => class_tgstation_1_1_server_1_1_host_1_1_components_1_1_engine_1_1_engine_manager_ac06e9789785574f8d657a29fdd183795_cgraph.map (53%)
create mode 100644 class_tgstation_1_1_server_1_1_host_1_1_components_1_1_engine_1_1_engine_manager_ac06e9789785574f8d657a29fdd183795_cgraph.md5
create mode 100644 class_tgstation_1_1_server_1_1_host_1_1_components_1_1_engine_1_1_engine_manager_ac06e9789785574f8d657a29fdd183795_cgraph.png
rename class_tgstation_1_1_server_1_1_host_1_1_components_1_1_engine_1_1_engine_manager_a0303d46d250191f69bb5251c89ca301d_icgraph.map => class_tgstation_1_1_server_1_1_host_1_1_components_1_1_engine_1_1_engine_manager_ac06e9789785574f8d657a29fdd183795_icgraph.map (77%)
create mode 100644 class_tgstation_1_1_server_1_1_host_1_1_components_1_1_engine_1_1_engine_manager_ac06e9789785574f8d657a29fdd183795_icgraph.md5
rename class_tgstation_1_1_server_1_1_host_1_1_components_1_1_engine_1_1_engine_manager_a0303d46d250191f69bb5251c89ca301d_icgraph.png => class_tgstation_1_1_server_1_1_host_1_1_components_1_1_engine_1_1_engine_manager_ac06e9789785574f8d657a29fdd183795_icgraph.png (100%)
delete mode 100644 class_tgstation_1_1_server_1_1_host_1_1_components_1_1_engine_1_1_engine_manager_ad2cedaccbf100b9dcf3922a9443f8f19_cgraph.md5
delete mode 100644 class_tgstation_1_1_server_1_1_host_1_1_components_1_1_engine_1_1_engine_manager_ad2cedaccbf100b9dcf3922a9443f8f19_cgraph.png
delete mode 100644 class_tgstation_1_1_server_1_1_host_1_1_components_1_1_engine_1_1_open_dream_installer_a6df90470a5fd85e870cf0d959181e7d8_cgraph.map
delete mode 100644 class_tgstation_1_1_server_1_1_host_1_1_components_1_1_engine_1_1_open_dream_installer_a6df90470a5fd85e870cf0d959181e7d8_cgraph.md5
delete mode 100644 class_tgstation_1_1_server_1_1_host_1_1_components_1_1_engine_1_1_open_dream_installer_a6df90470a5fd85e870cf0d959181e7d8_cgraph.png
create mode 100644 class_tgstation_1_1_server_1_1_host_1_1_components_1_1_engine_1_1_open_dream_installer_a80f999e3876ac5a4c9c92684df68ec12_cgraph.map
create mode 100644 class_tgstation_1_1_server_1_1_host_1_1_components_1_1_engine_1_1_open_dream_installer_a80f999e3876ac5a4c9c92684df68ec12_cgraph.md5
create mode 100644 class_tgstation_1_1_server_1_1_host_1_1_components_1_1_engine_1_1_open_dream_installer_a80f999e3876ac5a4c9c92684df68ec12_cgraph.png
rename class_tgstation_1_1_server_1_1_host_1_1_components_1_1_repository_1_1_repository_aaa21ca98ea484845f3a7094fcc782814_cgraph.map => class_tgstation_1_1_server_1_1_host_1_1_components_1_1_repository_1_1_repository_a244a180597fe2bde35fd85e43d0dd59d_cgraph.map (56%)
create mode 100644 class_tgstation_1_1_server_1_1_host_1_1_components_1_1_repository_1_1_repository_a244a180597fe2bde35fd85e43d0dd59d_cgraph.md5
create mode 100644 class_tgstation_1_1_server_1_1_host_1_1_components_1_1_repository_1_1_repository_a244a180597fe2bde35fd85e43d0dd59d_cgraph.png
delete mode 100644 class_tgstation_1_1_server_1_1_host_1_1_components_1_1_repository_1_1_repository_a328bfe68ce247974125194b074003c1b_cgraph.md5
delete mode 100644 class_tgstation_1_1_server_1_1_host_1_1_components_1_1_repository_1_1_repository_a328bfe68ce247974125194b074003c1b_cgraph.png
delete mode 100644 class_tgstation_1_1_server_1_1_host_1_1_components_1_1_repository_1_1_repository_a328bfe68ce247974125194b074003c1b_icgraph.md5
create mode 100644 class_tgstation_1_1_server_1_1_host_1_1_components_1_1_repository_1_1_repository_a632cb5984c52022a23716cbabb1e4a40_cgraph.map
create mode 100644 class_tgstation_1_1_server_1_1_host_1_1_components_1_1_repository_1_1_repository_a632cb5984c52022a23716cbabb1e4a40_cgraph.md5
create mode 100644 class_tgstation_1_1_server_1_1_host_1_1_components_1_1_repository_1_1_repository_a632cb5984c52022a23716cbabb1e4a40_cgraph.png
rename class_tgstation_1_1_server_1_1_host_1_1_components_1_1_repository_1_1_repository_a328bfe68ce247974125194b074003c1b_cgraph.map => class_tgstation_1_1_server_1_1_host_1_1_components_1_1_repository_1_1_repository_a7fefc02e22b5c22787b498a045107740_cgraph.map (54%)
create mode 100644 class_tgstation_1_1_server_1_1_host_1_1_components_1_1_repository_1_1_repository_a7fefc02e22b5c22787b498a045107740_cgraph.md5
create mode 100644 class_tgstation_1_1_server_1_1_host_1_1_components_1_1_repository_1_1_repository_a7fefc02e22b5c22787b498a045107740_cgraph.png
rename class_tgstation_1_1_server_1_1_host_1_1_components_1_1_repository_1_1_repository_a328bfe68ce247974125194b074003c1b_icgraph.map => class_tgstation_1_1_server_1_1_host_1_1_components_1_1_repository_1_1_repository_a7fefc02e22b5c22787b498a045107740_icgraph.map (89%)
create mode 100644 class_tgstation_1_1_server_1_1_host_1_1_components_1_1_repository_1_1_repository_a7fefc02e22b5c22787b498a045107740_icgraph.md5
rename class_tgstation_1_1_server_1_1_host_1_1_components_1_1_repository_1_1_repository_a328bfe68ce247974125194b074003c1b_icgraph.png => class_tgstation_1_1_server_1_1_host_1_1_components_1_1_repository_1_1_repository_a7fefc02e22b5c22787b498a045107740_icgraph.png (100%)
delete mode 100644 class_tgstation_1_1_server_1_1_host_1_1_components_1_1_repository_1_1_repository_a95068b3afe9edb4dc3a0474422f650aa_cgraph.map
delete mode 100644 class_tgstation_1_1_server_1_1_host_1_1_components_1_1_repository_1_1_repository_a95068b3afe9edb4dc3a0474422f650aa_cgraph.md5
delete mode 100644 class_tgstation_1_1_server_1_1_host_1_1_components_1_1_repository_1_1_repository_a95068b3afe9edb4dc3a0474422f650aa_cgraph.png
delete mode 100644 class_tgstation_1_1_server_1_1_host_1_1_components_1_1_repository_1_1_repository_aa52e74ecb862a3cb6c26b89970ccc402_cgraph.md5
delete mode 100644 class_tgstation_1_1_server_1_1_host_1_1_components_1_1_repository_1_1_repository_aa52e74ecb862a3cb6c26b89970ccc402_cgraph.png
delete mode 100644 class_tgstation_1_1_server_1_1_host_1_1_components_1_1_repository_1_1_repository_aaa21ca98ea484845f3a7094fcc782814_cgraph.md5
delete mode 100644 class_tgstation_1_1_server_1_1_host_1_1_components_1_1_repository_1_1_repository_aaa21ca98ea484845f3a7094fcc782814_cgraph.png
delete mode 100644 class_tgstation_1_1_server_1_1_host_1_1_components_1_1_repository_1_1_repository_ad23395c46c6ba3e61646128d392d586b_cgraph.md5
delete mode 100644 class_tgstation_1_1_server_1_1_host_1_1_components_1_1_repository_1_1_repository_ad23395c46c6ba3e61646128d392d586b_cgraph.png
delete mode 100644 class_tgstation_1_1_server_1_1_host_1_1_components_1_1_repository_1_1_repository_ad23395c46c6ba3e61646128d392d586b_icgraph.md5
create mode 100644 class_tgstation_1_1_server_1_1_host_1_1_components_1_1_repository_1_1_repository_af63b639a5a6a59e780677f9849122b1f_cgraph.map
create mode 100644 class_tgstation_1_1_server_1_1_host_1_1_components_1_1_repository_1_1_repository_af63b639a5a6a59e780677f9849122b1f_cgraph.md5
create mode 100644 class_tgstation_1_1_server_1_1_host_1_1_components_1_1_repository_1_1_repository_af63b639a5a6a59e780677f9849122b1f_cgraph.png
rename class_tgstation_1_1_server_1_1_host_1_1_components_1_1_repository_1_1_repository_ad23395c46c6ba3e61646128d392d586b_cgraph.map => class_tgstation_1_1_server_1_1_host_1_1_components_1_1_repository_1_1_repository_af97958179867ac2592eebd95711cf822_cgraph.map (54%)
create mode 100644 class_tgstation_1_1_server_1_1_host_1_1_components_1_1_repository_1_1_repository_af97958179867ac2592eebd95711cf822_cgraph.md5
create mode 100644 class_tgstation_1_1_server_1_1_host_1_1_components_1_1_repository_1_1_repository_af97958179867ac2592eebd95711cf822_cgraph.png
rename class_tgstation_1_1_server_1_1_host_1_1_components_1_1_repository_1_1_repository_ad23395c46c6ba3e61646128d392d586b_icgraph.map => class_tgstation_1_1_server_1_1_host_1_1_components_1_1_repository_1_1_repository_af97958179867ac2592eebd95711cf822_icgraph.map (76%)
create mode 100644 class_tgstation_1_1_server_1_1_host_1_1_components_1_1_repository_1_1_repository_af97958179867ac2592eebd95711cf822_icgraph.md5
rename class_tgstation_1_1_server_1_1_host_1_1_components_1_1_repository_1_1_repository_ad23395c46c6ba3e61646128d392d586b_icgraph.png => class_tgstation_1_1_server_1_1_host_1_1_components_1_1_repository_1_1_repository_af97958179867ac2592eebd95711cf822_icgraph.png (100%)
rename class_tgstation_1_1_server_1_1_host_1_1_components_1_1_repository_1_1_repository_aa52e74ecb862a3cb6c26b89970ccc402_cgraph.map => class_tgstation_1_1_server_1_1_host_1_1_components_1_1_repository_1_1_repository_afee48c4e5681a5003e8b626bfbbc2ef8_cgraph.map (64%)
create mode 100644 class_tgstation_1_1_server_1_1_host_1_1_components_1_1_repository_1_1_repository_afee48c4e5681a5003e8b626bfbbc2ef8_cgraph.md5
create mode 100644 class_tgstation_1_1_server_1_1_host_1_1_components_1_1_repository_1_1_repository_afee48c4e5681a5003e8b626bfbbc2ef8_cgraph.png
delete mode 100644 class_tgstation_1_1_server_1_1_host_1_1_components_1_1_repository_1_1_repository_manager_a07aa1886c83c4ddb306ad33074f3a365_cgraph.md5
delete mode 100644 class_tgstation_1_1_server_1_1_host_1_1_components_1_1_repository_1_1_repository_manager_a07aa1886c83c4ddb306ad33074f3a365_cgraph.png
rename class_tgstation_1_1_server_1_1_host_1_1_components_1_1_repository_1_1_repository_manager_a07aa1886c83c4ddb306ad33074f3a365_cgraph.map => class_tgstation_1_1_server_1_1_host_1_1_components_1_1_repository_1_1_repository_manager_aad9235dfb77b745164af1553b922573d_cgraph.map (76%)
create mode 100644 class_tgstation_1_1_server_1_1_host_1_1_components_1_1_repository_1_1_repository_manager_aad9235dfb77b745164af1553b922573d_cgraph.md5
create mode 100644 class_tgstation_1_1_server_1_1_host_1_1_components_1_1_repository_1_1_repository_manager_aad9235dfb77b745164af1553b922573d_cgraph.png
delete mode 100644 class_tgstation_1_1_server_1_1_host_1_1_extensions_1_1_fetch_options_extensions_a15e986ebc3ee757beadd72f98f99076c_icgraph.md5
delete mode 100644 class_tgstation_1_1_server_1_1_host_1_1_extensions_1_1_fetch_options_extensions_a819e6ba4a3ccca999a74240886628b41_cgraph.md5
rename class_tgstation_1_1_server_1_1_host_1_1_extensions_1_1_fetch_options_extensions_a15e986ebc3ee757beadd72f98f99076c_icgraph.map => class_tgstation_1_1_server_1_1_host_1_1_extensions_1_1_fetch_options_extensions_ad2b564fc1ab3f6caf84958bc85d5236a_icgraph.map (78%)
create mode 100644 class_tgstation_1_1_server_1_1_host_1_1_extensions_1_1_fetch_options_extensions_ad2b564fc1ab3f6caf84958bc85d5236a_icgraph.md5
rename class_tgstation_1_1_server_1_1_host_1_1_extensions_1_1_fetch_options_extensions_a15e986ebc3ee757beadd72f98f99076c_icgraph.png => class_tgstation_1_1_server_1_1_host_1_1_extensions_1_1_fetch_options_extensions_ad2b564fc1ab3f6caf84958bc85d5236a_icgraph.png (100%)
rename class_tgstation_1_1_server_1_1_host_1_1_extensions_1_1_fetch_options_extensions_a819e6ba4a3ccca999a74240886628b41_cgraph.map => class_tgstation_1_1_server_1_1_host_1_1_extensions_1_1_fetch_options_extensions_aee0e1a7712aa907faf658940322b8478_cgraph.map (83%)
create mode 100644 class_tgstation_1_1_server_1_1_host_1_1_extensions_1_1_fetch_options_extensions_aee0e1a7712aa907faf658940322b8478_cgraph.md5
rename class_tgstation_1_1_server_1_1_host_1_1_extensions_1_1_fetch_options_extensions_a819e6ba4a3ccca999a74240886628b41_cgraph.png => class_tgstation_1_1_server_1_1_host_1_1_extensions_1_1_fetch_options_extensions_aee0e1a7712aa907faf658940322b8478_cgraph.png (100%)
create mode 100644 class_tgstation_1_1_server_1_1_host_1_1_jobs_1_1_job_progress_reporter__inherit__graph.map
create mode 100644 class_tgstation_1_1_server_1_1_host_1_1_jobs_1_1_job_progress_reporter__inherit__graph.md5
create mode 100644 class_tgstation_1_1_server_1_1_host_1_1_jobs_1_1_job_progress_reporter__inherit__graph.png
create mode 100644 class_tgstation_1_1_server_1_1_host_1_1_jobs_1_1_job_progress_reporter_a3e9230c68a7eff4ddf044bb8c07836cc_cgraph.map
create mode 100644 class_tgstation_1_1_server_1_1_host_1_1_jobs_1_1_job_progress_reporter_a3e9230c68a7eff4ddf044bb8c07836cc_cgraph.md5
create mode 100644 class_tgstation_1_1_server_1_1_host_1_1_jobs_1_1_job_progress_reporter_a3e9230c68a7eff4ddf044bb8c07836cc_cgraph.png
create mode 100644 class_tgstation_1_1_server_1_1_host_1_1_jobs_1_1_job_progress_reporter_aa95af832a3c5781b796441234fc0e5fe_icgraph.map
create mode 100644 class_tgstation_1_1_server_1_1_host_1_1_jobs_1_1_job_progress_reporter_aa95af832a3c5781b796441234fc0e5fe_icgraph.md5
create mode 100644 class_tgstation_1_1_server_1_1_host_1_1_jobs_1_1_job_progress_reporter_aa95af832a3c5781b796441234fc0e5fe_icgraph.png
delete mode 100644 inherit_graph_199.map
delete mode 100644 inherit_graph_199.md5
delete mode 100644 inherit_graph_199.png
rename interface_tgstation_1_1_server_1_1_host_1_1_components_1_1_engine_1_1_i_engine_installer_a76100637a7abd23c97157b7a4deb4736_icgraph.map => interface_tgstation_1_1_server_1_1_host_1_1_components_1_1_engine_1_1_i_engine_installer_a1841dfb27438fbd4d70462cd137bcb42_icgraph.map (72%)
create mode 100644 interface_tgstation_1_1_server_1_1_host_1_1_components_1_1_engine_1_1_i_engine_installer_a1841dfb27438fbd4d70462cd137bcb42_icgraph.md5
rename interface_tgstation_1_1_server_1_1_host_1_1_components_1_1_engine_1_1_i_engine_installer_a76100637a7abd23c97157b7a4deb4736_icgraph.png => interface_tgstation_1_1_server_1_1_host_1_1_components_1_1_engine_1_1_i_engine_installer_a1841dfb27438fbd4d70462cd137bcb42_icgraph.png (100%)
delete mode 100644 interface_tgstation_1_1_server_1_1_host_1_1_components_1_1_engine_1_1_i_engine_installer_a76100637a7abd23c97157b7a4deb4736_icgraph.md5
delete mode 100644 interface_tgstation_1_1_server_1_1_host_1_1_components_1_1_repository_1_1_i_repository_abd47fd2dbfe8a1f51ea38ca78259eabd_icgraph.md5
delete mode 100644 interface_tgstation_1_1_server_1_1_host_1_1_components_1_1_repository_1_1_i_repository_abd47fd2dbfe8a1f51ea38ca78259eabd_icgraph.png
rename interface_tgstation_1_1_server_1_1_host_1_1_components_1_1_repository_1_1_i_repository_abd47fd2dbfe8a1f51ea38ca78259eabd_icgraph.map => interface_tgstation_1_1_server_1_1_host_1_1_components_1_1_repository_1_1_i_repository_ac1a99bf9d0bc659cc3989ba4318cdfcc_icgraph.map (55%)
create mode 100644 interface_tgstation_1_1_server_1_1_host_1_1_components_1_1_repository_1_1_i_repository_ac1a99bf9d0bc659cc3989ba4318cdfcc_icgraph.md5
create mode 100644 interface_tgstation_1_1_server_1_1_host_1_1_components_1_1_repository_1_1_i_repository_ac1a99bf9d0bc659cc3989ba4318cdfcc_icgraph.png
create mode 100644 interface_tgstation_1_1_server_1_1_host_1_1_components_1_1_repository_1_1_i_repository_adea5d05808bd1a5314dc619c6c2a6428_icgraph.map
create mode 100644 interface_tgstation_1_1_server_1_1_host_1_1_components_1_1_repository_1_1_i_repository_adea5d05808bd1a5314dc619c6c2a6428_icgraph.md5
create mode 100644 interface_tgstation_1_1_server_1_1_host_1_1_components_1_1_repository_1_1_i_repository_adea5d05808bd1a5314dc619c6c2a6428_icgraph.png
delete mode 100644 interface_tgstation_1_1_server_1_1_host_1_1_components_1_1_repository_1_1_i_repository_manager_a01642bc09ffdcb87116758727bcbd813_icgraph.md5
rename interface_tgstation_1_1_server_1_1_host_1_1_components_1_1_repository_1_1_i_repository_manager_a01642bc09ffdcb87116758727bcbd813_icgraph.map => interface_tgstation_1_1_server_1_1_host_1_1_components_1_1_repository_1_1_i_repository_manager_a0506fb30c8098ae3520612c13fcbac0c_icgraph.map (89%)
create mode 100644 interface_tgstation_1_1_server_1_1_host_1_1_components_1_1_repository_1_1_i_repository_manager_a0506fb30c8098ae3520612c13fcbac0c_icgraph.md5
rename interface_tgstation_1_1_server_1_1_host_1_1_components_1_1_repository_1_1_i_repository_manager_a01642bc09ffdcb87116758727bcbd813_icgraph.png => interface_tgstation_1_1_server_1_1_host_1_1_components_1_1_repository_1_1_i_repository_manager_a0506fb30c8098ae3520612c13fcbac0c_icgraph.png (100%)
diff --git a/_byond_installer_base_8cs_source.html b/_byond_installer_base_8cs_source.html
index 6a8237f825..3535685bb3 100644
--- a/_byond_installer_base_8cs_source.html
+++ b/_byond_installer_base_8cs_source.html
@@ -188,7 +188,7 @@ $(function() {
-
+
@@ -239,11 +239,11 @@ $(function() {
const string ByondBinPath
The path to the BYOND bin folder.
virtual IEnumerable< string > AdditionalCacheCleanFilePaths(string configDirectory)
List off additional file paths in the configDirectory to delete.
abstract string DreamMakerName
Path to the DreamMaker executable.
-override async ValueTask< IEngineInstallationData > DownloadVersion(EngineVersion version, JobProgressReporter? progressReporter, CancellationToken cancellationToken)
Download a given engine version . A ValueTask<TResult> resulting in the IEngineInstallationData for t...
ByondInstallerBase(IIOManager ioManager, ILogger< ByondInstallerBase > logger, IFileDownloader fileDownloader)
Initializes a new instance of the ByondInstallerBase class.
override async Task CleanCache(CancellationToken cancellationToken)
Attempts to cleans the engine's cache folder for the system. A Task representing the running operatio...
Uri GetDownloadZipUrl(EngineVersion version)
Create a Uri pointing to the location of the download for a given version .
override EngineType TargetEngineType
+override async ValueTask< IEngineInstallationData > DownloadVersion(EngineVersion version, JobProgressReporter progressReporter, CancellationToken cancellationToken)
Download a given engine version . A ValueTask<TResult> resulting in the IEngineInstallationData for t...
abstract string GetDreamDaemonName(Version byondVersion, out bool supportsCli)
Get the file name of the DreamDaemon executable.
override IEngineInstallation CreateInstallation(EngineVersion version, string path, Task installationTask)
Creates an IEngineInstallation for a given version . The IEngineInstallation.
@@ -253,7 +253,7 @@ $(function() {
Implementation of IEngineInstallationData for a zip file in a Stream.
IFileStreamProvider that provides a ISeekableFileStreamProvider from an input Stream.
An IIOManager that resolve relative paths from another IIOManager to a subdirectory of that.
-Progress reporter for a Job.
+Progress reporter for a Job.
Represents a BYOND installation.
IFileStreamProvider DownloadFile(Uri url, string? bearerToken)
Downloads a file from a given url .
diff --git a/_delegating_engine_installer_8cs_source.html b/_delegating_engine_installer_8cs_source.html
index 8ae4555dbd..7e2c2ea539 100644
--- a/_delegating_engine_installer_8cs_source.html
+++ b/_delegating_engine_installer_8cs_source.html
@@ -103,7 +103,7 @@ $(function() {
37 => DelegateCall(version, installer => installer.CreateInstallation(version, path, installationTask));
-
+
41 => DelegateCall(version, installer => installer.DownloadVersion(version, jobProgressReporter, cancellationToken));
44 public ValueTask
Install(
EngineVersion version,
string path,
bool deploymentPipelineProcesses, CancellationToken cancellationToken)
@@ -127,14 +127,14 @@ $(function() {
Implementation of IEngineInstaller that forwards calls to different IEngineInstaller based on their a...
IEngineInstallation CreateInstallation(EngineVersion version, string path, Task installationTask)
Creates an IEngineInstallation for a given version . The IEngineInstallation.
DelegatingEngineInstaller(FrozenDictionary< EngineType, IEngineInstaller > delegatedInstallers)
Initializes a new instance of the DelegatingEngineInstaller class.
-ValueTask< IEngineInstallationData > DownloadVersion(EngineVersion version, JobProgressReporter? jobProgressReporter, CancellationToken cancellationToken)
Download a given engine version . A ValueTask<TResult> resulting in the IEngineInstallationData for t...
TReturn DelegateCall< TReturn >(EngineVersion version, Func< IEngineInstaller, TReturn > call)
Delegate a given call to its appropriate IEngineInstaller.
ValueTask Install(EngineVersion version, string path, bool deploymentPipelineProcesses, CancellationToken cancellationToken)
Does actions necessary to get an extracted installation working. A ValueTask representing the running...
+ValueTask< IEngineInstallationData > DownloadVersion(EngineVersion version, JobProgressReporter jobProgressReporter, CancellationToken cancellationToken)
Download a given engine version . A ValueTask<TResult> resulting in the IEngineInstallationData for t...
ValueTask UpgradeInstallation(EngineVersion version, string path, CancellationToken cancellationToken)
Does actions necessary to get upgrade a version installed by a previous version of TGS....
Task CleanCache(CancellationToken cancellationToken)
Attempts to cleans the engine's cache folder for the system. A Task representing the running operatio...
readonly FrozenDictionary< EngineType, IEngineInstaller > delegatedInstallers
The FrozenDictionary<TKey, TValue> mapping EngineTypes to their appropriate IEngineInstaller.
ValueTask TrustDmbPath(EngineVersion version, string fullDmbPath, CancellationToken cancellationToken)
Add a given fullDmbPath to the trusted DMBs list in BYOND's config. A ValueTask representing the run...
-Progress reporter for a Job.
+Progress reporter for a Job.
Represents a BYOND installation.
For downloading and installing game engines for a given system.
diff --git a/_dream_maker_8cs_source.html b/_dream_maker_8cs_source.html
index e0c965bb59..a9bcbc294a 100644
--- a/_dream_maker_8cs_source.html
+++ b/_dream_maker_8cs_source.html
@@ -972,8 +972,8 @@ $(function() {
Repository(LibGit2Sharp.IRepository libGitRepo, ILibGit2Commands commands, IIOManager ioManager, IEventConsumer eventConsumer, ICredentialsProvider credentialsProvider, IPostWriteHandler postWriteHandler, IGitRemoteFeaturesFactory gitRemoteFeaturesFactory, ILibGit2RepositoryFactory submoduleFactory, ILogger< Repository > logger, GeneralConfiguration generalConfiguration, Action disposeAction)
Initializes a new instance of the Repository class.
Configuration options for the game sessions.
Operation exceptions thrown from the context of a Models.Job.
-Progress reporter for a Job.
-void ReportProgress(double? progress)
Report progress.
+Progress reporter for a Job.
+void ReportProgress(double? progress)
Report progress.
Represents an Api.Models.Instance in the database.
diff --git a/_engine_controller_8cs_source.html b/_engine_controller_8cs_source.html
index f370eb96e8..d1132e1a83 100644
--- a/_engine_controller_8cs_source.html
+++ b/_engine_controller_8cs_source.html
@@ -217,175 +217,176 @@ $(function() {
- 187 await byondManager.ChangeVersion(null, model.EngineVersion, null, false, cancellationToken);
-
- 189 catch (InvalidOperationException ex)
-
-
-
- 193 "Race condition: Engine {version} uninstalled before we could switch to it. Creating install job instead...",
-
- 195 versionAlreadyInstalled =
false;
-
-
-
- 199 if (!versionAlreadyInstalled)
-
- 201 if (model.EngineVersion.CustomIteration.HasValue)
-
-
-
- 205 "User ID {userId} installing engine version {newByondVersion} on instance ID {instanceId}",
-
-
-
-
-
- 211 var job = Models.Job.Create(
-
-
- 214 :
JobCode.EngineOfficialInstall,
-
-
-
- 218 job.Description += $
" {model.EngineVersion}";
-
-
-
-
-
-
-
- 226 await jobManager.RegisterOperation(
-
- 228 async (core, databaseContextFactory, paramJob, progressHandler, jobCancellationToken) =>
-
- 230 MemoryStream? zipFileStream = null;
- 231 if (fileUploadTicket != null)
- 232 await using (fileUploadTicket)
-
- 234 var uploadStream = await fileUploadTicket.GetResult(jobCancellationToken) ?? throw new JobException(ErrorCode.FileUploadExpired);
- 235 zipFileStream = new MemoryStream();
-
-
- 238 await uploadStream.CopyToAsync(zipFileStream, jobCancellationToken);
-
-
-
- 242 await zipFileStream.DisposeAsync();
-
-
-
-
- 247 await using (zipFileStream)
- 248 await core!.EngineManager.ChangeVersion(
-
-
-
-
- 253 jobCancellationToken);
-
-
-
- 257 result.InstallJob = job.ToApi();
- 258 result.FileTicket = fileUploadTicket?.Ticket.FileTicket;
-
-
-
- 262 if (fileUploadTicket !=
null)
- 263 await fileUploadTicket.DisposeAsync();
-
-
-
-
-
- 269 return result.InstallJob !=
null ? Accepted(result) : Json(result);
-
-
-
-
-
-
-
-
-
-
- 289 ArgumentNullException.ThrowIfNull(model);
- 290 var earlyOut = ValidateEngineVersion(model.EngineVersion);
- 291 if (earlyOut !=
null)
-
-
- 294 var engineVersion = model.EngineVersion!;
- 295 var notInstalledResponse = await WithComponentInstanceNullable(
-
-
- 298 var byondManager = instance.EngineManager;
- 299 var activeVersion = byondManager.ActiveVersion;
- 300 if (activeVersion !=
null && engineVersion.Equals(activeVersion))
- 301 return ValueTask.FromResult<IActionResult?>(
-
-
- 304 var versionNotInstalled = !byondManager.InstalledVersions.Any(x => x.Equals(engineVersion));
-
- 306 return ValueTask.FromResult<IActionResult?>(
-
-
-
-
-
- 312 if (notInstalledResponse !=
null)
- 313 return notInstalledResponse;
-
- 315 var isByondVersion = engineVersion.Engine!.Value ==
EngineType.Byond;
-
-
- 318 var cancelRight = isByondVersion
- 319 ? engineVersion.CustomIteration.HasValue
- 320 ? EngineRights.InstallCustomByondVersion
- 321 : EngineRights.InstallOfficialOrChangeActiveByondVersion
- 322 : engineVersion.CustomIteration.HasValue
- 323 ? EngineRights.InstallOfficialOrChangeActiveOpenDreamVersion
-
-
-
- 327 job.Description += $
" {engineVersion}";
-
- 329 await jobManager.RegisterOperation(
-
- 331 (instanceCore, databaseContextFactory, job, progressReporter, jobCancellationToken)
- 332 => instanceCore!.EngineManager.DeleteVersion(progressReporter, engineVersion, jobCancellationToken),
-
-
- 335 var apiResponse = job.ToApi();
- 336 return Accepted(apiResponse);
-
-
-
-
- 346 if (version ==
null || !version.
Engine.HasValue)
-
-
- 349 var isByond = version.Engine.Value ==
EngineType.Byond;
-
-
-
-
-
-
- 356 || (version.
Version !=
null && (version.
Version.Revision != -1 || validSha)))))
-
-
-
-
- 361 version.Version = NormalizeByondVersion(version.
Version!);
- 362 if (version.
Version.Build != -1)
-
-
-
-
-
-
-
+ 187 using var progressReporter = new JobProgressReporter();
+ 188 await byondManager.ChangeVersion(progressReporter, model.EngineVersion, null, false, cancellationToken);
+
+ 190 catch (InvalidOperationException ex)
+
+
+
+ 194 "Race condition: Engine {version} uninstalled before we could switch to it. Creating install job instead...",
+
+ 196 versionAlreadyInstalled =
false;
+
+
+
+ 200 if (!versionAlreadyInstalled)
+
+ 202 if (model.EngineVersion.CustomIteration.HasValue)
+
+
+
+ 206 "User ID {userId} installing engine version {newByondVersion} on instance ID {instanceId}",
+
+
+
+
+
+ 212 var job = Models.Job.Create(
+
+
+ 215 :
JobCode.EngineOfficialInstall,
+
+
+
+ 219 job.Description += $
" {model.EngineVersion}";
+
+
+
+
+
+
+
+ 227 await jobManager.RegisterOperation(
+
+ 229 async (core, databaseContextFactory, paramJob, progressHandler, jobCancellationToken) =>
+
+ 231 MemoryStream? zipFileStream = null;
+ 232 if (fileUploadTicket != null)
+ 233 await using (fileUploadTicket)
+
+ 235 var uploadStream = await fileUploadTicket.GetResult(jobCancellationToken) ?? throw new JobException(ErrorCode.FileUploadExpired);
+ 236 zipFileStream = new MemoryStream();
+
+
+ 239 await uploadStream.CopyToAsync(zipFileStream, jobCancellationToken);
+
+
+
+ 243 await zipFileStream.DisposeAsync();
+
+
+
+
+ 248 await using (zipFileStream)
+ 249 await core!.EngineManager.ChangeVersion(
+
+
+
+
+ 254 jobCancellationToken);
+
+
+
+ 258 result.InstallJob = job.ToApi();
+ 259 result.FileTicket = fileUploadTicket?.Ticket.FileTicket;
+
+
+
+ 263 if (fileUploadTicket !=
null)
+ 264 await fileUploadTicket.DisposeAsync();
+
+
+
+
+
+ 270 return result.InstallJob !=
null ? Accepted(result) : Json(result);
+
+
+
+
+
+
+
+
+
+
+ 290 ArgumentNullException.ThrowIfNull(model);
+ 291 var earlyOut = ValidateEngineVersion(model.EngineVersion);
+ 292 if (earlyOut !=
null)
+
+
+ 295 var engineVersion = model.EngineVersion!;
+ 296 var notInstalledResponse = await WithComponentInstanceNullable(
+
+
+ 299 var byondManager = instance.EngineManager;
+ 300 var activeVersion = byondManager.ActiveVersion;
+ 301 if (activeVersion !=
null && engineVersion.Equals(activeVersion))
+ 302 return ValueTask.FromResult<IActionResult?>(
+
+
+ 305 var versionNotInstalled = !byondManager.InstalledVersions.Any(x => x.Equals(engineVersion));
+
+ 307 return ValueTask.FromResult<IActionResult?>(
+
+
+
+
+
+ 313 if (notInstalledResponse !=
null)
+ 314 return notInstalledResponse;
+
+ 316 var isByondVersion = engineVersion.Engine!.Value ==
EngineType.Byond;
+
+
+ 319 var cancelRight = isByondVersion
+ 320 ? engineVersion.CustomIteration.HasValue
+ 321 ? EngineRights.InstallCustomByondVersion
+ 322 : EngineRights.InstallOfficialOrChangeActiveByondVersion
+ 323 : engineVersion.CustomIteration.HasValue
+ 324 ? EngineRights.InstallOfficialOrChangeActiveOpenDreamVersion
+
+
+
+ 328 job.Description += $
" {engineVersion}";
+
+ 330 await jobManager.RegisterOperation(
+
+ 332 (instanceCore, databaseContextFactory, job, progressReporter, jobCancellationToken)
+ 333 => instanceCore!.EngineManager.DeleteVersion(progressReporter, engineVersion, jobCancellationToken),
+
+
+ 336 var apiResponse = job.ToApi();
+ 337 return Accepted(apiResponse);
+
+
+
+
+ 347 if (version ==
null || !version.
Engine.HasValue)
+
+
+ 350 var isByond = version.Engine.Value ==
EngineType.Byond;
+
+
+
+
+
+
+ 357 || (version.
Version !=
null && (version.
Version.Revision != -1 || validSha)))))
+
+
+
+
+ 362 version.Version = NormalizeByondVersion(version.
Version!);
+ 363 if (version.
Version.Build != -1)
+
+
+
+
+
+
+
Information about an engine installation.
Version? Version
The System.Version of the engine. Currently only valid when Engine is EngineType.Byond.
string? SourceSHA
The git commit SHA of the engine. Currently only valid when Engine is EngineType.OpenDream.
@@ -415,8 +416,8 @@ $(function() {
ValueTask< IActionResult > List([FromQuery] int? page, [FromQuery] int? pageSize, CancellationToken cancellationToken)
Lists installed EngineVersions.
EngineController(IDatabaseContext databaseContext, IAuthenticationContext authenticationContext, ILogger< EngineController > logger, IInstanceManager instanceManager, IJobManager jobManager, IFileTransferTicketProvider fileTransferService, IApiHeadersProvider apiHeadersProvider)
Initializes a new instance of the EngineController class.
static Version NormalizeByondVersion(Version version)
Remove the Version.Build from a given version if present.
-async ValueTask< IActionResult > Delete([FromBody] EngineVersionDeleteRequest model, CancellationToken cancellationToken)
Attempts to delete the BYOND version specified in a given model from the instance.
-BadRequestObjectResult? ValidateEngineVersion(EngineVersion? version)
Validate and normalize a given version .
+async ValueTask< IActionResult > Delete([FromBody] EngineVersionDeleteRequest model, CancellationToken cancellationToken)
Attempts to delete the BYOND version specified in a given model from the instance.
+BadRequestObjectResult? ValidateEngineVersion(EngineVersion? version)
Validate and normalize a given version .
async ValueTask< IActionResult > Update([FromBody] EngineVersionRequest model, CancellationToken cancellationToken)
Changes the active engine version to the one specified in a given model .
readonly IJobManager jobManager
The IJobManager for the EngineController.
ComponentInterfacingController for operations that require an instance.
diff --git a/_engine_installer_base_8cs_source.html b/_engine_installer_base_8cs_source.html
index 5b851aa1c1..d2864ea51a 100644
--- a/_engine_installer_base_8cs_source.html
+++ b/_engine_installer_base_8cs_source.html
@@ -111,7 +111,7 @@ $(function() {
-
+
@@ -127,17 +127,17 @@ $(function() {
EngineType? Engine
The EngineType.
abstract ValueTask TrustDmbPath(EngineVersion version, string fullDmbPath, CancellationToken cancellationToken)
Add a given fullDmbPath to the trusted DMBs list in BYOND's config. A ValueTask representing the run...
-abstract ValueTask< IEngineInstallationData > DownloadVersion(EngineVersion version, JobProgressReporter? jobProgressReporter, CancellationToken cancellationToken)
Download a given engine version . A ValueTask<TResult> resulting in the IEngineInstallationData for t...
abstract Task CleanCache(CancellationToken cancellationToken)
Attempts to cleans the engine's cache folder for the system. A Task representing the running operatio...
void CheckVersionValidity(EngineVersion version)
Check that a given version is of type EngineType.Byond.
abstract IEngineInstallation CreateInstallation(EngineVersion version, string path, Task installationTask)
Creates an IEngineInstallation for a given version . The IEngineInstallation.
+abstract ValueTask< IEngineInstallationData > DownloadVersion(EngineVersion version, JobProgressReporter jobProgressReporter, CancellationToken cancellationToken)
Download a given engine version . A ValueTask<TResult> resulting in the IEngineInstallationData for t...
IIOManager IOManager
Gets the IIOManager for the EngineInstallerBase.
EngineInstallerBase(IIOManager ioManager, ILogger< EngineInstallerBase > logger)
Initializes a new instance of the EngineInstallerBase class.
abstract ValueTask Install(EngineVersion version, string path, bool deploymentPipelineProcesses, CancellationToken cancellationToken)
Does actions necessary to get an extracted installation working. A ValueTask representing the running...
ILogger< EngineInstallerBase > Logger
Gets the ILogger for the EngineInstallerBase.
abstract EngineType TargetEngineType
The EngineType the installer supports.
abstract ValueTask UpgradeInstallation(EngineVersion version, string path, CancellationToken cancellationToken)
Does actions necessary to get upgrade a version installed by a previous version of TGS....
-Progress reporter for a Job.
+Progress reporter for a Job.
Represents a BYOND installation.
For downloading and installing game engines for a given system.
Interface for using filesystems.
diff --git a/_engine_manager_8cs_source.html b/_engine_manager_8cs_source.html
index 1fe1bed93b..103dbfb3a0 100644
--- a/_engine_manager_8cs_source.html
+++ b/_engine_manager_8cs_source.html
@@ -153,8 +153,8 @@ $(function() {
-
-
+
+
123 Stream? customVersionStream,
124 bool allowInstallation,
@@ -164,7 +164,7 @@ $(function() {
-
+
@@ -201,419 +201,430 @@ $(function() {
166 "Acquiring lock on BYOND version {version}...",
167 requiredVersion?.ToString() ?? $
"{ActiveVersion} (active)");
-
-
-
-
- 173 requiredVersion !=
null,
-
-
-
-
- 178 if (trustDmbFullPath !=
null)
-
-
-
-
-
-
- 185 installLock.Dispose();
-
-
-
-
-
-
- 193 ArgumentNullException.ThrowIfNull(progressReporter);
-
-
-
- 197 logger.LogTrace(
"DeleteVersion {version}", version);
-
-
- 200 if (activeVersion !=
null && version.
Equals(activeVersion))
-
-
-
- 204 logger.LogTrace(
"Waiting to acquire installedVersions lock...");
-
-
-
-
- 209 logger.LogTrace(
"Version {version} already deleted.", version);
-
-
-
- 213 container = containerNullable;
- 214 logger.LogTrace(
"Installation container acquired for deletion");
-
-
- 217 progressReporter.StageName =
"Waiting for version to not be in use...";
-
-
-
-
-
- 223 Task activeVersionUpdate;
-
-
-
- 227 logger.LogTrace(
"Waiting for container.OnZeroReferences or switch of active version...");
-
-
-
- 231 .WaitAsync(cancellationToken);
-
- 233 if (containerTask.IsCompleted)
- 234 logger.LogTrace(
"All locks for version {version} are gone", version);
-
- 236 logger.LogTrace(
"activeVersion changed, we may have to wait again. Acquiring semaphore...");
-
-
-
-
-
- 242 if (activeVersion !=
null && version.
Equals(activeVersion))
-
-
-
- 246 logger.LogTrace(
"Locking installedVersions...");
-
-
-
-
-
- 252 logger.LogWarning(
"Unable to remove engine installation {version} from list! Is there a duplicate job running?", version);
-
-
- 255 if (container != newerContainer)
-
-
-
-
- 260 logger.LogDebug(
"Extreme race condition encountered, applying concentrated copium...");
- 261 container = newerContainer;
-
-
-
-
-
- 267 logger.LogTrace(
"Proceeding with installation deletion...");
-
-
-
-
-
-
-
- 275 logger.LogInformation(
"Deleting version {version}...", version);
- 276 progressReporter.StageName =
"Deleting installation...";
-
-
- 279 var installPath = version.
ToString();
-
-
-
-
-
-
-
- 287 if (containerTask.IsCompleted)
-
- 289 "Another lock was acquired before we could remove version {version} from the list. We will have to wait again.",
-
-
- 292 logger.LogTrace(
"Not proceeding for some reason or another");
-
-
-
-
- 298 public async Task
StartAsync(CancellationToken cancellationToken)
-
- 300 async ValueTask<byte[]?> GetActiveVersion()
-
-
-
-
-
- 306 var activeVersionBytesTask = GetActiveVersion();
-
-
-
+
+
+
+
+
+
+
+ 176 requiredVersion !=
null,
+
+
+
+
+ 181 if (trustDmbFullPath !=
null)
+
+
+
+
+
+
+ 188 installLock.Dispose();
+
+
+
+
+
+
+ 196 ArgumentNullException.ThrowIfNull(progressReporter);
+
+
+
+ 200 logger.LogTrace(
"DeleteVersion {version}", version);
+
+
+ 203 if (activeVersion !=
null && version.
Equals(activeVersion))
+
+
+
+ 207 logger.LogTrace(
"Waiting to acquire installedVersions lock...");
+
+
+
+
+ 212 logger.LogTrace(
"Version {version} already deleted.", version);
+
+
+
+ 216 container = containerNullable;
+ 217 logger.LogTrace(
"Installation container acquired for deletion");
+
+
+ 220 progressReporter.StageName =
"Waiting for version to not be in use...";
+
+
+
+
+
+ 226 Task activeVersionUpdate;
+
+
+
+ 230 logger.LogTrace(
"Waiting for container.OnZeroReferences or switch of active version...");
+
+
+
+ 234 .WaitAsync(cancellationToken);
+
+ 236 if (containerTask.IsCompleted)
+ 237 logger.LogTrace(
"All locks for version {version} are gone", version);
+
+ 239 logger.LogTrace(
"activeVersion changed, we may have to wait again. Acquiring semaphore...");
+
+
+
+
+
+ 245 if (activeVersion !=
null && version.
Equals(activeVersion))
+
+
+
+ 249 logger.LogTrace(
"Locking installedVersions...");
+
+
+
+
+
+ 255 logger.LogWarning(
"Unable to remove engine installation {version} from list! Is there a duplicate job running?", version);
+
+
+ 258 if (container != newerContainer)
+
+
+
+
+ 263 logger.LogDebug(
"Extreme race condition encountered, applying concentrated copium...");
+ 264 container = newerContainer;
+
+
+
+
+
+ 270 logger.LogTrace(
"Proceeding with installation deletion...");
+
+
+
+
+
+
+
+ 278 logger.LogInformation(
"Deleting version {version}...", version);
+ 279 progressReporter.StageName =
"Deleting installation...";
+
+
+ 282 var installPath = version.
ToString();
+
+
+
+
+
+
+
+ 290 if (containerTask.IsCompleted)
+
+ 292 "Another lock was acquired before we could remove version {version} from the list. We will have to wait again.",
+
+
+ 295 logger.LogTrace(
"Not proceeding for some reason or another");
+
+
+
+
+ 301 public async Task
StartAsync(CancellationToken cancellationToken)
+
+ 303 async ValueTask<byte[]?> GetActiveVersion()
+
+
+
+
+
+ 309 var activeVersionBytesTask = GetActiveVersion();
- 311 var installedVersionPaths =
new Dictionary<string, EngineVersion>();
-
- 313 async ValueTask ReadVersion(
string path)
-
-
-
-
-
-
-
-
-
-
- 324 var text = Encoding.UTF8.GetString(bytes);
-
-
-
-
-
-
-
-
- 333 version = versionNullable!;
-
-
-
-
- 338 logger.LogDebug(
"Added detected BYOND version {versionKey}...", version);
-
-
-
-
-
- 344 "It seems that there are multiple directories that say they contain BYOND version {version}. We're ignoring and cleaning the duplicate: {duplicatePath}",
-
-
-
-
-
-
- 351 lock (installedVersionPaths)
-
-
-
-
-
- 357 .Select(ReadVersion));
-
- 359 logger.LogTrace(
"Upgrading BYOND installations...");
-
- 361 installedVersionPaths
-
-
- 364 var activeVersionBytes = await activeVersionBytesTask;
- 365 if (activeVersionBytes !=
null)
-
- 367 var activeVersionString = Encoding.UTF8.GetString(activeVersionBytes);
-
-
- 370 bool hasRequestedActiveVersion;
-
-
-
-
- 375 if (hasRequestedActiveVersion)
-
-
-
- 379 logger.LogWarning(
"Failed to load saved active version {activeVersion}!", activeVersionString);
-
-
-
-
-
- 386 public Task
StopAsync(CancellationToken cancellationToken) => Task.CompletedTask;
+
+
+
+ 314 var installedVersionPaths =
new Dictionary<string, EngineVersion>();
+
+ 316 async ValueTask ReadVersion(
string path)
+
+
+
+
+
+
+
+
+
+
+ 327 var text = Encoding.UTF8.GetString(bytes);
+
+
+
+
+
+
+
+
+ 336 version = versionNullable!;
+
+
+
+
+ 341 logger.LogDebug(
"Added detected BYOND version {versionKey}...", version);
+
+
+
+
+
+ 347 "It seems that there are multiple directories that say they contain BYOND version {version}. We're ignoring and cleaning the duplicate: {duplicatePath}",
+
+
+
+
+
+
+ 354 lock (installedVersionPaths)
+
+
+
+
+
+ 360 .Select(ReadVersion));
+
+ 362 logger.LogTrace(
"Upgrading BYOND installations...");
+
+ 364 installedVersionPaths
+
+
+ 367 var activeVersionBytes = await activeVersionBytesTask;
+ 368 if (activeVersionBytes !=
null)
+
+ 370 var activeVersionString = Encoding.UTF8.GetString(activeVersionBytes);
+
+
+ 373 bool hasRequestedActiveVersion;
+
+
+
+
+ 378 if (hasRequestedActiveVersion)
+
+
+
+ 382 logger.LogWarning(
"Failed to load saved active version {activeVersion}!", activeVersionString);
+
+
+
+
-
-
-
- 401 Stream? customVersionStream,
-
- 403 bool allowInstallation,
- 404 CancellationToken cancellationToken)
-
- 406 var ourTcs =
new TaskCompletionSource();
-
-
- 409 bool installedOrInstalling;
-
-
- 412 if (customVersionStream !=
null)
-
- 414 var customInstallationNumber = 1;
-
-
- 417 version.CustomIteration = customInstallationNumber++;
-
-
-
-
- 422 installedOrInstalling =
installedVersions.TryGetValue(version, out var installationContainerNullable);
-
- 424 if (!installedOrInstalling)
-
- 426 if (!allowInstallation)
- 427 throw new InvalidOperationException($
"Engine version {version} not installed!");
-
-
-
-
-
-
-
- 435 installationContainer = installationContainerNullable!;
-
- 437 installation = installationContainer.
Instance;
-
-
-
- 441 var deploymentPipelineProcesses = !neededForLock;
-
-
- 444 if (installedOrInstalling)
-
- 446 if (progressReporter !=
null)
- 447 progressReporter.StageName =
"Waiting for existing installation job...";
-
-
- 450 logger.LogWarning(
"The required engine version ({version}) is not readily available! We will have to wait for it to install.", version);
-
-
-
-
-
-
-
-
- 459 if (customVersionStream !=
null)
- 460 logger.LogInformation(
"Installing custom engine version as {version}...", version);
- 461 else if (neededForLock)
-
-
-
-
- 466 logger.LogWarning(
"The required engine version ({version}) is not readily available! We will have to install it.", version);
-
-
- 469 logger.LogInformation(
"Requested engine version {version} not currently installed. Doing so now...", version);
-
- 471 if (progressReporter !=
null)
- 472 progressReporter.StageName =
"Running event";
-
- 474 var versionString = version.
ToString();
-
-
- 477 await
InstallVersionFiles(progressReporter, version, customVersionStream, deploymentPipelineProcesses, cancellationToken);
-
-
-
-
-
-
-
- 485 if (ex is not OperationCanceledException)
-
-
-
-
-
- 491 ourTcs.SetException(ex);
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- 516 Stream? customVersionStream,
- 517 bool deploymentPipelineProcesses,
- 518 CancellationToken cancellationToken)
-
-
- 521 async ValueTask DirectoryCleanup()
-
-
-
-
-
- 527 var directoryCleanupTask = DirectoryCleanup();
-
-
-
- 531 if (customVersionStream ==
null)
-
- 533 if (progressReporter !=
null)
- 534 progressReporter.StageName =
"Downloading version";
-
-
-
-
-
-
- 541#pragma warning disable CA2000
-
-
- 544 customVersionStream);
- 545#pragma warning restore CA2000
-
- 547 await
using (engineInstallationData)
+ 389 public Task
StopAsync(CancellationToken cancellationToken) => Task.CompletedTask;
+
+
+
+
+ 404 Stream? customVersionStream,
+
+ 406 bool allowInstallation,
+ 407 CancellationToken cancellationToken)
+
+ 409 var ourTcs =
new TaskCompletionSource();
+
+
+ 412 bool installedOrInstalling;
+
+
+ 415 if (customVersionStream !=
null)
+
+ 417 var customInstallationNumber = 1;
+
+
+ 420 version.CustomIteration = customInstallationNumber++;
+
+
+
+
+ 425 installedOrInstalling =
installedVersions.TryGetValue(version, out var installationContainerNullable);
+
+ 427 if (!installedOrInstalling)
+
+ 429 if (!allowInstallation)
+ 430 throw new InvalidOperationException($
"Engine version {version} not installed!");
+
+
+
+
+
+
+
+ 438 installationContainer = installationContainerNullable!;
+
+ 440 installation = installationContainer.
Instance;
+
+
+
+ 444 var deploymentPipelineProcesses = !neededForLock;
+
+
+ 447 if (installedOrInstalling)
+
+ 449 progressReporter.StageName =
"Waiting for existing installation job...";
+
+
+ 452 logger.LogWarning(
"The required engine version ({version}) is not readily available! We will have to wait for it to install.", version);
+
+
+
+
+
+
+
+
+ 461 if (customVersionStream !=
null)
+ 462 logger.LogInformation(
"Installing custom engine version as {version}...", version);
+ 463 else if (neededForLock)
+
+
+
+
+ 468 logger.LogWarning(
"The required engine version ({version}) is not readily available! We will have to install it.", version);
+
+
+ 471 logger.LogInformation(
"Requested engine version {version} not currently installed. Doing so now...", version);
+
+ 473 progressReporter.StageName =
"Running event";
+
+ 475 var versionString = version.
ToString();
+
+
+ 478 await
InstallVersionFiles(progressReporter, version, customVersionStream, deploymentPipelineProcesses, cancellationToken);
+
+
+
+
+
+
+
+ 486 if (ex is not OperationCanceledException)
+
+
+
+
+
+ 492 ourTcs.SetException(ex);
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 517 Stream? customVersionStream,
+ 518 bool deploymentPipelineProcesses,
+ 519 CancellationToken cancellationToken)
+
+
+ 522 async ValueTask DirectoryCleanup()
+
+
+
+
+
+ 528 var directoryCleanupTask = DirectoryCleanup();
+
+
+
+ 532 var remainingProgress = 1.0;
+ 533 if (customVersionStream ==
null)
+
+ 535 using var subReporter = progressReporter.
CreateSection(
"Downloading Version", 0.5);
+ 536 remainingProgress -= 0.5;
+
+
+
+ 540#pragma warning disable CA2000
+
+
+ 543 customVersionStream);
+ 544#pragma warning restore CA2000
+
+
+
- 549 if (progressReporter !=
null)
- 550 progressReporter.StageName =
"Cleaning target directory";
-
- 552 await directoryCleanupTask;
-
- 554 if (progressReporter !=
null)
- 555 progressReporter.StageName =
"Extracting data";
+ 549 remainingReporter = progressReporter.
CreateSection(
null, remainingProgress);
+
+
+
+ 553 await engineInstallationData.DisposeAsync();
+
+
- 557 logger.LogTrace(
"Extracting engine to {extractPath}...", installFullPath);
- 558 await engineInstallationData.
ExtractToPath(installFullPath, cancellationToken);
-
-
- 561 if (progressReporter !=
null)
- 562 progressReporter.StageName =
"Running installation actions";
-
-
-
- 566 if (progressReporter !=
null)
- 567 progressReporter.StageName =
"Writing version file";
-
-
-
-
- 572 Encoding.UTF8.GetBytes(version.
ToString()),
-
-
- 575 catch (HttpRequestException ex)
-
-
-
-
- 580 catch (OperationCanceledException)
-
-
-
-
-
-
-
-
-
-
-
-
-
+ 557 using (remainingReporter)
+
+ 559 await
using (engineInstallationData)
+
+ 561 remainingReporter.StageName =
"Cleaning target directory";
+
+ 563 await directoryCleanupTask;
+
+ 565 remainingReporter.StageName =
"Extracting data";
+
+ 567 logger.LogTrace(
"Extracting engine to {extractPath}...", installFullPath);
+ 568 await engineInstallationData.
ExtractToPath(installFullPath, cancellationToken);
+
+
+
+ 572 remainingReporter.StageName =
"Running installation actions";
+
+
+
+
+ 577 remainingReporter.StageName =
"Writing version file";
+
+
+
+
+ 582 Encoding.UTF8.GetBytes(version.
ToString()),
+
+
+
+ 586 catch (HttpRequestException ex)
+
+
+
+
+ 591 catch (OperationCanceledException)
+
+
+
+
+
+
+
+
+
-
-
-
-
-
- 607 return installationContainer;
-
-
-
+
+
+
+
+
+
+
+
+
+ 618 return installationContainer;
+
+
+
Information about an engine installation.
@@ -626,34 +637,35 @@ $(function() {
static async ValueTask WhenAll(IEnumerable< ValueTask > tasks)
Fully await a given list of tasks .
-async ValueTask InstallVersionFiles(JobProgressReporter? progressReporter, EngineVersion version, Stream? customVersionStream, bool deploymentPipelineProcesses, CancellationToken cancellationToken)
Installs the files for a given BYOND version .
static void CheckVersionParameter(EngineVersion version)
Validates a given version parameter.
readonly Dictionary< EngineVersion, ReferenceCountingContainer< IEngineInstallation, EngineExecutableLock > > installedVersions
Map of byond EngineVersions to Tasks that complete when they are installed.
Task StopAsync(CancellationToken cancellationToken)
-async ValueTask< EngineExecutableLock > AssertAndLockVersion(JobProgressReporter? progressReporter, EngineVersion version, Stream? customVersionStream, bool neededForLock, bool allowInstallation, CancellationToken cancellationToken)
Ensures a BYOND version is installed if it isn't already.
const string VersionFileName
The file in which we store the Version for installations.
-async Task StartAsync(CancellationToken cancellationToken)
+async Task StartAsync(CancellationToken cancellationToken)
IReadOnlyList< EngineVersion > InstalledVersions
The installed EngineVersions.
+async ValueTask< EngineExecutableLock > AssertAndLockVersion(JobProgressReporter progressReporter, EngineVersion version, Stream? customVersionStream, bool neededForLock, bool allowInstallation, CancellationToken cancellationToken)
Ensures a BYOND version is installed if it isn't already.
volatile TaskCompletionSource activeVersionChanged
TaskCompletionSource that notifes when the ActiveVersion changes.
const string ActiveVersionFileName
The file in which we store the ActiveVersion.
async ValueTask< IEngineExecutableLock > UseExecutables(EngineVersion? requiredVersion, string? trustDmbFullPath, CancellationToken cancellationToken)
Lock the current installation's location and return a IEngineExecutableLock. A ValueTask<TResult> res...
-async ValueTask DeleteVersion(JobProgressReporter progressReporter, EngineVersion version, CancellationToken cancellationToken)
Deletes a given version from the disk. A Task representing the running operation.
+async ValueTask DeleteVersion(JobProgressReporter progressReporter, EngineVersion version, CancellationToken cancellationToken)
Deletes a given version from the disk. A Task representing the running operation.
EngineVersion? ActiveVersion
The currently active EngineVersion.
EngineManager(IIOManager ioManager, IEngineInstaller engineInstaller, IEventConsumer eventConsumer, ILogger< EngineManager > logger)
Initializes a new instance of the EngineManager class.
readonly SemaphoreSlim changeDeleteSemaphore
The SemaphoreSlim for changing or deleting the active BYOND version.
+async ValueTask ChangeVersion(JobProgressReporter progressReporter, EngineVersion version, Stream? customVersionStream, bool allowInstallation, CancellationToken cancellationToken)
Change the active EngineVersion. A ValueTask representing the running operation.
readonly IEventConsumer eventConsumer
The IEventConsumer for the EngineManager.
readonly IIOManager ioManager
The IIOManager for the EngineManager.
readonly IEngineInstaller engineInstaller
The IEngineInstaller for the EngineManager.
+async ValueTask InstallVersionFiles(JobProgressReporter progressReporter, EngineVersion version, Stream? customVersionStream, bool deploymentPipelineProcesses, CancellationToken cancellationToken)
Installs the files for a given BYOND version .
readonly ILogger< EngineManager > logger
The ILogger for the EngineManager.
-ReferenceCountingContainer< IEngineInstallation, EngineExecutableLock > AddInstallationContainer(EngineVersion version, string installPath, Task installationTask)
Create and add a new IEngineInstallation to installedVersions.
-async ValueTask ChangeVersion(JobProgressReporter? progressReporter, EngineVersion version, Stream? customVersionStream, bool allowInstallation, CancellationToken cancellationToken)
Change the active EngineVersion. A ValueTask representing the running operation.
+ReferenceCountingContainer< IEngineInstallation, EngineExecutableLock > AddInstallationContainer(EngineVersion version, string installPath, Task installationTask)
Create and add a new IEngineInstallation to installedVersions.
Implementation of IEngineInstallationData for a zip file in a Stream.
IIOManager that resolves paths to Environment.CurrentDirectory.
const string CurrentDirectory
Path to the current working directory for the IIOManager.
Operation exceptions thrown from the context of a Models.Job.
-Progress reporter for a Job.
-void ReportProgress(double? progress)
Report progress.
+Progress reporter for a Job.
+JobProgressReporter CreateSection(string? newStageName, double percentage)
Create a subsection of the JobProgressReporter with its optional own stage name.
+void ReportProgress(double? progress)
Report progress.
Wrapper for managing some TWrapped .
TReference AddReference()
Create a new TReference to the Instance.
@@ -667,8 +679,8 @@ $(function() {
Task InstallationTask
The Task that completes when the BYOND version finished installing.
For downloading and installing game engines for a given system.
IEngineInstallation CreateInstallation(EngineVersion version, string path, Task installationTask)
Creates an IEngineInstallation for a given version .
+ValueTask< IEngineInstallationData > DownloadVersion(EngineVersion version, JobProgressReporter jobProgressReporter, CancellationToken cancellationToken)
Download a given engine version .
ValueTask UpgradeInstallation(EngineVersion version, string path, CancellationToken cancellationToken)
Does actions necessary to get upgrade a version installed by a previous version of TGS.
-ValueTask< IEngineInstallationData > DownloadVersion(EngineVersion version, JobProgressReporter? jobProgressReporter, CancellationToken cancellationToken)
Download a given engine version .
ValueTask Install(EngineVersion version, string path, bool deploymentPipelineProcesses, CancellationToken cancellationToken)
Does actions necessary to get an extracted installation working.
ValueTask TrustDmbPath(EngineVersion version, string fullDmbPath, CancellationToken cancellationToken)
Add a given fullDmbPath to the trusted DMBs list in BYOND's config.
For managing the engine installations.
diff --git a/_fetch_options_extensions_8cs_source.html b/_fetch_options_extensions_8cs_source.html
index db74527f9a..5db8e826bb 100644
--- a/_fetch_options_extensions_8cs_source.html
+++ b/_fetch_options_extensions_8cs_source.html
@@ -91,10 +91,10 @@ $(function() {
-
+
28 this FetchOptions fetchOptions,
-
+
31 CredentialsHandler credentialsHandler,
32 CancellationToken cancellationToken)
@@ -115,7 +115,7 @@ $(function() {
48 fetchOptions.OnUpdateTips = (_, _, _) => !cancellationToken.IsCancellationRequested;
49 fetchOptions.CredentialsProvider = credentialsHandler;
50 fetchOptions.RepositoryOperationStarting = _ => !cancellationToken.IsCancellationRequested;
-
+
@@ -123,7 +123,7 @@ $(function() {
-
+
69 var totalObjectsToProcess = transferProgress.TotalObjects * 2;
@@ -150,10 +150,10 @@ $(function() {
Extension methods for FetchOptions.
-static TransferProgressHandler TransferProgressHandler(ILogger logger, JobProgressReporter? progressReporter, CancellationToken cancellationToken)
Generate a LibGit2Sharp.Handlers.TransferProgressHandler from a given progressReporter and cancellat...
-static FetchOptions Hydrate(this FetchOptions fetchOptions, ILogger logger, JobProgressReporter? progressReporter, CredentialsHandler credentialsHandler, CancellationToken cancellationToken)
Hydrate a given set of fetchOptions .
-Progress reporter for a Job.
-void ReportProgress(double? progress)
Report progress.
+static TransferProgressHandler TransferProgressHandler(ILogger logger, JobProgressReporter progressReporter, CancellationToken cancellationToken)
Generate a LibGit2Sharp.Handlers.TransferProgressHandler from a given progressReporter and cancellat...
+static FetchOptions Hydrate(this FetchOptions fetchOptions, ILogger logger, JobProgressReporter progressReporter, CredentialsHandler credentialsHandler, CancellationToken cancellationToken)
Hydrate a given set of fetchOptions .
+Progress reporter for a Job.
+void ReportProgress(double? progress)
Report progress.
diff --git a/_i_dream_maker_8cs_source.html b/_i_dream_maker_8cs_source.html
index 7fb1a47af6..434ad3496a 100644
--- a/_i_dream_maker_8cs_source.html
+++ b/_i_dream_maker_8cs_source.html
@@ -95,7 +95,7 @@ $(function() {
27 CancellationToken cancellationToken);
-Progress reporter for a Job.
+Progress reporter for a Job.
For managing the compiler.
ValueTask DeploymentProcess(Job job, IDatabaseContextFactory databaseContextFactory, JobProgressReporter progressReporter, CancellationToken cancellationToken)
Create and a compile job and insert it into the database. Meant to be called by a IJobManager.
diff --git a/_i_engine_installer_8cs_source.html b/_i_engine_installer_8cs_source.html
index 66ef72c7ac..42e7a1aff5 100644
--- a/_i_engine_installer_8cs_source.html
+++ b/_i_engine_installer_8cs_source.html
@@ -89,7 +89,7 @@ $(function() {
-
+
40 ValueTask
Install(
EngineVersion version,
string path,
bool deploymentPipelineProcesses, CancellationToken cancellationToken);
@@ -101,12 +101,12 @@ $(function() {
Information about an engine installation.
-Progress reporter for a Job.
+Progress reporter for a Job.
Represents a BYOND installation.
For downloading and installing game engines for a given system.
IEngineInstallation CreateInstallation(EngineVersion version, string path, Task installationTask)
Creates an IEngineInstallation for a given version .
+ValueTask< IEngineInstallationData > DownloadVersion(EngineVersion version, JobProgressReporter jobProgressReporter, CancellationToken cancellationToken)
Download a given engine version .
ValueTask UpgradeInstallation(EngineVersion version, string path, CancellationToken cancellationToken)
Does actions necessary to get upgrade a version installed by a previous version of TGS.
-ValueTask< IEngineInstallationData > DownloadVersion(EngineVersion version, JobProgressReporter? jobProgressReporter, CancellationToken cancellationToken)
Download a given engine version .
ValueTask Install(EngineVersion version, string path, bool deploymentPipelineProcesses, CancellationToken cancellationToken)
Does actions necessary to get an extracted installation working.
ValueTask TrustDmbPath(EngineVersion version, string fullDmbPath, CancellationToken cancellationToken)
Add a given fullDmbPath to the trusted DMBs list in BYOND's config.
Task CleanCache(CancellationToken cancellationToken)
Attempts to cleans the engine's cache folder for the system.
diff --git a/_i_engine_manager_8cs_source.html b/_i_engine_manager_8cs_source.html
index d9cbfdedd4..0ac012ed13 100644
--- a/_i_engine_manager_8cs_source.html
+++ b/_i_engine_manager_8cs_source.html
@@ -94,8 +94,8 @@ $(function() {
-
-
+
+
40 Stream? customVersionStream,
41 bool allowInstallation,
@@ -112,13 +112,13 @@ $(function() {
Information about an engine installation.
-Progress reporter for a Job.
+Progress reporter for a Job.
For managing the engine installations.
ValueTask DeleteVersion(JobProgressReporter progressReporter, EngineVersion version, CancellationToken cancellationToken)
Deletes a given version from the disk.
IReadOnlyList< EngineVersion > InstalledVersions
The installed EngineVersions.
EngineVersion? ActiveVersion
The currently active EngineVersion.
+ValueTask ChangeVersion(JobProgressReporter progressReporter, EngineVersion version, Stream? customVersionStream, bool allowInstallation, CancellationToken cancellationToken)
Change the active EngineVersion.
ValueTask< IEngineExecutableLock > UseExecutables(EngineVersion? requiredVersion, string? trustDmbFullPath, CancellationToken cancellationToken)
Lock the current installation's location and return a IEngineExecutableLock.
-ValueTask ChangeVersion(JobProgressReporter? progressReporter, EngineVersion version, Stream? customVersionStream, bool allowInstallation, CancellationToken cancellationToken)
Change the active EngineVersion.
Represents a component meant to be started and stopped by its parent component.
diff --git a/_i_process_base_8cs_source.html b/_i_process_base_8cs_source.html
index 5f6e7e308b..269c861c3b 100644
--- a/_i_process_base_8cs_source.html
+++ b/_i_process_base_8cs_source.html
@@ -86,7 +86,7 @@ $(function() {
-
+
@@ -101,7 +101,7 @@ $(function() {
void SuspendProcess()
Suspends the process.
void ResumeProcess()
Resumes the process.
void AdjustPriority(bool higher)
Set's the owned global::System.Diagnostics.Process.PriorityClass to a non-normal value.
-long MemoryUsage
Gets the process' memory usage in bytes.
+long? MemoryUsage
Gets the process' memory usage in bytes.
ValueTask CreateDump(string outputFile, bool minidump, CancellationToken cancellationToken)
Create a dump file of the process.
Task< int?> Lifetime
The Task<TResult> resulting in the exit code of the process or null if the process was detached.
diff --git a/_i_repository_8cs_source.html b/_i_repository_8cs_source.html
index b878a83733..14a65fbb84 100644
--- a/_i_repository_8cs_source.html
+++ b/_i_repository_8cs_source.html
@@ -98,13 +98,13 @@ $(function() {
41 Task<bool>
IsSha(
string committish, CancellationToken cancellationToken);
-
+
58 bool updateSubmodules,
59 bool moveCurrentReference,
-
+
61 CancellationToken cancellationToken);
@@ -117,8 +117,8 @@ $(function() {
83 CancellationToken cancellationToken);
-
-
+
+
98 bool deploymentPipeline,
@@ -162,7 +162,7 @@ $(function() {
Parameters for creating a TestMerge.
-Progress reporter for a Job.
+Progress reporter for a Job.
Represents an on-disk git repository.
Task< DateTimeOffset > TimestampCommit(string sha, CancellationToken cancellationToken)
Gets the DateTimeOffset a given sha was created on.
@@ -176,9 +176,9 @@ $(function() {
string Head
The SHA of the IRepository HEAD.
Task ResetToSha(string sha, JobProgressReporter progressReporter, CancellationToken cancellationToken)
Requires the current HEAD to be a reference. Hard resets the reference to the given sha.
Task< bool > CommittishIsParent(string committish, CancellationToken cancellationToken)
Check if a given committish is a parent of the current Head.
-ValueTask CheckoutObject(string committish, string? username, string? password, bool updateSubmodules, bool moveCurrentReference, JobProgressReporter? progressReporter, CancellationToken cancellationToken)
Checks out a given committish .
+ValueTask CheckoutObject(string committish, string? username, string? password, bool updateSubmodules, bool moveCurrentReference, JobProgressReporter progressReporter, CancellationToken cancellationToken)
Checks out a given committish .
Task< bool > IsSha(string committish, CancellationToken cancellationToken)
Checks if a given committish is a sha.
-ValueTask FetchOrigin(JobProgressReporter? progressReporter, string? username, string? password, bool deploymentPipeline, CancellationToken cancellationToken)
Fetch commits from the origin repository.
+ValueTask FetchOrigin(JobProgressReporter progressReporter, string? username, string? password, bool deploymentPipeline, CancellationToken cancellationToken)
Fetch commits from the origin repository.
Uri Origin
The current origin remote the IRepository is using.
ValueTask< TestMergeResult > AddTestMerge(TestMergeParameters testMergeParameters, string committerName, string committerEmail, string? username, string? password, bool updateSubmodules, JobProgressReporter progressReporter, CancellationToken cancellationToken)
Attempt to merge the revision specified by a given set of testMergeParameters into HEAD.
diff --git a/_i_repository_manager_8cs_source.html b/_i_repository_manager_8cs_source.html
index 0673ff0e0c..e6ae8d45b8 100644
--- a/_i_repository_manager_8cs_source.html
+++ b/_i_repository_manager_8cs_source.html
@@ -93,12 +93,12 @@ $(function() {
-
+
44 string? initialBranch,
-
+
48 bool recurseSubmodules,
49 CancellationToken cancellationToken);
@@ -106,9 +106,9 @@ $(function() {
-Progress reporter for a Job.
+Progress reporter for a Job.
Factory for creating and loading IRepositorys.
-ValueTask< IRepository?> CloneRepository(Uri url, string? initialBranch, string? username, string? password, JobProgressReporter? progressReporter, bool recurseSubmodules, CancellationToken cancellationToken)
Clone the repository at url .
+ValueTask< IRepository?> CloneRepository(Uri url, string? initialBranch, string? username, string? password, JobProgressReporter progressReporter, bool recurseSubmodules, CancellationToken cancellationToken)
Clone the repository at url .
bool CloneInProgress
If a CloneRepository(Uri, string, string, string, JobProgressReporter, bool, CancellationToken) opera...
ValueTask< IRepository?> LoadRepository(CancellationToken cancellationToken)
Attempt to load the IRepository from the default location.
ValueTask DeleteRepository(CancellationToken cancellationToken)
Delete the current repository.
diff --git a/_job_entrypoint_8cs_source.html b/_job_entrypoint_8cs_source.html
index 78d73be820..9c90610055 100644
--- a/_job_entrypoint_8cs_source.html
+++ b/_job_entrypoint_8cs_source.html
@@ -93,7 +93,7 @@ $(function() {
24 CancellationToken cancellationToken);
-Progress reporter for a Job.
+Progress reporter for a Job.
For interacting with the instance services.
Factory for scoping usage of IDatabaseContexts. Meant for use by Components.
diff --git a/_job_progress_reporter_8cs_source.html b/_job_progress_reporter_8cs_source.html
index a501cf3919..1c25b73303 100644
--- a/_job_progress_reporter_8cs_source.html
+++ b/_job_progress_reporter_8cs_source.html
@@ -80,121 +80,209 @@ $(function() {
Go to the documentation of this file.
3using Microsoft.Extensions.Logging;
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
33 readonly ILogger<JobProgressReporter>
logger;
-
-
-
-
-
-
-
-
-
-
-
-
63 this.logger =
logger ??
throw new ArgumentNullException(nameof(
logger));
-
64 this.callback =
callback ??
throw new ArgumentNullException(nameof(
callback));
-
-
-
67 logger.LogDebug(
"Job progress reporter created. Stage: {stageName}",
stageName ??
"(null)");
-
-
-
-
-
76 var clampedProgress = progress;
-
77 if (progress.HasValue)
-
78 if (progress > 1 || progress < 0)
-
-
-
81 new ArgumentOutOfRangeException(nameof(progress), progress,
"Progress must be a value from 0-1!"),
-
82 "Invalid progress value for stage {stageName}",
-
-
84 clampedProgress =
null;
-
-
-
+
4using Microsoft.Extensions.Logging.Abstractions;
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
34 readonly ILogger<JobProgressReporter>
logger;
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
-
-
-
-
-
102 if (percentage > 1 || percentage < 0)
-
-
-
105 new ArgumentOutOfRangeException(nameof(percentage), percentage,
"Percentage must be a value from 0-1!"),
-
106 "Invalid percentage value for stage {newStageName}! Clamping...",
-
107 newStageName ??
"(null)");
+
+
+
98 this.logger =
logger ??
throw new ArgumentNullException(nameof(
logger));
+
99 this.callback =
callback ??
throw new ArgumentNullException(nameof(
callback));
+
+
+
+
+
+
+
+
-
109 percentage = Math.Min(Math.Max(percentage, 0.0), 1.0);
-
+
109 logger.LogDebug(
"Job progress reporter created. Stage: {stageName}",
stageName ??
"(null)");
+
-
-
113 if (percentage + childBaseProgress > 1.0)
-
-
115 var remainingPercentage = 1.0 - childBaseProgress;
-
-
117 "Stage {newStageName} is overbudgeted ({budget}/{remainingPercentage})! Clamping...",
-
-
-
120 remainingPercentage);
-
121 percentage = remainingPercentage;
-
-
-
-
-
-
127 (currentStage, progress) =>
-
-
-
130 if (!progress.HasValue)
-
-
132 callback(currentStage, null);
-
-
-
-
136 var childLocalProgress = progress.Value * percentage;
-
-
-
-
-
-
-
-
-
-
-
Progress reporter for a Job.
-
double? lastProgress
The last progress value pushed into the callback.
-
double sectionProgression
The total progress reported so far in this section.
-
string? StageName
The name of the current stage.
-
readonly Action< string?, double?> callback
Progress reporter callback taking a description of what the job is currently doing and the (optional)...
-
JobProgressReporter CreateSection(string? newStageName, double percentage)
Create a subsection of the JobProgressReporter with its optional own stage name.
-
JobProgressReporter(ILogger< JobProgressReporter > logger, string? stageName, Action< string?, double?> callback)
Initializes a new instance of the JobProgressReporter class.
-
readonly ILogger< JobProgressReporter > logger
The ILogger<TCategoryName> for the JobProgressReporter.
-
void ReportProgress(double? progress)
Report progress.
-
string? stageName
Backing field for StageName.
+
+
+
+
+
+
+
+
+
+
+
+
124 new InvalidOperationException($
"Parent progress reporter has child sections that didn't complete! Current: {sectionProgression}"),
+
125 "TGS BUG: Progress reporter children didn't complete!");
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
148 new InvalidOperationException(
"Progress reporter is reporting progress with existing nested sections!"),
+
149 "TGS BUG: A progress reporter is using mixed local and nested progress, this is not supported");
+
+
+
152 var clampedProgress = progress;
+
153 if (progress.HasValue)
+
154 if (progress > 1 || progress < 0)
+
+
+
157 new ArgumentOutOfRangeException(nameof(progress), progress,
"Progress must be a value from 0-1!"),
+
158 "TGS BUG: Invalid progress value for stage {stageName}",
+
+
160 clampedProgress =
null;
+
+
+
+
+
+
+
+
+
+
+
178 if (percentage > 1 || percentage < 0)
+
+
+
181 new ArgumentOutOfRangeException(nameof(percentage), percentage,
"Percentage must be a value from 0-1!"),
+
182 "TGS BUG: Invalid percentage value for stage {newStageName}! Clamping...",
+
183 newStageName ??
"(null)");
+
+
185 percentage = Math.Min(Math.Max(percentage, 0.0), 1.0);
+
+
+
+
+
+
+
+
193 new InvalidOperationException(
"Progress reporter is creating a section with local progress!"),
+
194 "TGS BUG: A progress reporter is using mixed local and nested progress, this is not supported");
+
+
+
+
+
+
+
+
+
+
+
205 "Stage {newStageName} is overbudgeted ({budget}/{remainingPercentage})! Clamping...",
+
+
+
208 remainingPercentage);
+
209 percentage = remainingPercentage;
+
+
+
+
+
214 var childLocalProgress = 0.0;
+
+
+
+
218 (currentStage, progress) =>
+
+
+
221 if (!progress.HasValue)
+
+
223 callback(currentStage, null);
+
+
+
+
+
228 childLocalProgress = progress.Value * percentage;
+
+
+
+
+
+
+
+
+
+
+
239 newReporter.ReportProgress(0);
+
+
+
+
+
+
Progress reporter for a Job.
+
double? lastProgress
The last progress value pushed into the callback.
+
double sectionProgression
The total progress reported so far in this section.
+
string? StageName
The name of the current stage.
+
readonly Action< string?, double?> callback
Progress reporter callback taking a description of what the job is currently doing and the (optional)...
+
JobProgressReporter CreateSection(string? newStageName, double percentage)
Create a subsection of the JobProgressReporter with its optional own stage name.
+
JobProgressReporter(ILogger< JobProgressReporter > logger, string? stageName, Action< string?, double?> callback)
Initializes a new instance of the JobProgressReporter class.
+
readonly ILogger< JobProgressReporter > logger
The ILogger<TCategoryName> for the JobProgressReporter.
+
+
JobProgressReporter(ILogger< JobProgressReporter > logger, string? stageName, Action< string?, double?> callback, bool setStageName)
Initializes a new instance of the JobProgressReporter class.
+
JobProgressReporter()
Initializes a new instance of the JobProgressReporter class.
+
double? sectionReservations
The total progress reserved for use in this section.
+
void ReportProgress(double? progress)
Report progress.
+
string? stageName
Backing field for StageName.
+
Represents an Api.Models.Instance in the database.
diff --git a/_job_service_8cs_source.html b/_job_service_8cs_source.html
index 6100983377..7de5bbc3bb 100644
--- a/_job_service_8cs_source.html
+++ b/_job_service_8cs_source.html
@@ -482,101 +482,103 @@ $(function() {
460 QueueHubUpdate(job.
ToApi(),
false);
462 logger.LogTrace(
"Starting job...");
-
- 464 instanceCoreProvider.GetInstance(job.
Instance!),
- 465 databaseContextFactory,
-
-
-
-
-
-
-
- 473 logger.LogDebug(
"Job {jobId} completed!", job.
Id);
-
-
- 476 catch (OperationCanceledException ex)
-
- 478 logger.LogDebug(ex,
"Job {jobId} cancelled!", job.
Id);
- 479 job.Cancelled =
true;
-
-
-
-
- 484 job.ExceptionDetails = String.IsNullOrWhiteSpace(e.Message) ? e.InnerException?.Message : e.Message + $
" (Inner exception: {e.InnerException?.Message})";
-
-
-
-
- 489 job.ExceptionDetails = e.ToString();
-
-
-
-
-
- 495 await databaseContextFactory.UseContext(async databaseContext =>
-
- 497 var attachedJob =
new Job(jid);
-
- 499 databaseContext.Jobs.Attach(attachedJob);
- 500 attachedJob.StoppedAt = DateTimeOffset.UtcNow;
-
-
-
-
-
- 506 await databaseContext.Save(CancellationToken.None);
-
-
-
- 510 await databaseContextFactory.UseContext(async databaseContext =>
-
-
-
-
-
- 516 var finalJob = await databaseContext
-
-
- 519 .Include(x => x.Instance)
- 520 .Include(x => x.StartedBy)
- 521 .Include(x => x.CancelledBy)
- 522 .Where(dbJob => dbJob.Id == jid)
- 523 .FirstAsync(CancellationToken.None);
- 524 QueueHubUpdate(finalJob.ToApi(),
true);
-
-
-
-
- 529 lock (hubUpdateActions)
- 530 hubUpdateActions.Remove(jid);
-
-
-
-
-
-
- 537 await hubUpdatesTask;
-
-
-
- 541 logger.LogError(ex,
"Error in hub updates chain task!");
-
-
-
-
-
-
- 548 lock (synchronizationLock)
-
- 550 var handler = jobs[jid];
-
-
-
-
-
-
-
+
+
+
+
+ 467 using var innerReporter = progressReporter.CreateSection(
null, 1.0);
+
+ 469 instanceCoreProvider.GetInstance(job.
Instance!),
+ 470 databaseContextFactory,
+
+
+
+
+ 475 logger.LogDebug(
"Job {jobId} completed!", job.
Id);
+
+
+ 478 catch (OperationCanceledException ex)
+
+ 480 logger.LogDebug(ex,
"Job {jobId} cancelled!", job.
Id);
+ 481 job.Cancelled =
true;
+
+
+
+
+ 486 job.ExceptionDetails = String.IsNullOrWhiteSpace(e.Message) ? e.InnerException?.Message : e.Message + $
" (Inner exception: {e.InnerException?.Message})";
+
+
+
+
+ 491 job.ExceptionDetails = e.ToString();
+
+
+
+
+
+ 497 await databaseContextFactory.UseContext(async databaseContext =>
+
+ 499 var attachedJob =
new Job(jid);
+
+ 501 databaseContext.Jobs.Attach(attachedJob);
+ 502 attachedJob.StoppedAt = DateTimeOffset.UtcNow;
+
+
+
+
+
+ 508 await databaseContext.Save(CancellationToken.None);
+
+
+
+ 512 await databaseContextFactory.UseContext(async databaseContext =>
+
+
+
+
+
+ 518 var finalJob = await databaseContext
+
+
+ 521 .Include(x => x.Instance)
+ 522 .Include(x => x.StartedBy)
+ 523 .Include(x => x.CancelledBy)
+ 524 .Where(dbJob => dbJob.Id == jid)
+ 525 .FirstAsync(CancellationToken.None);
+ 526 QueueHubUpdate(finalJob.ToApi(),
true);
+
+
+
+
+ 531 lock (hubUpdateActions)
+ 532 hubUpdateActions.Remove(jid);
+
+
+
+
+
+
+ 539 await hubUpdatesTask;
+
+
+
+ 543 logger.LogError(ex,
"Error in hub updates chain task!");
+
+
+
+
+
+
+ 550 lock (synchronizationLock)
+
+ 552 var handler = jobs[jid];
+
+
+
+
+
+
+
virtual ? long Id
The ID of the entity.
@@ -594,7 +596,7 @@ $(function() {
void Cancel()
Cancels task.
Task< bool > Wait(CancellationToken cancellationToken)
Wait for task to complete.
bool Started
If the job has started.
-Progress reporter for a Job.
+Progress reporter for a Job.
readonly IConnectionMappedHubContext< JobsHub, IJobsHub > hub
The IHubContext for the JobsHub.
async Task< bool > RunJob(Job job, JobEntrypoint operation, CancellationToken cancellationToken)
Runner for JobHandlers.
diff --git a/_open_dream_installer_8cs_source.html b/_open_dream_installer_8cs_source.html
index 6cd8869e50..e2153674b5 100644
--- a/_open_dream_installer_8cs_source.html
+++ b/_open_dream_installer_8cs_source.html
@@ -160,230 +160,247 @@ $(function() {
-
+
-
-
- 141 Logger.LogTrace(
"Cloning OD repo...");
-
- 143 var progressSection1 = jobProgressReporter?.
CreateSection(
"Updating OpenDream git repository", 0.5f);
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- 158 Logger.LogTrace(
"OD repo seems to already exist, attempting load and fetch...");
-
-
- 161 throw new JobException(
"Can't load OpenDream repository! Please delete cache from disk!");
+ 139 ArgumentNullException.ThrowIfNull(jobProgressReporter);
+
+
+ 142 Logger.LogTrace(
"Cloning OD repo...");
+
+ 144 var progressSection1 = jobProgressReporter.
CreateSection(
"Updating OpenDream git repository", 0.5f);
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 159 progressSection1.Dispose();
+
+
- 163 await repo!.FetchOrigin(
-
-
-
-
-
-
-
- 171 var progressSection2 = jobProgressReporter?.
CreateSection(
"Checking out OpenDream version", 0.5f);
-
- 173 var committish = version.SourceSHA
- 174 ?? $
"{GeneralConfiguration.OpenDreamGitTagPrefix}{version.Version!.Semver()}";
-
- 176 await repo.CheckoutObject(
-
-
-
-
-
-
-
-
- 185 if (!await repo.CommittishIsParent(
"tgs-min-compat", cancellationToken))
-
+
+
+
+
+ 167 Logger.LogTrace(
"OD repo seems to already exist, attempting load and fetch...");
+
+
+ 170 throw new JobException(
"Can't load OpenDream repository! Please delete cache from disk!");
+
+
+
+
+
+
+
+
+
+ 180 progressSection1.Dispose();
+ 181 progressSection1 =
null;
+
+ 183 using (var progressSection2 = jobProgressReporter.
CreateSection(
"Checking out OpenDream version", 0.5f))
+
+ 185 var committish = version.SourceSHA
+ 186 ?? $
"{GeneralConfiguration.OpenDreamGitTagPrefix}{version.Version!.Semver()}";
-
-
-
-
-
-
-
-
-
- 198 public override async ValueTask
Install(
EngineVersion version,
string installPath,
bool deploymentPipelineProcesses, CancellationToken cancellationToken)
-
-
- 201 ArgumentNullException.ThrowIfNull(installPath);
-
-
-
-
-
-
- 208 Logger.LogDebug(
"Correcting extraction location...");
-
-
-
-
- 213 await Task.WhenAll(dirsTask, filesTask, dirCreateTask);
-
- 215 var dirsMoveTasks = dirsTask
-
-
-
-
-
-
-
-
- 224 var filesMoveTask = filesTask
-
-
-
-
-
-
-
-
-
- 234 await Task.WhenAll(dirsMoveTasks.Concat(filesMoveTask));
-
-
-
- 238 if (dotnetPath ==
null)
-
-
- 241 const string DeployDir =
"tgs_deploy";
- 242 int? buildExitCode =
null;
-
- 244 async shortenedPath =>
-
-
-
-
-
- 250 $
"run -c Release --project OpenDreamPackageTool -- --tgs -o {shortenedDeployPath}",
-
-
-
-
-
-
-
- 258 buildProcess.AdjustPriority(
false);
-
- 260 using (cancellationToken.Register(() => buildProcess.Terminate()))
- 261 buildExitCode = await buildProcess.Lifetime;
-
-
-
-
- 266 var buildOutputTask = buildProcess.GetCombinedOutput(cancellationToken);
- 267 if (!buildOutputTask.IsCompleted)
- 268 Logger.LogTrace(
"OD build complete, waiting for output...");
- 269 output = await buildOutputTask;
-
-
- 272 output =
"<Build output suppressed by configuration due to not being immediately available>";
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 210 progressSection1?.Dispose();
+
+
+
+ 215 public override async ValueTask
Install(
EngineVersion version,
string installPath,
bool deploymentPipelineProcesses, CancellationToken cancellationToken)
+
+
+ 218 ArgumentNullException.ThrowIfNull(installPath);
+
+
+
+
+
+
+ 225 Logger.LogDebug(
"Correcting extraction location...");
+
+
+
+
+ 230 await Task.WhenAll(dirsTask, filesTask, dirCreateTask);
+
+ 232 var dirsMoveTasks = dirsTask
+
+
+
+
+
+
+
+
+ 241 var filesMoveTask = filesTask
+
+
+
+
+
+
+
+
+
+ 251 await Task.WhenAll(dirsMoveTasks.Concat(filesMoveTask));
+
+
+
+ 255 if (dotnetPath ==
null)
+
+
+ 258 const string DeployDir =
"tgs_deploy";
+ 259 int? buildExitCode =
null;
+
+ 261 async shortenedPath =>
+
+
+
+
+
+ 267 $
"run -c Release --project OpenDreamPackageTool -- --tgs -o {shortenedDeployPath}",
+
+
+
+
+
-
- 275 "OpenDream build exited with code {exitCode}:{newLine}{output}",
-
-
-
-
-
-
-
- 283 if (buildExitCode != 0)
-
-
-
- 287 async ValueTask MoveDirs()
-
-
-
-
-
-
-
-
-
- 297 cancellationToken)));
-
+
+ 275 buildProcess.AdjustPriority(
false);
+
+ 277 using (cancellationToken.Register(() => buildProcess.Terminate()))
+ 278 buildExitCode = await buildProcess.Lifetime;
+
+
+
+
+ 283 var buildOutputTask = buildProcess.GetCombinedOutput(cancellationToken);
+ 284 if (!buildOutputTask.IsCompleted)
+ 285 Logger.LogTrace(
"OD build complete, waiting for output...");
+ 286 output = await buildOutputTask;
+
+
+ 289 output =
"<Build output suppressed by configuration due to not being immediately available>";
+
+
+ 292 "OpenDream build exited with code {exitCode}:{newLine}{output}",
+
+
+
+
+
+
- 300 async ValueTask MoveFiles()
-
-
-
-
-
-
-
-
-
- 310 cancellationToken)));
-
-
- 313 var dirsMoveTask = MoveDirs();
- 314 var outputFilesMoveTask = MoveFiles();
-
-
-
-
-
-
-
- 323 ArgumentNullException.ThrowIfNull(path);
- 324 return ValueTask.CompletedTask;
-
-
-
-
- 330 ArgumentNullException.ThrowIfNull(engineVersion);
- 331 ArgumentNullException.ThrowIfNull(fullDmbPath);
-
- 333 Logger.LogTrace(
"TrustDmbPath is a no-op: {path}", fullDmbPath);
- 334 return ValueTask.CompletedTask;
-
-
-
- 345 Func<string, ValueTask> shortenedPathOperation,
-
- 347 CancellationToken cancellationToken)
- 348 => shortenedPathOperation(originalPath);
+ 300 if (buildExitCode != 0)
+
+
+
+ 304 async ValueTask MoveDirs()
+
+
+
+
+
+
+
+
+
+ 314 cancellationToken)));
+
+
+ 317 async ValueTask MoveFiles()
+
+
+
+
+
+
+
+
+
+ 327 cancellationToken)));
+
+
+ 330 var dirsMoveTask = MoveDirs();
+ 331 var outputFilesMoveTask = MoveFiles();
+
+
+
+
+
+
+
+ 340 ArgumentNullException.ThrowIfNull(path);
+ 341 return ValueTask.CompletedTask;
+
+
+
+
+ 347 ArgumentNullException.ThrowIfNull(engineVersion);
+ 348 ArgumentNullException.ThrowIfNull(fullDmbPath);
- 356 protected void GetExecutablePaths(
string installationPath, out
string serverExePath, out
string compilerExePath)
-
- 358 var exeExtension = platformIdentifier.IsWindows
-
-
-
-
-
-
-
- 366 $
"Robust.Server{exeExtension}");
-
-
-
-
-
- 372 $
"DMCompiler{exeExtension}");
-
-
-
+ 350 Logger.LogTrace(
"TrustDmbPath is a no-op: {path}", fullDmbPath);
+ 351 return ValueTask.CompletedTask;
+
+
+
+ 362 Func<string, ValueTask> shortenedPathOperation,
+
+ 364 CancellationToken cancellationToken)
+ 365 => shortenedPathOperation(originalPath);
+
+ 373 protected void GetExecutablePaths(
string installationPath, out
string serverExePath, out
string compilerExePath)
+
+ 375 var exeExtension = platformIdentifier.IsWindows
+
+
+
+
+
+
+
+ 383 $
"Robust.Server{exeExtension}");
+
+
+
+
+
+ 389 $
"DMCompiler{exeExtension}");
+
+
+
Information about an engine installation.
Extension methods for the ValueTask and ValueTask<TResult> classes.
static async ValueTask WhenAll(IEnumerable< ValueTask > tasks)
Fully await a given list of tasks .
@@ -393,21 +410,21 @@ $(function() {
ILogger< EngineInstallerBase > Logger
Gets the ILogger for the EngineInstallerBase.
Implementation of IEngineInstallation for EngineType.OpenDream.
Implementation of IEngineInstaller for EngineType.OpenDream.
-void GetExecutablePaths(string installationPath, out string serverExePath, out string compilerExePath)
Gets the paths to the server and client executables.
+void GetExecutablePaths(string installationPath, out string serverExePath, out string compilerExePath)
Gets the paths to the server and client executables.
readonly IAbstractHttpClientFactory httpClientFactory
The IAbstractHttpClientFactory for the OpenDreamInstaller.
override EngineType TargetEngineType
readonly IPlatformIdentifier platformIdentifier
The IPlatformIdentifier for the OpenDreamInstaller.
readonly IRepositoryManager repositoryManager
The IRepositoryManager for the OpenDream repository.
-override async ValueTask Install(EngineVersion version, string installPath, bool deploymentPipelineProcesses, CancellationToken cancellationToken)
Does actions necessary to get an extracted installation working. A ValueTask representing the running...
-override async ValueTask< IEngineInstallationData > DownloadVersion(EngineVersion version, JobProgressReporter? jobProgressReporter, CancellationToken cancellationToken)
Download a given engine version . A ValueTask<TResult> resulting in the IEngineInstallationData for t...
-override ValueTask TrustDmbPath(EngineVersion engineVersion, string fullDmbPath, CancellationToken cancellationToken)
Add a given fullDmbPath to the trusted DMBs list in BYOND's config. A ValueTask representing the run...
+override async ValueTask Install(EngineVersion version, string installPath, bool deploymentPipelineProcesses, CancellationToken cancellationToken)
Does actions necessary to get an extracted installation working. A ValueTask representing the running...
+override ValueTask TrustDmbPath(EngineVersion engineVersion, string fullDmbPath, CancellationToken cancellationToken)
Add a given fullDmbPath to the trusted DMBs list in BYOND's config. A ValueTask representing the run...
const string ServerDir
The OD server directory name.
+override async ValueTask< IEngineInstallationData > DownloadVersion(EngineVersion version, JobProgressReporter jobProgressReporter, CancellationToken cancellationToken)
Download a given engine version . A ValueTask<TResult> resulting in the IEngineInstallationData for t...
override IEngineInstallation CreateInstallation(EngineVersion version, string path, Task installationTask)
Creates an IEngineInstallation for a given version . The IEngineInstallation.
override Task CleanCache(CancellationToken cancellationToken)
Attempts to cleans the engine's cache folder for the system. A Task representing the running operatio...
OpenDreamInstaller(IIOManager ioManager, ILogger< OpenDreamInstaller > logger, IPlatformIdentifier platformIdentifier, IProcessExecutor processExecutor, IRepositoryManager repositoryManager, IAsyncDelayer asyncDelayer, IAbstractHttpClientFactory httpClientFactory, IOptions< GeneralConfiguration > generalConfigurationOptions, IOptions< SessionConfiguration > sessionConfigurationOptions)
Initializes a new instance of the OpenDreamInstaller class.
const string InstallationCompilerDirectory
The name of the subdirectory in an installation's BinDir used to store the compiler binaries.
const string InstallationSourceSubDirectory
The name of the subdirectory used for the RepositoryEngineInstallationData's copy.
-override ValueTask UpgradeInstallation(EngineVersion version, string path, CancellationToken cancellationToken)
Does actions necessary to get upgrade a version installed by a previous version of TGS....
+override ValueTask UpgradeInstallation(EngineVersion version, string path, CancellationToken cancellationToken)
Does actions necessary to get upgrade a version installed by a previous version of TGS....
readonly IAsyncDelayer asyncDelayer
The IAsyncDelayer for the OpenDreamInstaller.
virtual ValueTask HandleExtremelyLongPathOperation(Func< string, ValueTask > shortenedPathOperation, string originalPath, CancellationToken cancellationToken)
Perform an operation on a very long path.
const string BinDir
The bin directory name.
@@ -419,16 +436,20 @@ $(function() {
bool LowPriorityDeploymentProcesses
If the deployment DreamMaker and DreamDaemon instances are set to be below normal priority processes.
An IIOManager that resolve relative paths from another IIOManager to a subdirectory of that.
Operation exceptions thrown from the context of a Models.Job.
-Progress reporter for a Job.
-JobProgressReporter CreateSection(string? newStageName, double percentage)
Create a subsection of the JobProgressReporter with its optional own stage name.
+Progress reporter for a Job.
+JobProgressReporter CreateSection(string? newStageName, double percentage)
Create a subsection of the JobProgressReporter with its optional own stage name.
Helper methods for working with the dotnet executable.
static async ValueTask< string?> GetDotnetPath(IPlatformIdentifier platformIdentifier, IIOManager ioManager, CancellationToken cancellationToken)
Locate a dotnet executable to use.
async ValueTask< IProcess > LaunchProcess(string fileName, string workingDirectory, string arguments, CancellationToken cancellationToken, IReadOnlyDictionary< string, string >? environment, string? fileRedirect, bool readStandardHandles, bool noShellExecute)
Launch a IProcess. A ValueTask<TResult> resulting in the new IProcess.
Represents a BYOND installation.
+Represents an on-disk git repository.
+Task< bool > CommittishIsParent(string committish, CancellationToken cancellationToken)
Check if a given committish is a parent of the current Head.
+ValueTask CheckoutObject(string committish, string? username, string? password, bool updateSubmodules, bool moveCurrentReference, JobProgressReporter progressReporter, CancellationToken cancellationToken)
Checks out a given committish .
+ValueTask FetchOrigin(JobProgressReporter progressReporter, string? username, string? password, bool deploymentPipeline, CancellationToken cancellationToken)
Fetch commits from the origin repository.
Factory for creating and loading IRepositorys.
-ValueTask< IRepository?> CloneRepository(Uri url, string? initialBranch, string? username, string? password, JobProgressReporter? progressReporter, bool recurseSubmodules, CancellationToken cancellationToken)
Clone the repository at url .
+ValueTask< IRepository?> CloneRepository(Uri url, string? initialBranch, string? username, string? password, JobProgressReporter progressReporter, bool recurseSubmodules, CancellationToken cancellationToken)
Clone the repository at url .
ValueTask< IRepository?> LoadRepository(CancellationToken cancellationToken)
Attempt to load the IRepository from the default location.
Interface for using filesystems.
Task< IReadOnlyList< string > > GetFiles(string path, CancellationToken cancellationToken)
Returns full file names in a given path .
diff --git a/_process_8cs_source.html b/_process_8cs_source.html
index cc87b08400..b35b91c011 100644
--- a/_process_8cs_source.html
+++ b/_process_8cs_source.html
@@ -97,231 +97,245 @@ $(function() {
-
-
-
-
-
-
- 41 readonly global::System.Diagnostics.Process
handle;
-
-
-
-
-
-
-
-
-
-
-
- 75 global::System.Diagnostics.Process
handle,
- 76 CancellationTokenSource? readerCts,
-
-
-
-
- 81 this.handle =
handle ??
throw new ArgumentNullException(nameof(
handle));
-
-
-
-
-
-
-
-
-
-
-
- 93 this.logger =
logger ??
throw new ArgumentNullException(nameof(
logger));
-
-
+
+
+
+
+
+
+ 32 return handle.VirtualMemorySize64;
+
+
+
+ 36 logger.LogWarning(ex,
"Failed to get PID {pid}'s memory usage!",
Id);
+
+
+
+
+
+
+
+
+
+ 55 readonly global::System.Diagnostics.Process
handle;
+
+
+
+
+
+
+
+
+
+
+
+ 89 global::System.Diagnostics.Process
handle,
+ 90 CancellationTokenSource? readerCts,
+
+
+
+
+ 95 this.handle =
handle ??
throw new ArgumentNullException(nameof(
handle));
-
-
-
-
-
+
+
+
+
+
- 103 Startup = Task.Factory.StartNew(
-
-
-
-
- 108 handle.WaitForInputIdle();
-
-
-
- 112 logger.LogTrace(ex,
"WaitForInputIdle() failed, this is normal.");
-
-
- 115 CancellationToken.None,
-
- 117 TaskScheduler.Current);
-
- 119 logger.LogTrace(
"Created process ID: {pid}",
Id);
-
-
-
-
- 125 if (Interlocked.Exchange(ref
disposed, 1) != 0)
-
-
- 128 logger.LogTrace(
"Disposing PID {pid}...",
Id);
-
-
-
-
-
-
+
+
+
+
+ 107 this.logger =
logger ??
throw new ArgumentNullException(nameof(
logger));
+
+
+
+
+
+
+
+
+
+ 117 Startup = Task.Factory.StartNew(
+
+
+
+
+ 122 handle.WaitForInputIdle();
+
+
+
+ 126 logger.LogTrace(ex,
"WaitForInputIdle() failed, this is normal.");
+
+
+ 129 CancellationToken.None,
+
+ 131 TaskScheduler.Current);
+
+ 133 logger.LogTrace(
"Created process ID: {pid}",
Id);
+
-
-
-
-
-
-
-
- 144 throw new InvalidOperationException(
"Output/Error stream reading was not enabled!");
-
- 146 return readTask.WaitAsync(cancellationToken);
-
-
-
-
-
-
-
- 155 logger.LogTrace(
"PID {pid} already exited",
Id);
-
-
-
-
-
- 161 logger.LogTrace(
"Terminating PID {pid}...",
Id);
-
- 163 if (!
handle.WaitForExit(5000))
- 164 logger.LogWarning(
"WaitForExit() on PID {pid} timed out!",
Id);
-
-
-
- 168 logger.LogDebug(e,
"PID {pid} termination exception!",
Id);
-
-
-
-
-
-
- 176 var targetPriority = higher ? ProcessPriorityClass.AboveNormal : ProcessPriorityClass.BelowNormal;
-
-
- 179 handle.PriorityClass = targetPriority;
- 180 logger.LogTrace(
"Set PID {pid} to {targetPriority} priority",
Id, targetPriority);
-
-
-
- 184 logger.LogWarning(ex,
"Unable to set priority for PID {id} to {targetPriority}!",
Id, targetPriority);
-
-
-
-
-
-
-
-
-
- 195 logger.LogTrace(
"Suspended PID {pid}",
Id);
-
-
-
- 199 logger.LogError(e,
"Failed to suspend PID {pid}!",
Id);
-
-
-
-
-
-
-
-
-
-
- 211 logger.LogTrace(
"Resumed PID {pid}",
Id);
-
-
-
- 215 logger.LogError(e,
"Failed to resume PID {pid}!",
Id);
-
-
-
-
-
-
-
-
- 225 logger.LogTrace(
"PID {pid} Username: {username}",
Id, result);
-
-
-
- 230 public ValueTask
CreateDump(
string outputFile,
bool minidump, CancellationToken cancellationToken)
-
- 232 ArgumentNullException.ThrowIfNull(outputFile);
-
-
- 235 logger.LogTrace(
"Dumping PID {pid} to {dumpFilePath}...",
Id, outputFile);
-
-
-
-
-
-
-
-
-
-
-
- 251 catch (OperationCanceledException ex)
-
- 253 logger.LogTrace(ex,
"Process lifetime task cancelled!");
- 254 hasExited =
handle.HasExited;
-
-
-
-
-
- 260 var exitCode =
handle.ExitCode;
- 261 logger.LogTrace(
"PID {pid} exited with code {exitCode}",
Id, exitCode);
-
-
-
-
-
-
+
+
+ 139 if (Interlocked.Exchange(ref
disposed, 1) != 0)
+
+
+ 142 logger.LogTrace(
"Disposing PID {pid}...",
Id);
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 158 throw new InvalidOperationException(
"Output/Error stream reading was not enabled!");
+
+ 160 return readTask.WaitAsync(cancellationToken);
+
+
+
+
+
+
+
+ 169 logger.LogTrace(
"PID {pid} already exited",
Id);
+
+
+
+
+
+ 175 logger.LogTrace(
"Terminating PID {pid}...",
Id);
+
+ 177 if (!
handle.WaitForExit(5000))
+ 178 logger.LogWarning(
"WaitForExit() on PID {pid} timed out!",
Id);
+
+
+
+ 182 logger.LogDebug(e,
"PID {pid} termination exception!",
Id);
+
+
+
+
+
+
+ 190 var targetPriority = higher ? ProcessPriorityClass.AboveNormal : ProcessPriorityClass.BelowNormal;
+
+
+ 193 handle.PriorityClass = targetPriority;
+ 194 logger.LogTrace(
"Set PID {pid} to {targetPriority} priority",
Id, targetPriority);
+
+
+
+ 198 logger.LogWarning(ex,
"Unable to set priority for PID {id} to {targetPriority}!",
Id, targetPriority);
+
+
+
+
+
+
+
+
+
+ 209 logger.LogTrace(
"Suspended PID {pid}",
Id);
+
+
+
+ 213 logger.LogError(e,
"Failed to suspend PID {pid}!",
Id);
+
+
+
+
+
+
+
+
+
+
+ 225 logger.LogTrace(
"Resumed PID {pid}",
Id);
+
+
+
+ 229 logger.LogError(e,
"Failed to resume PID {pid}!",
Id);
+
+
+
+
+
+
+
+
+ 239 logger.LogTrace(
"PID {pid} Username: {username}",
Id, result);
+
+
+
+ 244 public ValueTask
CreateDump(
string outputFile,
bool minidump, CancellationToken cancellationToken)
+
+ 246 ArgumentNullException.ThrowIfNull(outputFile);
+
+
+ 249 logger.LogTrace(
"Dumping PID {pid} to {dumpFilePath}...",
Id, outputFile);
+
+
+
+
+
+
+
+
+
+
+
+ 265 catch (OperationCanceledException ex)
+
+ 267 logger.LogTrace(ex,
"Process lifetime task cancelled!");
+ 268 hasExited =
handle.HasExited;
+
+
+
+
+
+ 274 var exitCode =
handle.ExitCode;
+ 275 logger.LogTrace(
"PID {pid} exited with code {exitCode}",
Id, exitCode);
+
+
+
+
+
+
IIOManager that resolves paths to Environment.CurrentDirectory.
const TaskCreationOptions BlockingTaskCreationOptions
The TaskCreationOptions used to spawn Tasks for potentially long running, blocking operations.
-Process(IProcessFeatures processFeatures, global::System.Diagnostics.Process handle, CancellationTokenSource? readerCts, Task< string?>? readTask, ILogger< Process > logger, bool preExisting)
Initializes a new instance of the Process class.
+Process(IProcessFeatures processFeatures, global::System.Diagnostics.Process handle, CancellationTokenSource? readerCts, Task< string?>? readTask, ILogger< Process > logger, bool preExisting)
Initializes a new instance of the Process class.
void CheckDisposed()
Throws an ObjectDisposedException if a method of the Process was called after DisposeAsync.
-async ValueTask DisposeAsync()
+async ValueTask DisposeAsync()
-readonly global::System.Diagnostics.Process handle
The global::System.Diagnostics.Process object.
+readonly global::System.Diagnostics.Process handle
The global::System.Diagnostics.Process object.
Task< int?> Lifetime
The Task<TResult> resulting in the exit code of the process or null if the process was detached.
-Task< string?> GetCombinedOutput(CancellationToken cancellationToken)
Get the stderr and stdout output of the IProcess. A Task<TResult> resulting in the stderr and stdout ...
-void AdjustPriority(bool higher)
Set's the owned global::System.Diagnostics.Process.PriorityClass to a non-normal value.
-ValueTask CreateDump(string outputFile, bool minidump, CancellationToken cancellationToken)
Create a dump file of the process. A ValueTask representing the running operation.
-volatile int disposed
If the Process was disposed.
-void Terminate()
Asycnhronously terminates the process. To ensure the IProcess has ended, use the IProcessBase....
-readonly ILogger< Process > logger
The ILogger for the Process.
-void SuspendProcess()
Suspends the process.
-readonly CancellationTokenSource cancellationTokenSource
The CancellationTokenSource used to shutdown the readTask and Lifetime.
-string GetExecutingUsername()
Get the name of the account executing the IProcess. The name of the account executing the IProcess.
-void ResumeProcess()
Resumes the process.
-long MemoryUsage
Gets the process' memory usage in bytes.
-readonly SafeProcessHandle safeHandle
The global::System.Diagnostics.Process.SafeHandle.
-readonly IProcessFeatures processFeatures
The IProcessFeatures for the Process.
+Task< string?> GetCombinedOutput(CancellationToken cancellationToken)
Get the stderr and stdout output of the IProcess. A Task<TResult> resulting in the stderr and stdout ...
+void AdjustPriority(bool higher)
Set's the owned global::System.Diagnostics.Process.PriorityClass to a non-normal value.
+ValueTask CreateDump(string outputFile, bool minidump, CancellationToken cancellationToken)
Create a dump file of the process. A ValueTask representing the running operation.
+volatile int disposed
If the Process was disposed.
+void Terminate()
Asycnhronously terminates the process. To ensure the IProcess has ended, use the IProcessBase....
+readonly ILogger< Process > logger
The ILogger for the Process.
+void SuspendProcess()
Suspends the process.
+readonly CancellationTokenSource cancellationTokenSource
The CancellationTokenSource used to shutdown the readTask and Lifetime.
+string GetExecutingUsername()
Get the name of the account executing the IProcess. The name of the account executing the IProcess.
+void ResumeProcess()
Resumes the process.
+readonly SafeProcessHandle safeHandle
The global::System.Diagnostics.Process.SafeHandle.
+readonly IProcessFeatures processFeatures
The IProcessFeatures for the Process.
Task Startup
The Task representing the time until the IProcess becomes "idle".
-readonly? Task< string?> readTask
The Task<TResult> resulting in the process' standard output/error text.
-async Task< int?> WrapLifetimeTask()
Attaches a log message to the process' exit event.
+long? MemoryUsage
Gets the process' memory usage in bytes.
+readonly? Task< string?> readTask
The Task<TResult> resulting in the process' standard output/error text.
+async Task< int?> WrapLifetimeTask()
Attaches a log message to the process' exit event.
Abstraction for suspending and resuming processes.
string GetExecutingUsername(global::System.Diagnostics.Process process)
Get the name of the user executing a given process .
ValueTask CreateDump(global::System.Diagnostics.Process process, string outputFile, bool minidump, CancellationToken cancellationToken)
Create a dump file for a given process .
diff --git a/_repository_8cs_source.html b/_repository_8cs_source.html
index 200fd52000..65043f69a9 100644
--- a/_repository_8cs_source.html
+++ b/_repository_8cs_source.html
@@ -240,907 +240,969 @@ $(function() {
232 logger.LogTrace(
"Fetching refspec {refSpec}...", refSpec);
234 var remote =
libGitRepo.Network.Remotes.First();
-
-
-
-
- 239 new FetchOptions().Hydrate(
-
- 241 progressReporter.
CreateSection($
"Fetch {refSpec}", progressFactor),
-
-
-
-
- 246 catch (UserCancelledException ex)
-
- 248 logger.LogTrace(ex,
"Suppressing fetch cancel exception");
-
- 250 catch (LibGit2SharpException ex)
-
-
-
-
- 255 cancellationToken.ThrowIfCancellationRequested();
-
-
-
- 259 cancellationToken.ThrowIfCancellationRequested();
-
- 261 var objectName = testMergeParameters.TargetCommitSha ?? localBranchName;
- 262 var gitObject =
libGitRepo.Lookup(objectName) ??
throw new JobException($
"Could not find object to merge: {objectName}");
-
- 264 testMergeParameters.TargetCommitSha = gitObject.Sha;
-
- 266 cancellationToken.ThrowIfCancellationRequested();
-
-
-
-
-
- 272 CommitOnSuccess = commitMessage == null,
- 273 FailOnConflict = false,
- 274 FastForwardStrategy = FastForwardStrategy.NoFastForward,
-
- 276 OnCheckoutProgress = CheckoutProgressHandler(
- 277 progressReporter.CreateSection($
"Merge {testMergeParameters.TargetCommitSha[..7]}", progressFactor)),
-
-
-
-
-
-
-
- 285 cancellationToken.ThrowIfCancellationRequested();
-
- 287 if (result.Status == MergeStatus.Conflicts)
-
- 289 var repoStatus = libGitRepo.RetrieveStatus();
- 290 conflictedPaths = new List<string>();
- 291 foreach (var file in repoStatus)
- 292 if (file.State == FileStatus.Conflicted)
- 293 conflictedPaths.Add(file.FilePath);
-
- 295 var revertTo = originalCommit.CanonicalName ?? originalCommit.Tip.Sha;
- 296 logger.LogDebug(
"Merge conflict, aborting and reverting to {revertTarget}", revertTo);
- 297 progressReporter.ReportProgress(0);
- 298 RawCheckout(revertTo, false, progressReporter.CreateSection(
"Hard Reset to {revertTo}", 1.0), cancellationToken);
- 299 cancellationToken.ThrowIfCancellationRequested();
-
-
-
-
-
-
- 306 TaskScheduler.Current);
-
- 308 if (result!.Status == MergeStatus.Conflicts)
-
- 310 var arguments =
new List<string>
-
- 312 originalCommit.Tip.Sha,
-
-
-
-
-
- 318 arguments.AddRange(conflictedPaths!);
+ 235 using var fetchReporter = progressReporter.
CreateSection($
"Fetch {refSpec}", progressFactor);
+
+
+
+
+ 240 new FetchOptions().Hydrate(
+
+
+
+
+
+
+ 247 catch (UserCancelledException ex)
+
+ 249 logger.LogTrace(ex,
"Suppressing fetch cancel exception");
+
+ 251 catch (LibGit2SharpException ex)
+
+
+
+
+ 256 cancellationToken.ThrowIfCancellationRequested();
+
+
+
+ 260 cancellationToken.ThrowIfCancellationRequested();
+
+ 262 var objectName = testMergeParameters.TargetCommitSha ?? localBranchName;
+ 263 var gitObject =
libGitRepo.Lookup(objectName) ??
throw new JobException($
"Could not find object to merge: {objectName}");
+
+ 265 testMergeParameters.TargetCommitSha = gitObject.Sha;
+
+ 267 cancellationToken.ThrowIfCancellationRequested();
+
+
+
+ 271 using var mergeReporter = progressReporter.
CreateSection($
"Merge {testMergeParameters.TargetCommitSha[..7]}", progressFactor);
+
+
+ 274 CommitOnSuccess = commitMessage == null,
+ 275 FailOnConflict = false,
+ 276 FastForwardStrategy = FastForwardStrategy.NoFastForward,
+
+ 278 OnCheckoutProgress = CheckoutProgressHandler(mergeReporter),
+
+
+
+
+
+
+
+ 286 cancellationToken.ThrowIfCancellationRequested();
+
+ 288 if (result.Status == MergeStatus.Conflicts)
+
+ 290 var repoStatus = libGitRepo.RetrieveStatus();
+ 291 conflictedPaths = new List<string>();
+ 292 foreach (var file in repoStatus)
+ 293 if (file.State == FileStatus.Conflicted)
+ 294 conflictedPaths.Add(file.FilePath);
+
+ 296 var revertTo = originalCommit.CanonicalName ?? originalCommit.Tip.Sha;
+ 297 logger.LogDebug(
"Merge conflict, aborting and reverting to {revertTarget}", revertTo);
+ 298 progressReporter.ReportProgress(0);
+ 299 using var revertReporter = progressReporter.CreateSection(
"Hard Reset to {revertTo}", 1.0);
+ 300 RawCheckout(revertTo, false, revertReporter, cancellationToken);
+ 301 cancellationToken.ThrowIfCancellationRequested();
+
+
+
+
+
+
+ 308 TaskScheduler.Current);
+
+ 310 if (result!.Status == MergeStatus.Conflicts)
+
+ 312 var arguments =
new List<string>
+
+ 314 originalCommit.Tip.Sha,
+
+
+
+
-
-
-
-
-
-
-
-
- 328 ConflictingFiles = conflictedPaths,
-
-
-
- 332 if (result.Status != MergeStatus.UpToDate)
-
- 334 logger.LogTrace(
"Committing merge: \"{commitMessage}\"...", commitMessage);
- 335 await Task.Factory.StartNew(
- 336 () =>
libGitRepo.Commit(commitMessage, sig, sig,
new CommitOptions
-
- 338 PrettifyMessage = true,
-
-
-
- 342 TaskScheduler.Current);
-
- 344 if (updateSubmodules)
-
-
- 347 progressReporter.
CreateSection(
"Update Submodules", progressFactor),
-
-
-
-
-
-
-
-
-
-
-
- 359 testMergeParameters.Number.ToString(CultureInfo.InvariantCulture),
- 360 testMergeParameters.TargetCommitSha!,
- 361 testMergeParameters.Comment,
-
-
-
-
-
-
-
-
-
- 371#pragma warning restore CA1506
-
-
-
-
-
- 378 bool updateSubmodules,
- 379 bool moveCurrentReference,
-
- 381 CancellationToken cancellationToken)
-
- 383 ArgumentNullException.ThrowIfNull(committish);
-
- 385 logger.LogDebug(
"Checkout object: {committish}...", committish);
-
- 387 await Task.Factory.StartNew(
-
-
-
-
-
- 393 moveCurrentReference,
- 394 progressReporter?.CreateSection(
null, updateSubmodules ? 2.0 / 3 : 1.0),
-
-
-
-
- 399 TaskScheduler.Current);
-
- 401 if (updateSubmodules)
-
- 403 progressReporter?.CreateSection(
null, 1.0 / 3),
-
-
-
-
-
-
-
-
-
-
- 415 bool deploymentPipeline,
- 416 CancellationToken cancellationToken)
-
- 418 logger.LogDebug(
"Fetch origin...");
-
- 420 await Task.Factory.StartNew(
-
-
- 423 var remote =
libGitRepo.Network.Remotes.First();
-
-
- 426 var fetchOptions =
new FetchOptions
-
-
- 429 TagFetchMode = TagFetchMode.All,
-
-
- 432 progressReporter?.CreateSection(
"Fetch Origin", 1.0),
-
-
-
-
-
-
-
- 440 .Select(x => x.Specification),
-
-
- 443 "Fetch origin commits");
-
- 445 catch (UserCancelledException)
-
- 447 cancellationToken.ThrowIfCancellationRequested();
-
- 449 catch (LibGit2SharpException ex)
-
-
+ 320 arguments.AddRange(conflictedPaths!);
+
+
+
+
+
+
+
+
+
+ 330 ConflictingFiles = conflictedPaths,
+
+
+
+ 334 if (result.Status != MergeStatus.UpToDate)
+
+ 336 logger.LogTrace(
"Committing merge: \"{commitMessage}\"...", commitMessage);
+ 337 await Task.Factory.StartNew(
+ 338 () =>
libGitRepo.Commit(commitMessage, sig, sig,
new CommitOptions
+
+ 340 PrettifyMessage = true,
+
+
+
+ 344 TaskScheduler.Current);
+
+ 346 if (updateSubmodules)
+
+ 348 using var progressReporter2 = progressReporter.
CreateSection(
"Update Submodules", progressFactor);
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 362 testMergeParameters.Number.ToString(CultureInfo.InvariantCulture),
+ 363 testMergeParameters.TargetCommitSha!,
+ 364 testMergeParameters.Comment,
+
+
+
+
+
+
+
+
+
+ 374#pragma warning restore CA1506
+
+
+
+
+
+ 381 bool updateSubmodules,
+ 382 bool moveCurrentReference,
+
+ 384 CancellationToken cancellationToken)
+
+ 386 ArgumentNullException.ThrowIfNull(committish);
+
+ 388 logger.LogDebug(
"Checkout object: {committish}...", committish);
+
+ 390 await Task.Factory.StartNew(
+
+
+
+ 394 using var progressReporter3 = progressReporter.
CreateSection(
null, updateSubmodules ? 2.0 / 3 : 1.0);
+
+
+ 397 moveCurrentReference,
+
+
+
+
+
+ 403 TaskScheduler.Current);
+
+ 405 if (updateSubmodules)
+
+ 407 using var progressReporter2 = progressReporter.
CreateSection(
null, 1.0 / 3);
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 422 bool deploymentPipeline,
+ 423 CancellationToken cancellationToken)
+
+ 425 logger.LogDebug(
"Fetch origin...");
+
+ 427 await Task.Factory.StartNew(
+
+
+ 430 var remote =
libGitRepo.Network.Remotes.First();
+
+
+ 433 using var subReporter = progressReporter.
CreateSection(
"Fetch Origin", 1.0);
+ 434 var fetchOptions =
new FetchOptions
+
+
+ 437 TagFetchMode = TagFetchMode.All,
+
+
+
+
+
+
+
+
+
+
+ 448 .Select(x => x.Specification),
+
+
+ 451 "Fetch origin commits");
-
-
-
- 456 TaskScheduler.Current);
-
-
-
-
-
-
- 464 bool updateSubmodules,
- 465 bool deploymentPipeline,
- 466 CancellationToken cancellationToken)
-
- 468 ArgumentNullException.ThrowIfNull(progressReporter);
-
-
- 471 logger.LogTrace(
"Reset to origin...");
-
- 473 await
eventConsumer.
HandleEvent(
EventType.RepoResetOrigin,
new List<string> { trackedBranch.FriendlyName, trackedBranch.Tip.Sha }, deploymentPipeline, cancellationToken);
-
- 475 trackedBranch.Tip.Sha,
- 476 progressReporter.
CreateSection(
null, updateSubmodules ? 2.0 / 3 : 1.0),
-
-
- 479 if (updateSubmodules)
-
-
-
-
-
-
-
-
-
-
-
- 492 ArgumentNullException.ThrowIfNull(sha);
- 493 ArgumentNullException.ThrowIfNull(progressReporter);
-
- 495 logger.LogDebug(
"Reset to sha: {sha}", sha[..7]);
-
-
- 498 cancellationToken.ThrowIfCancellationRequested();
-
- 500 var gitObject =
libGitRepo.Lookup(sha, ObjectType.Commit);
- 501 cancellationToken.ThrowIfCancellationRequested();
-
- 503 if (gitObject ==
null)
- 504 throw new InvalidOperationException(String.Format(CultureInfo.InvariantCulture,
"Cannot reset to non-existent SHA: {0}", sha));
-
- 506 libGitRepo.Reset(ResetMode.Hard, gitObject.Peel<Commit>(),
new CheckoutOptions
-
- 508 OnCheckoutProgress = CheckoutProgressHandler(progressReporter.CreateSection($
"Reset to {gitObject.Sha}", 1.0)),
-
-
-
-
- 513 TaskScheduler.Current);
-
- 516 public async ValueTask
CopyTo(
string path, CancellationToken cancellationToken)
-
- 518 ArgumentNullException.ThrowIfNull(path);
- 519 logger.LogTrace(
"Copying to {path}...", path);
-
- 521 new List<string> {
".git" },
-
-
-
-
-
- 527 return ValueTask.CompletedTask;
-
-
-
-
-
-
-
- 536 public Task<string>
GetOriginSha(CancellationToken cancellationToken) => Task.Factory.StartNew(
-
-
-
-
-
- 542 cancellationToken.ThrowIfCancellationRequested();
-
-
-
-
-
- 548 TaskScheduler.Current);
-
-
-
- 553 string committerName,
- 554 string committerEmail,
- 555 bool deploymentPipeline,
- 556 CancellationToken cancellationToken)
-
- 558 ArgumentNullException.ThrowIfNull(progressReporter);
-
- 560 MergeResult? result =
null;
- 561 Branch? trackedBranch =
null;
+ 453 catch (UserCancelledException)
+
+ 455 cancellationToken.ThrowIfCancellationRequested();
+
+ 457 catch (LibGit2SharpException ex)
+
+
+
+
+
+
+ 464 TaskScheduler.Current);
+
+
+
+
+
+
+ 472 bool updateSubmodules,
+ 473 bool deploymentPipeline,
+ 474 CancellationToken cancellationToken)
+
+ 476 ArgumentNullException.ThrowIfNull(progressReporter);
+
+
+ 479 logger.LogTrace(
"Reset to origin...");
+
+ 481 await
eventConsumer.
HandleEvent(
EventType.RepoResetOrigin,
new List<string> { trackedBranch.FriendlyName, trackedBranch.Tip.Sha }, deploymentPipeline, cancellationToken);
+
+ 483 using (var progressReporter2 = progressReporter.
CreateSection(
null, updateSubmodules ? 2.0 / 3 : 1.0))
+
+ 485 trackedBranch.Tip.Sha,
+
+
+
+ 489 if (updateSubmodules)
+
+ 491 using var progressReporter3 = progressReporter.
CreateSection(
null, 1.0 / 3);
+
+
+
+
+
+
+
+
+
+
+
+
+ 505 ArgumentNullException.ThrowIfNull(sha);
+ 506 ArgumentNullException.ThrowIfNull(progressReporter);
+
+ 508 logger.LogDebug(
"Reset to sha: {sha}", sha[..7]);
+
+
+ 511 cancellationToken.ThrowIfCancellationRequested();
+
+ 513 var gitObject =
libGitRepo.Lookup(sha, ObjectType.Commit);
+ 514 cancellationToken.ThrowIfCancellationRequested();
+
+ 516 if (gitObject ==
null)
+ 517 throw new InvalidOperationException(String.Format(CultureInfo.InvariantCulture,
"Cannot reset to non-existent SHA: {0}", sha));
+
+ 519 libGitRepo.Reset(ResetMode.Hard, gitObject.Peel<Commit>(),
new CheckoutOptions
+
+ 521 OnCheckoutProgress = CheckoutProgressHandler(progressReporter.CreateSection($
"Reset to {gitObject.Sha}", 1.0)),
+
+
+
+
+ 526 TaskScheduler.Current);
+
+ 529 public async ValueTask
CopyTo(
string path, CancellationToken cancellationToken)
+
+ 531 ArgumentNullException.ThrowIfNull(path);
+ 532 logger.LogTrace(
"Copying to {path}...", path);
+
+ 534 new List<string> {
".git" },
+
+
+
+
+
+ 540 return ValueTask.CompletedTask;
+
+
+
+
+
+
+
+ 549 public Task<string>
GetOriginSha(CancellationToken cancellationToken) => Task.Factory.StartNew(
+
+
+
+
+
+ 555 cancellationToken.ThrowIfCancellationRequested();
+
+
+
+
+
+ 561 TaskScheduler.Current);
-
- 564 var oldTip = oldHead.Tip;
-
- 566 await Task.Factory.StartNew(
-
-
-
-
-
-
-
- 574 cancellationToken.ThrowIfCancellationRequested();
+
+
+ 566 string committerName,
+ 567 string committerEmail,
+ 568 bool deploymentPipeline,
+ 569 CancellationToken cancellationToken)
+
+ 571 ArgumentNullException.ThrowIfNull(progressReporter);
+
+ 573 MergeResult? result =
null;
+ 574 Branch? trackedBranch =
null;
-
-
- 578 "Merge origin/{trackedBranch}: <{committerName} ({committerEmail})>",
- 579 trackedBranch.FriendlyName,
-
-
- 582 result =
libGitRepo.Merge(trackedBranch,
new Signature(committerName, committerEmail, DateTimeOffset.UtcNow),
new MergeOptions
-
- 584 CommitOnSuccess = true,
- 585 FailOnConflict = true,
- 586 FastForwardStrategy = FastForwardStrategy.Default,
-
- 588 OnCheckoutProgress = CheckoutProgressHandler(progressReporter.CreateSection(
"Merge Origin", 1.0)),
-
-
- 591 cancellationToken.ThrowIfCancellationRequested();
-
- 593 if (result.Status == MergeStatus.Conflicts)
-
- 595 logger.LogDebug(
"Merge conflict, aborting and reverting to {oldHeadFriendlyName}", oldHead.FriendlyName);
- 596 progressReporter.ReportProgress(0);
- 597 libGitRepo.Reset(ResetMode.Hard, oldTip, new CheckoutOptions
-
- 599 OnCheckoutProgress = CheckoutProgressHandler(progressReporter.CreateSection($
"Hard Reset to {oldHead.FriendlyName}", 1.0)),
-
- 601 cancellationToken.ThrowIfCancellationRequested();
-
+
+ 577 var oldTip = oldHead.Tip;
+
+ 579 await Task.Factory.StartNew(
+
+
+
+
+
+
+
+ 587 cancellationToken.ThrowIfCancellationRequested();
+
+
+
+ 591 "Merge origin/{trackedBranch}: <{committerName} ({committerEmail})>",
+ 592 trackedBranch.FriendlyName,
+
+
+ 595 result =
libGitRepo.Merge(trackedBranch,
new Signature(committerName, committerEmail, DateTimeOffset.UtcNow),
new MergeOptions
+
+ 597 CommitOnSuccess = true,
+ 598 FailOnConflict = true,
+ 599 FastForwardStrategy = FastForwardStrategy.Default,
+
+ 601 OnCheckoutProgress = CheckoutProgressHandler(progressReporter.CreateSection(
"Merge Origin", 1.0)),
+
-
-
-
-
- 608 TaskScheduler.Current);
-
- 610 if (result!.Status == MergeStatus.Conflicts)
-
-
-
-
-
-
- 617 trackedBranch!.Tip.Sha,
-
- 619 trackedBranch.FriendlyName,
-
-
-
-
-
-
- 626 return result.Status == MergeStatus.FastForward;
-
-
-
-
-
-
- 634 string committerName,
- 635 string committerEmail,
- 636 bool synchronizeTrackedBranch,
- 637 bool deploymentPipeline,
- 638 CancellationToken cancellationToken)
-
- 640 ArgumentNullException.ThrowIfNull(committerName);
- 641 ArgumentNullException.ThrowIfNull(committerEmail);
- 642 ArgumentNullException.ThrowIfNull(progressReporter);
-
- 644 if (username ==
null && password ==
null)
-
- 646 logger.LogTrace(
"Not synchronizing due to lack of credentials!");
-
-
-
- 650 logger.LogTrace(
"Begin Synchronize...");
-
- 652 ArgumentNullException.ThrowIfNull(username);
- 653 ArgumentNullException.ThrowIfNull(password);
-
- 655 var startHead = Head;
+ 604 cancellationToken.ThrowIfCancellationRequested();
+
+ 606 if (result.Status == MergeStatus.Conflicts)
+
+ 608 logger.LogDebug(
"Merge conflict, aborting and reverting to {oldHeadFriendlyName}", oldHead.FriendlyName);
+ 609 progressReporter.ReportProgress(0);
+ 610 libGitRepo.Reset(ResetMode.Hard, oldTip, new CheckoutOptions
+
+ 612 OnCheckoutProgress = CheckoutProgressHandler(progressReporter.CreateSection($
"Hard Reset to {oldHead.FriendlyName}", 1.0)),
+
+ 614 cancellationToken.ThrowIfCancellationRequested();
+
+
+
+
+
+
+ 621 TaskScheduler.Current);
+
+ 623 if (result!.Status == MergeStatus.Conflicts)
+
+
+
+
+
+
+ 630 trackedBranch!.Tip.Sha,
+
+ 632 trackedBranch.FriendlyName,
+
+
+
+
+
+
+ 639 return result.Status == MergeStatus.FastForward;
+
+
+
+
+
+
+ 647 string committerName,
+ 648 string committerEmail,
+ 649 bool synchronizeTrackedBranch,
+ 650 bool deploymentPipeline,
+ 651 CancellationToken cancellationToken)
+
+ 653 ArgumentNullException.ThrowIfNull(committerName);
+ 654 ArgumentNullException.ThrowIfNull(committerEmail);
+ 655 ArgumentNullException.ThrowIfNull(progressReporter);
- 657 logger.LogTrace(
"Configuring <{committerName} ({committerEmail})> as author/committer", committerName, committerEmail);
- 658 await Task.Factory.StartNew(
-
-
- 661 libGitRepo.Config.Set(
"user.name", committerName);
- 662 cancellationToken.ThrowIfCancellationRequested();
- 663 libGitRepo.Config.Set(
"user.email", committerEmail);
-
-
-
- 667 TaskScheduler.Current);
-
- 669 cancellationToken.ThrowIfCancellationRequested();
-
-
- 672 await eventConsumer.HandleEvent(
-
-
-
- 676 ioManager.ResolvePath(),
-
-
-
-
-
-
- 683 logger.LogTrace(
"Resetting and cleaning untracked files...");
- 684 await Task.Factory.StartNew(
-
-
- 687 libGitRepo.Reset(ResetMode.Hard, libGitRepo.Head.Tip,
new CheckoutOptions
-
- 689 OnCheckoutProgress = CheckoutProgressHandler(progressReporter.CreateSection(
"Hard reset and remove untracked files", 0.1)),
-
- 691 cancellationToken.ThrowIfCancellationRequested();
- 692 libGitRepo.RemoveUntrackedFiles();
-
-
-
- 696 TaskScheduler.Current);
-
-
- 699 var remainingProgressFactor = 0.9;
- 700 if (!synchronizeTrackedBranch)
-
- 702 await PushHeadToTemporaryBranch(
-
-
- 705 progressReporter.
CreateSection(
"Push to temporary branch", remainingProgressFactor),
-
-
-
-
- 710 var sameHead = Head == startHead;
- 711 if (sameHead || !Tracking)
-
- 713 logger.LogTrace(
"Aborted synchronize due to {abortReason}!", sameHead ?
"lack of changes" :
"not being on tracked reference");
-
-
-
- 717 logger.LogInformation(
"Synchronizing with origin...");
-
- 719 return await Task.Factory.StartNew(
-
-
- 722 var remote = libGitRepo.Network.Remotes.First();
-
-
- 725 libGitRepo.Network.Push(
-
-
- 728 progressReporter.
CreateSection(
"Push to origin", remainingProgressFactor),
-
-
-
-
-
- 734 catch (NonFastForwardException)
-
- 736 logger.LogInformation(
"Synchronize aborted, non-fast forward!");
-
-
- 739 catch (UserCancelledException e)
-
- 741 cancellationToken.ThrowIfCancellationRequested();
- 742 throw new InvalidOperationException(
"Caught UserCancelledException without cancellationToken triggering", e);
-
- 744 catch (LibGit2SharpException e)
-
- 746 logger.LogWarning(e,
"Unable to make synchronization push!");
-
-
-
-
-
- 752 TaskScheduler.Current);
-
-
- 756 public Task<bool>
IsSha(
string committish, CancellationToken cancellationToken) => Task.Factory.StartNew(
-
-
-
- 760 var gitObject = libGitRepo.Lookup(committish, ObjectType.Tag);
- 761 if (gitObject !=
null)
-
- 763 cancellationToken.ThrowIfCancellationRequested();
-
-
- 766 if (libGitRepo.Branches[committish] !=
null)
-
- 768 cancellationToken.ThrowIfCancellationRequested();
-
-
- 771 if (libGitRepo.Lookup<Commit>(committish) !=
null)
-
-
-
-
-
- 777 TaskScheduler.Current);
-
- 780 public Task<bool>
CommittishIsParent(
string committish, CancellationToken cancellationToken) => Task.Factory.StartNew(
-
-
- 783 var targetObject = libGitRepo.Lookup(committish);
- 784 if (targetObject ==
null)
-
- 786 logger.LogTrace(
"Committish {committish} not found in repository", committish);
-
-
-
- 790 if (targetObject is not Commit targetCommit)
-
- 792 if (targetObject is not TagAnnotation)
-
- 794 logger.LogTrace(
"Committish {committish} is a {type} and does not point to a commit!", committish, targetObject.GetType().Name);
-
-
-
- 798 targetCommit = targetObject.Peel<Commit>();
- 799 if (targetCommit ==
null)
-
-
- 802 "TagAnnotation {committish} was found but the commit associated with it could not be found in repository!",
-
-
-
-
-
- 808 cancellationToken.ThrowIfCancellationRequested();
-
- 810 logger.LogTrace(
"Testing if {committish} is a parent of {startSha}...", committish, startSha);
- 811 MergeResult mergeResult;
-
-
- 814 mergeResult = libGitRepo.Merge(
-
-
- 817 DefaultCommitterName,
- 818 DefaultCommitterEmail,
- 819 DateTimeOffset.UtcNow),
-
-
- 822 FastForwardStrategy = FastForwardStrategy.FastForwardOnly,
- 823 FailOnConflict = true,
-
-
- 826 catch (NonFastForwardException ex)
-
- 828 logger.LogTrace(ex,
"{committish} is not a parent of {startSha}", committish, startSha);
-
-
-
- 832 if (mergeResult.Status == MergeStatus.UpToDate)
-
-
- 835 logger.LogTrace(
"{committish} is not a parent of {startSha} ({mergeStatus}). Moving back...", committish, startSha, mergeResult.Status);
-
-
-
-
- 840 CheckoutModifiers = CheckoutModifiers.Force,
-
-
-
-
-
-
-
- 848 TaskScheduler.Current);
-
-
-
-
- 854 CancellationToken cancellationToken) => gitRemoteFeatures.GetTestMerge(
-
-
-
-
- 860 public Task<DateTimeOffset>
TimestampCommit(
string sha, CancellationToken cancellationToken) => Task.Factory.StartNew(
-
-
- 863 ArgumentNullException.ThrowIfNull(sha);
-
- 865 var commit = libGitRepo.Lookup<Commit>(sha) ??
throw new JobException($
"Commit {sha} does not exist in the repository!");
- 866 return commit.Committer.When.ToUniversalTime();
-
-
-
- 870 TaskScheduler.Current);
-
-
-
- 875 logger.LogTrace(
"Disposing...");
- 876 libGitRepo.Dispose();
-
-
-
-
-
- 889 logger.LogTrace(
"Checkout: {committish}", committish);
+ 657 if (username ==
null && password ==
null)
+
+ 659 logger.LogTrace(
"Not synchronizing due to lack of credentials!");
+
+
+
+ 663 logger.LogTrace(
"Begin Synchronize...");
+
+ 665 ArgumentNullException.ThrowIfNull(username);
+ 666 ArgumentNullException.ThrowIfNull(password);
+
+ 668 var startHead = Head;
+
+ 670 logger.LogTrace(
"Configuring <{committerName} ({committerEmail})> as author/committer", committerName, committerEmail);
+ 671 await Task.Factory.StartNew(
+
+
+ 674 libGitRepo.Config.Set(
"user.name", committerName);
+ 675 cancellationToken.ThrowIfCancellationRequested();
+ 676 libGitRepo.Config.Set(
"user.email", committerEmail);
+
+
+
+ 680 TaskScheduler.Current);
+
+ 682 cancellationToken.ThrowIfCancellationRequested();
+
+
+ 685 await eventConsumer.HandleEvent(
+
+
+
+ 689 ioManager.ResolvePath(),
+
+
+
+
+
+
+ 696 logger.LogTrace(
"Resetting and cleaning untracked files...");
+ 697 await Task.Factory.StartNew(
+
+
+ 700 using var resetProgress = progressReporter.
CreateSection(
"Hard reset and remove untracked files", 0.1);
+ 701 libGitRepo.Reset(ResetMode.Hard, libGitRepo.Head.Tip,
new CheckoutOptions
+
+ 703 OnCheckoutProgress = CheckoutProgressHandler(resetProgress),
+
+ 705 cancellationToken.ThrowIfCancellationRequested();
+ 706 libGitRepo.RemoveUntrackedFiles();
+
+
+
+ 710 TaskScheduler.Current);
+
+
+ 713 var remainingProgressFactor = 0.9;
+ 714 if (!synchronizeTrackedBranch)
+
+ 716 using var progressReporter2 = progressReporter.
CreateSection(
"Push to temporary branch", remainingProgressFactor);
+ 717 await PushHeadToTemporaryBranch(
+
+
+
+
+
+
+
+ 725 var sameHead = Head == startHead;
+ 726 if (sameHead || !Tracking)
+
+ 728 logger.LogTrace(
"Aborted synchronize due to {abortReason}!", sameHead ?
"lack of changes" :
"not being on tracked reference");
+
+
+
+ 732 logger.LogInformation(
"Synchronizing with origin...");
+
+ 734 return await Task.Factory.StartNew(
+
+
+ 737 var remote = libGitRepo.Network.Remotes.First();
+
+
+ 740 using var pushReporter = progressReporter.
CreateSection(
"Push to origin", remainingProgressFactor);
+ 741 var (pushOptions, progressReporters) = GeneratePushOptions(
+
+
+
+
+
+
+ 748 libGitRepo.Network.Push(
+
+
+
+
+
+ 754 foreach (var progressReporter
in progressReporters)
+ 755 progressReporter.Dispose();
+
+
+
+
+ 760 catch (NonFastForwardException)
+
+ 762 logger.LogInformation(
"Synchronize aborted, non-fast forward!");
+
+
+ 765 catch (UserCancelledException e)
+
+ 767 cancellationToken.ThrowIfCancellationRequested();
+ 768 throw new InvalidOperationException(
"Caught UserCancelledException without cancellationToken triggering", e);
+
+ 770 catch (LibGit2SharpException e)
+
+ 772 logger.LogWarning(e,
"Unable to make synchronization push!");
+
+
+
+
+
+ 778 TaskScheduler.Current);
+
+
+ 782 public Task<bool>
IsSha(
string committish, CancellationToken cancellationToken) => Task.Factory.StartNew(
+
+
+
+ 786 var gitObject = libGitRepo.Lookup(committish, ObjectType.Tag);
+ 787 if (gitObject !=
null)
+
+ 789 cancellationToken.ThrowIfCancellationRequested();
+
+
+ 792 if (libGitRepo.Branches[committish] !=
null)
+
+ 794 cancellationToken.ThrowIfCancellationRequested();
+
+
+ 797 if (libGitRepo.Lookup<Commit>(committish) !=
null)
+
+
+
+
+
+ 803 TaskScheduler.Current);
+
+ 806 public Task<bool>
CommittishIsParent(
string committish, CancellationToken cancellationToken) => Task.Factory.StartNew(
+
+
+ 809 var targetObject = libGitRepo.Lookup(committish);
+ 810 if (targetObject ==
null)
+
+ 812 logger.LogTrace(
"Committish {committish} not found in repository", committish);
+
+
+
+ 816 if (targetObject is not Commit targetCommit)
+
+ 818 if (targetObject is not TagAnnotation)
+
+ 820 logger.LogTrace(
"Committish {committish} is a {type} and does not point to a commit!", committish, targetObject.GetType().Name);
+
+
+
+ 824 targetCommit = targetObject.Peel<Commit>();
+ 825 if (targetCommit ==
null)
+
+
+ 828 "TagAnnotation {committish} was found but the commit associated with it could not be found in repository!",
+
+
+
+
+
+ 834 cancellationToken.ThrowIfCancellationRequested();
+
+ 836 logger.LogTrace(
"Testing if {committish} is a parent of {startSha}...", committish, startSha);
+ 837 MergeResult mergeResult;
+
+
+ 840 mergeResult = libGitRepo.Merge(
+
+
+ 843 DefaultCommitterName,
+ 844 DefaultCommitterEmail,
+ 845 DateTimeOffset.UtcNow),
+
+
+ 848 FastForwardStrategy = FastForwardStrategy.FastForwardOnly,
+ 849 FailOnConflict = true,
+
+
+ 852 catch (NonFastForwardException ex)
+
+ 854 logger.LogTrace(ex,
"{committish} is not a parent of {startSha}", committish, startSha);
+
+
+
+ 858 if (mergeResult.Status == MergeStatus.UpToDate)
+
+
+ 861 logger.LogTrace(
"{committish} is not a parent of {startSha} ({mergeStatus}). Moving back...", committish, startSha, mergeResult.Status);
+
+
+
+
+ 866 CheckoutModifiers = CheckoutModifiers.Force,
+
+
+
+
+
+
+
+ 874 TaskScheduler.Current);
+
+
+
+
+ 880 CancellationToken cancellationToken) => gitRemoteFeatures.GetTestMerge(
+
+
+
+
+ 886 public Task<DateTimeOffset>
TimestampCommit(
string sha, CancellationToken cancellationToken) => Task.Factory.StartNew(
+
+
+ 889 ArgumentNullException.ThrowIfNull(sha);
- 891 var checkoutOptions =
new CheckoutOptions
-
- 893 CheckoutModifiers = CheckoutModifiers.Force,
-
-
- 896 if (progressReporter !=
null)
-
- 898 var stage = $
"Checkout {committish}";
- 899 progressReporter = progressReporter.
CreateSection(stage, 1.0);
-
- 901 checkoutOptions.OnCheckoutProgress = CheckoutProgressHandler(progressReporter);
-
-
- 904 cancellationToken.ThrowIfCancellationRequested();
+ 891 var commit = libGitRepo.Lookup<Commit>(sha) ??
throw new JobException($
"Commit {sha} does not exist in the repository!");
+ 892 return commit.Committer.When.ToUniversalTime();
+
+
+
+ 896 TaskScheduler.Current);
+
+
+
+ 901 logger.LogTrace(
"Disposing...");
+ 902 libGitRepo.Dispose();
+
+
- 906 if (moveCurrentReference)
-
- 908 if (Reference == NoReference)
- 909 throw new InvalidOperationException(
"Cannot move current reference when not on reference!");
-
- 911 var gitObject = libGitRepo.Lookup(committish);
- 912 if (gitObject ==
null)
- 913 throw new JobException($
"Could not find committish: {committish}");
-
- 915 var commit = gitObject.Peel<Commit>();
+
+
+ 915 logger.LogTrace(
"Checkout: {committish}", committish);
- 917 cancellationToken.ThrowIfCancellationRequested();
-
- 919 libGitRepo.Reset(ResetMode.Hard, commit, checkoutOptions);
-
-
-
- 923 void RunCheckout() => commands.Checkout(
-
-
-
-
-
-
-
-
- 932 catch (NotFoundException)
-
-
- 935 var remoteName = $
"origin/{committish}";
- 936 var remoteBranch = libGitRepo.Branches.FirstOrDefault(
- 937 branch => branch.FriendlyName.Equals(remoteName, StringComparison.Ordinal));
- 938 cancellationToken.ThrowIfCancellationRequested();
+ 917 var checkoutOptions =
new CheckoutOptions
+
+ 919 CheckoutModifiers = CheckoutModifiers.Force,
+
+
+ 922 var stage = $
"Checkout {committish}";
+ 923 using var newProgressReporter = progressReporter.
CreateSection(stage, 1.0);
+
+ 925 checkoutOptions.OnCheckoutProgress = CheckoutProgressHandler(newProgressReporter);
+
+ 927 cancellationToken.ThrowIfCancellationRequested();
+
+ 929 if (moveCurrentReference)
+
+ 931 if (Reference == NoReference)
+ 932 throw new InvalidOperationException(
"Cannot move current reference when not on reference!");
+
+ 934 var gitObject = libGitRepo.Lookup(committish);
+ 935 if (gitObject ==
null)
+ 936 throw new JobException($
"Could not find committish: {committish}");
+
+ 938 var commit = gitObject.Peel<Commit>();
- 940 if (remoteBranch ==
default)
-
-
- 943 logger.LogDebug(
"Creating local branch for {remoteBranchFriendlyName}...", remoteBranch.FriendlyName);
- 944 var branch = libGitRepo.CreateBranch(committish, remoteBranch.Tip);
-
- 946 libGitRepo.Branches.Update(branch, branchUpdate => branchUpdate.TrackedBranch = remoteBranch.CanonicalName);
-
- 948 cancellationToken.ThrowIfCancellationRequested();
-
-
-
-
-
- 954 cancellationToken.ThrowIfCancellationRequested();
-
- 956 libGitRepo.RemoveUntrackedFiles();
-
-
-
-
-
- 970 logger.LogInformation(
"Pushing changes to temporary remote branch...");
- 971 var branch = libGitRepo.CreateBranch(RemoteTemporaryBranchName);
-
-
- 974 cancellationToken.ThrowIfCancellationRequested();
- 975 var remote = libGitRepo.Network.Remotes.First();
-
-
- 978 var forcePushString = String.Format(CultureInfo.InvariantCulture,
"+{0}:{0}", branch.CanonicalName);
- 979 libGitRepo.Network.Push(remote, forcePushString, GeneratePushOptions(progressReporter.CreateSection(
null, 0.9), username, password, cancellationToken));
- 980 var removalString = String.Format(CultureInfo.InvariantCulture,
":{0}", branch.CanonicalName);
- 981 libGitRepo.Network.Push(remote, removalString, GeneratePushOptions(progressReporter.CreateSection(
null, 0.1), username, password, cancellationToken));
-
- 983 catch (UserCancelledException)
-
- 985 cancellationToken.ThrowIfCancellationRequested();
-
- 987 catch (LibGit2SharpException e)
-
- 989 logger.LogWarning(e,
"Unable to push to temporary branch!");
-
-
-
-
- 994 libGitRepo.Branches.Remove(branch);
-
-
-
-
- 999 TaskScheduler.Current);
-
-
-
- 1011 var subProgressReporter = progressReporter.
CreateSection(
null, 0.5);
-
- 1013 return new PushOptions
-
- 1015 OnPackBuilderProgress = (stage, current, total) =>
-
- 1017 var baseProgress = stage == PackBuilderStage.Counting ? 0 : 0.5;
- 1018 var addon = total > 0 && current <= total ? (0.5 * ((double)current / total)) : 0;
-
- 1020 return !cancellationToken.IsCancellationRequested;
-
- 1022 OnNegotiationCompletedBeforePush = (a) =>
-
- 1024 subProgressReporter = progressReporter.
CreateSection(
null, 0.5);
- 1025 return !cancellationToken.IsCancellationRequested;
-
- 1027 OnPushTransferProgress = (a, sentBytes, totalBytes) =>
-
-
- 1030 return !cancellationToken.IsCancellationRequested;
-
- 1032 CredentialsProvider = credentialsProvider.GenerateCredentialsHandler(username, password),
-
-
-
-
- 1041 => ioManager.GetDirectoryName(libGitRepo
-
-
- 1044 .TrimEnd(Path.DirectorySeparatorChar)
- 1045 .TrimEnd(Path.AltDirectorySeparatorChar));
-
-
-
-
-
- 1060 bool deploymentPipeline,
- 1061 CancellationToken cancellationToken)
+ 940 cancellationToken.ThrowIfCancellationRequested();
+
+ 942 libGitRepo.Reset(ResetMode.Hard, commit, checkoutOptions);
+
+
+
+ 946 void RunCheckout() => commands.Checkout(
+
+
+
+
+
+
+
+
+ 955 catch (NotFoundException)
+
+
+ 958 var remoteName = $
"origin/{committish}";
+ 959 var remoteBranch = libGitRepo.Branches.FirstOrDefault(
+ 960 branch => branch.FriendlyName.Equals(remoteName, StringComparison.Ordinal));
+ 961 cancellationToken.ThrowIfCancellationRequested();
+
+ 963 if (remoteBranch ==
default)
+
+
+ 966 logger.LogDebug(
"Creating local branch for {remoteBranchFriendlyName}...", remoteBranch.FriendlyName);
+ 967 var branch = libGitRepo.CreateBranch(committish, remoteBranch.Tip);
+
+ 969 libGitRepo.Branches.Update(branch, branchUpdate => branchUpdate.TrackedBranch = remoteBranch.CanonicalName);
+
+ 971 cancellationToken.ThrowIfCancellationRequested();
+
+
+
+
+
+ 977 cancellationToken.ThrowIfCancellationRequested();
+
+ 979 libGitRepo.RemoveUntrackedFiles();
+
+
+
+
+
+ 993 logger.LogInformation(
"Pushing changes to temporary remote branch...");
+ 994 var branch = libGitRepo.CreateBranch(RemoteTemporaryBranchName);
+
+
+ 997 cancellationToken.ThrowIfCancellationRequested();
+ 998 var remote = libGitRepo.Network.Remotes.First();
+
+
+ 1001 var forcePushString = String.Format(CultureInfo.InvariantCulture,
"+{0}:{0}", branch.CanonicalName);
+
+ 1003 using (var mainPushReporter = progressReporter.CreateSection(
null, 0.9))
+
+ 1005 var (pushOptions, progressReporters) = GeneratePushOptions(
+
+
+
+
+
+
+
+ 1013 libGitRepo.Network.Push(remote, forcePushString, pushOptions);
+
+
+
+ 1017 foreach (var progressReporter in progressReporters)
+ 1018 progressReporter.Dispose();
+
+
+
+ 1022 var removalString = String.Format(CultureInfo.InvariantCulture,
":{0}", branch.CanonicalName);
+ 1023 using var forcePushReporter = progressReporter.CreateSection(
null, 0.1);
+ 1024 var (forcePushOptions, forcePushReporters) = GeneratePushOptions(forcePushReporter, username, password, cancellationToken);
+
+
+ 1027 libGitRepo.Network.Push(remote, removalString, forcePushOptions);
+
+
+
+ 1031 foreach (var subForcePushReporter
in forcePushReporters)
+ 1032 forcePushReporter.Dispose();
+
+
+ 1035 catch (UserCancelledException)
+
+ 1037 cancellationToken.ThrowIfCancellationRequested();
+
+ 1039 catch (LibGit2SharpException e)
+
+ 1041 logger.LogWarning(e,
"Unable to push to temporary branch!");
+
+
+
+
+ 1046 libGitRepo.Branches.Remove(branch);
+
+
+
+
+ 1051 TaskScheduler.Current);
+
+ 1061 (PushOptions PushOptions, IEnumerable<JobProgressReporter> SubProgressReporters)
GeneratePushOptions(
JobProgressReporter progressReporter,
string username,
string password, CancellationToken cancellationToken)
- 1063 logger.LogTrace(
"Updating submodules {withOrWithout} credentials...", username ==
null ?
"without" :
"with");
-
- 1065 async ValueTask RecursiveUpdateSubmodules(LibGit2Sharp.IRepository parentRepository,
JobProgressReporter? currentProgressReporter,
string parentGitDirectory)
-
- 1067 var submoduleCount = libGitRepo.Submodules.Count();
- 1068 if (submoduleCount == 0)
+ 1063 var packFileCountingReporter = progressReporter.
CreateSection(
null, 0.25);
+ 1064 var packFileDeltafyingReporter = progressReporter.
CreateSection(
null, 0.25);
+ 1065 var transferProgressReporter = progressReporter.
CreateSection(
null, 0.5);
+
+
+ 1068 PushOptions:
new PushOptions
- 1070 logger.LogTrace(
"No submodules, skipping update");
-
-
-
- 1074 var factor = 1.0 / submoduleCount / 3;
- 1075 foreach (var submodule
in parentRepository.Submodules)
-
- 1077 logger.LogTrace(
"Entering submodule {name} ({path}) for recursive updates...", submodule.Name, submodule.Path);
- 1078 var submoduleUpdateOptions =
new SubmoduleUpdateOptions
-
-
- 1081 OnCheckoutNotify = (_, _) => !cancellationToken.IsCancellationRequested,
-
-
- 1084 submoduleUpdateOptions.FetchOptions.Hydrate(
-
- 1086 currentProgressReporter?.CreateSection($
"Fetch submodule {submodule.Name}", factor),
- 1087 credentialsProvider.GenerateCredentialsHandler(username, password),
-
-
- 1090 if (currentProgressReporter !=
null)
- 1091 submoduleUpdateOptions.OnCheckoutProgress = CheckoutProgressHandler(
- 1092 currentProgressReporter.
CreateSection($
"Checkout submodule {submodule.Name}", factor));
-
- 1094 logger.LogDebug(
"Updating submodule {submoduleName}...", submodule.Name);
- 1095 Task RawSubModuleUpdate() => Task.Factory.StartNew(
- 1096 () => parentRepository.Submodules.Update(submodule.Name, submoduleUpdateOptions),
-
-
- 1099 TaskScheduler.Current);
-
-
-
- 1103 await RawSubModuleUpdate();
-
- 1105 catch (LibGit2SharpException ex) when (parentRepository == libGitRepo)
-
-
-
-
- 1110 credentialsProvider.CheckBadCredentialsException(ex);
- 1111 logger.LogWarning(ex,
"Initial update of submodule {submoduleName} failed. Deleting submodule directories and re-attempting...", submodule.Name);
-
-
- 1114 ioManager.DeleteDirectory($
".git/modules/{submodule.Path}", cancellationToken),
- 1115 ioManager.DeleteDirectory(submodule.Path, cancellationToken));
-
- 1117 logger.LogTrace(
"Second update attempt for submodule {submoduleName}...", submodule.Name);
-
-
- 1120 await RawSubModuleUpdate();
-
- 1122 catch (UserCancelledException)
-
- 1124 cancellationToken.ThrowIfCancellationRequested();
-
- 1126 catch (LibGit2SharpException ex2)
-
- 1128 credentialsProvider.CheckBadCredentialsException(ex2);
- 1129 logger.LogTrace(ex2,
"Retried update of submodule {submoduleName} failed!", submodule.Name);
- 1130 throw new AggregateException(ex, ex2);
-
-
-
- 1134 await eventConsumer.HandleEvent(
-
- 1136 new List<string> { submodule.Name },
-
-
-
- 1140 var submodulePath = ioManager.ResolvePath(
- 1141 ioManager.ConcatPath(
-
-
+ 1070 OnPackBuilderProgress = (stage, current, total) =>
+
+ 1072 if (total < current)
+
+
+ 1075 var percentage = ((double)current) / total;
+ 1076 (stage == PackBuilderStage.Counting ? packFileCountingReporter : packFileDeltafyingReporter).ReportProgress(percentage);
+ 1077 return !cancellationToken.IsCancellationRequested;
+
+ 1079 OnNegotiationCompletedBeforePush = (a) => !cancellationToken.IsCancellationRequested,
+ 1080 OnPushTransferProgress = (a, sentBytes, totalBytes) =>
+
+ 1082 packFileCountingReporter.ReportProgress((
double)sentBytes / totalBytes);
+ 1083 return !cancellationToken.IsCancellationRequested;
+
+ 1085 CredentialsProvider = credentialsProvider.GenerateCredentialsHandler(username, password),
+
+ 1087 SubProgressReporters:
new List<JobProgressReporter>
+
+ 1089 packFileCountingReporter,
+ 1090 packFileDeltafyingReporter,
+ 1091 transferProgressReporter,
+
+
+
+
+ 1100 => ioManager.GetDirectoryName(libGitRepo
+
+
+ 1103 .TrimEnd(Path.DirectorySeparatorChar)
+ 1104 .TrimEnd(Path.AltDirectorySeparatorChar));
+
+
+
+
+
+ 1119 bool deploymentPipeline,
+ 1120 CancellationToken cancellationToken)
+
+ 1122 logger.LogTrace(
"Updating submodules {withOrWithout} credentials...", username ==
null ?
"without" :
"with");
+
+ 1124 async ValueTask RecursiveUpdateSubmodules(LibGit2Sharp.IRepository parentRepository,
JobProgressReporter currentProgressReporter,
string parentGitDirectory)
+
+ 1126 var submoduleCount = libGitRepo.Submodules.Count();
+ 1127 if (submoduleCount == 0)
+
+ 1129 logger.LogTrace(
"No submodules, skipping update");
+
+
+
+ 1133 var factor = 1.0 / submoduleCount / 3;
+ 1134 foreach (var submodule
in parentRepository.Submodules)
+
+ 1136 logger.LogTrace(
"Entering submodule {name} ({path}) for recursive updates...", submodule.Name, submodule.Path);
+ 1137 var submoduleUpdateOptions =
new SubmoduleUpdateOptions
+
+
+ 1140 OnCheckoutNotify = (_, _) => !cancellationToken.IsCancellationRequested,
+
+
+ 1143 using var fetchReporter = currentProgressReporter.
CreateSection($
"Fetch submodule {submodule.Name}", factor);
- 1145 using var submoduleRepo = await submoduleFactory.CreateFromPath(
-
-
- 1148 await RecursiveUpdateSubmodules(
-
- 1150 currentProgressReporter?.CreateSection($
"Entering submodule \"{submodule.Name}\"...", factor),
-
-
-
-
- 1155 return RecursiveUpdateSubmodules(libGitRepo, progressReporter, GetRepositoryPath());
-
-
-
-
-
-
-
- 1168 if (completedSteps == 0)
-
- 1170 else if (totalSteps < completedSteps || totalSteps == 0)
-
-
-
- 1174 percentage = ((double)completedSteps) / totalSteps;
-
-
-
-
- 1179 if (percentage ==
null)
-
- 1181 "Bad checkout progress values (Please tell Dominion)! Completeds: {completed}, Total: {total}",
-
-
-
- 1185 progressReporter.ReportProgress(percentage);
-
-
- 1188#pragma warning restore CA1506
-
+ 1145 submoduleUpdateOptions.FetchOptions.Hydrate(
+
+
+ 1148 credentialsProvider.GenerateCredentialsHandler(username, password),
+
+
+ 1151 using var checkoutReporter = currentProgressReporter.
CreateSection($
"Checkout submodule {submodule.Name}", factor);
+ 1152 submoduleUpdateOptions.OnCheckoutProgress = CheckoutProgressHandler(checkoutReporter);
+
+ 1154 logger.LogDebug(
"Updating submodule {submoduleName}...", submodule.Name);
+ 1155 Task RawSubModuleUpdate() => Task.Factory.StartNew(
+ 1156 () => parentRepository.Submodules.Update(submodule.Name, submoduleUpdateOptions),
+
+
+ 1159 TaskScheduler.Current);
+
+
+
+ 1163 await RawSubModuleUpdate();
+
+ 1165 catch (LibGit2SharpException ex) when (parentRepository == libGitRepo)
+
+
+
+
+ 1170 credentialsProvider.CheckBadCredentialsException(ex);
+ 1171 logger.LogWarning(ex,
"Initial update of submodule {submoduleName} failed. Deleting submodule directories and re-attempting...", submodule.Name);
+
+
+ 1174 ioManager.DeleteDirectory($
".git/modules/{submodule.Path}", cancellationToken),
+ 1175 ioManager.DeleteDirectory(submodule.Path, cancellationToken));
+
+ 1177 logger.LogTrace(
"Second update attempt for submodule {submoduleName}...", submodule.Name);
+
+
+ 1180 await RawSubModuleUpdate();
+
+ 1182 catch (UserCancelledException)
+
+ 1184 cancellationToken.ThrowIfCancellationRequested();
+
+ 1186 catch (LibGit2SharpException ex2)
+
+ 1188 credentialsProvider.CheckBadCredentialsException(ex2);
+ 1189 logger.LogTrace(ex2,
"Retried update of submodule {submoduleName} failed!", submodule.Name);
+ 1190 throw new AggregateException(ex, ex2);
+
+
+
+ 1194 await eventConsumer.HandleEvent(
+
+ 1196 new List<string> { submodule.Name },
+
+
+
+ 1200 var submodulePath = ioManager.ResolvePath(
+ 1201 ioManager.ConcatPath(
+
+
+
+ 1205 using var submoduleRepo = await submoduleFactory.CreateFromPath(
+
+
+
+ 1209 using var submoduleReporter = currentProgressReporter.
CreateSection($
"Entering submodule \"{submodule.Name}\"...", factor);
+ 1210 await RecursiveUpdateSubmodules(
+
+
+
+
+
+
+ 1217 return RecursiveUpdateSubmodules(libGitRepo, progressReporter, GetRepositoryPath());
+
+
+
+
+
+
+
+ 1230 if (completedSteps == 0)
+
+ 1232 else if (totalSteps < completedSteps || totalSteps == 0)
+
+
+
+ 1236 percentage = ((double)completedSteps) / totalSteps;
+
+
+
+
+ 1241 if (percentage ==
null)
+
+ 1243 "Bad checkout progress values (Please tell Dominion)! Completeds: {completed}, Total: {total}",
+
+
+
+
+
+
+ 1250#pragma warning restore CA1506
+
Represents configurable settings for a git repository.
Parameters for creating a TestMerge.
virtual ? string TargetCommitSha
The sha of the test merge revision to merge. If not specified, the latest commit from the source will...
@@ -1152,32 +1214,30 @@ $(function() {
const string OriginTrackingErrorTemplate
Template error message for when tracking of the most recent origin commit fails.
Task ResetToSha(string sha, JobProgressReporter progressReporter, CancellationToken cancellationToken)
Requires the current HEAD to be a reference. Hard resets the reference to the given sha....
const string DefaultCommitterEmail
The default password for committers.
-async ValueTask CopyTo(string path, CancellationToken cancellationToken)
Copies the current working directory to a given path . A ValueTask representing the running operation...
-ValueTask UpdateSubmodules(JobProgressReporter? progressReporter, string? username, string? password, bool deploymentPipeline, CancellationToken cancellationToken)
Recusively update all Submodules in the libGitRepo.
+async ValueTask FetchOrigin(JobProgressReporter progressReporter, string? username, string? password, bool deploymentPipeline, CancellationToken cancellationToken)
Fetch commits from the origin repository. A ValueTask representing the running operation.
+async ValueTask CopyTo(string path, CancellationToken cancellationToken)
Copies the current working directory to a given path . A ValueTask representing the running operation...
async ValueTask< TestMergeResult > AddTestMerge(TestMergeParameters testMergeParameters, string committerName, string committerEmail, string? username, string? password, bool updateSubmodules, JobProgressReporter progressReporter, CancellationToken cancellationToken)
Attempt to merge the revision specified by a given set of testMergeParameters into HEAD....
string Head
The SHA of the IRepository HEAD.
string? RemoteRepositoryName
If RemoteGitProvider is not RemoteGitProvider.Unknown this will be set with the name of the repositor...
bool Tracking
If Reference tracks an upstream branch.
const string RemoteTemporaryBranchName
The branch name used for publishing testmerge commits.
-async ValueTask< bool > Synchronize(JobProgressReporter progressReporter, string? username, string? password, string committerName, string committerEmail, bool synchronizeTrackedBranch, bool deploymentPipeline, CancellationToken cancellationToken)
Runs the synchronize event script and attempts to push any changes made to the IRepository if on a tr...
+async ValueTask< bool > Synchronize(JobProgressReporter progressReporter, string? username, string? password, string committerName, string committerEmail, bool synchronizeTrackedBranch, bool deploymentPipeline, CancellationToken cancellationToken)
Runs the synchronize event script and attempts to push any changes made to the IRepository if on a tr...
Uri Origin
The current origin remote the IRepository is using.
+async ValueTask CheckoutObject(string committish, string? username, string? password, bool updateSubmodules, bool moveCurrentReference, JobProgressReporter progressReporter, CancellationToken cancellationToken)
Checks out a given committish . A ValueTask representing the running operation.
readonly LibGit2Sharp.IRepository libGitRepo
The LibGit2Sharp.IRepository for the Repository.
Task PushHeadToTemporaryBranch(string username, string password, JobProgressReporter progressReporter, CancellationToken cancellationToken)
Force push the current repository HEAD to RemoteTemporaryBranchName;.
readonly IGitRemoteFeatures gitRemoteFeatures
The IGitRemoteFeatures for the Repository.
+ValueTask UpdateSubmodules(JobProgressReporter progressReporter, string? username, string? password, bool deploymentPipeline, CancellationToken cancellationToken)
Recusively update all Submodules in the libGitRepo.
readonly ILibGit2RepositoryFactory submoduleFactory
The ILibGit2RepositoryFactory used for updating submodules.
-async ValueTask CheckoutObject(string committish, string? username, string? password, bool updateSubmodules, bool moveCurrentReference, JobProgressReporter? progressReporter, CancellationToken cancellationToken)
Checks out a given committish . A ValueTask representing the running operation.
-PushOptions GeneratePushOptions(JobProgressReporter progressReporter, string username, string password, CancellationToken cancellationToken)
Generate a standard set of PushOptions.
-async ValueTask< bool?> MergeOrigin(JobProgressReporter progressReporter, string committerName, string committerEmail, bool deploymentPipeline, CancellationToken cancellationToken)
Requires the current HEAD to be a tracked reference. Merges the reference to what it tracks on the or...
-async ValueTask FetchOrigin(JobProgressReporter? progressReporter, string? username, string? password, bool deploymentPipeline, CancellationToken cancellationToken)
Fetch commits from the origin repository. A ValueTask representing the running operation.
+async ValueTask< bool?> MergeOrigin(JobProgressReporter progressReporter, string committerName, string committerEmail, bool deploymentPipeline, CancellationToken cancellationToken)
Requires the current HEAD to be a tracked reference. Merges the reference to what it tracks on the or...
readonly ILogger< Repository > logger
The ILogger for the Repository.
-override void DisposeImpl()
Implementation of Dispose run after reentrancy check.
+override void DisposeImpl()
Implementation of Dispose run after reentrancy check.
string? RemoteRepositoryOwner
If RemoteGitProvider is not RemoteGitProvider.Unknown this will be set with the owner of the reposito...
readonly IIOManager ioManager
The IIOManager for the Repository.
ValueTask< Models.TestMerge > GetTestMerge(TestMergeParameters parameters, RepositorySettings repositorySettings, CancellationToken cancellationToken)
Retrieve the Models.TestMerge representation of given test merge parameters . A ValueTask<TResult> re...
readonly IPostWriteHandler postWriteHandler
The IPostWriteHandler for the Repository.
const string DefaultCommitterName
The default username for committers.
const string UnknownReference
Used when a reference cannot be determined.
-void RawCheckout(string committish, bool moveCurrentReference, JobProgressReporter? progressReporter, CancellationToken cancellationToken)
Runs a blocking force checkout to committish .
Task< string > GetOriginSha(CancellationToken cancellationToken)
Get the tracked reference's current SHA. A Task<TResult> resulting in the tracked origin reference's ...
Task< bool > IsSha(string committish, CancellationToken cancellationToken)
Checks if a given committish is a sha. A Task<TResult> resulting in true if committish is a sha,...
Task< bool > CommittishIsParent(string committish, CancellationToken cancellationToken)
Check if a given committish is a parent of the current Head. A Task<TResult> resulting in true if co...
@@ -1186,9 +1246,11 @@ $(function() {
readonly IEventConsumer eventConsumer
The IEventConsumer for the Repository.
const string NoReference
The value of Reference when not on a reference.
CheckoutProgressHandler CheckoutProgressHandler(JobProgressReporter progressReporter)
Converts a given progressReporter to a LibGit2Sharp.Handlers.CheckoutProgressHandler.
+void RawCheckout(string committish, bool moveCurrentReference, JobProgressReporter progressReporter, CancellationToken cancellationToken)
Runs a blocking force checkout to committish .
readonly ICredentialsProvider credentialsProvider
The ICredentialsProvider for the Repository.
Task< DateTimeOffset > TimestampCommit(string sha, CancellationToken cancellationToken)
Gets the DateTimeOffset a given sha was created on. A Task<TResult> resulting in the DateTimeOffset ...
-async ValueTask ResetToOrigin(JobProgressReporter progressReporter, string? username, string? password, bool updateSubmodules, bool deploymentPipeline, CancellationToken cancellationToken)
Requires the current HEAD to be a tracked reference. Hard resets the reference to what it tracks on t...
+async ValueTask ResetToOrigin(JobProgressReporter progressReporter, string? username, string? password, bool updateSubmodules, bool deploymentPipeline, CancellationToken cancellationToken)
Requires the current HEAD to be a tracked reference. Hard resets the reference to what it tracks on t...
+PushOptions IEnumerable< JobProgressReporter > SubProgressReporters GeneratePushOptions(JobProgressReporter progressReporter, string username, string password, CancellationToken cancellationToken)
readonly GeneralConfiguration generalConfiguration
The GeneralConfiguration for the Repository.
Represents the result of a repository test merge attempt.
MergeStatus Status
The resulting MergeStatus.
@@ -1196,9 +1258,9 @@ $(function() {
IIOManager that resolves paths to Environment.CurrentDirectory.
const TaskCreationOptions BlockingTaskCreationOptions
The TaskCreationOptions used to spawn Tasks for potentially long running, blocking operations.
Operation exceptions thrown from the context of a Models.Job.
-Progress reporter for a Job.
-JobProgressReporter CreateSection(string? newStageName, double percentage)
Create a subsection of the JobProgressReporter with its optional own stage name.
-void ReportProgress(double? progress)
Report progress.
+Progress reporter for a Job.
+JobProgressReporter CreateSection(string? newStageName, double percentage)
Create a subsection of the JobProgressReporter with its optional own stage name.
+void ReportProgress(double? progress)
Report progress.
Runs a given disposeAction on Dispose.
readonly Action disposeAction
The Action to run on Dispose.
diff --git a/_repository_manager_8cs_source.html b/_repository_manager_8cs_source.html
index e4601fb08d..0b675a4e0a 100644
--- a/_repository_manager_8cs_source.html
+++ b/_repository_manager_8cs_source.html
@@ -150,12 +150,12 @@ $(function() {
-
+
123 string? initialBranch,
-
+
127 bool recurseSubmodules,
128 CancellationToken cancellationToken)
@@ -178,8 +178,8 @@ $(function() {
- 149 var cloneProgressReporter = progressReporter?.
CreateSection(
null, 0.75f);
- 150 var checkoutProgressReporter = progressReporter?.
CreateSection(
null, 0.25f);
+ 149 using var cloneProgressReporter = progressReporter.
CreateSection(
null, 0.75f);
+ 150 using var checkoutProgressReporter = progressReporter.
CreateSection(
null, 0.25f);
151 var cloneOptions =
new CloneOptions
153 RecurseSubmodules = recurseSubmodules,
@@ -307,7 +307,6 @@ $(function() {
RepositoryManager(ILibGit2RepositoryFactory repositoryFactory, ILibGit2Commands commands, IIOManager ioManager, IEventConsumer eventConsumer, IPostWriteHandler postWriteHandler, IGitRemoteFeaturesFactory gitRemoteFeaturesFactory, ILogger< Repository > repositoryLogger, ILogger< RepositoryManager > logger, GeneralConfiguration generalConfiguration)
Initializes a new instance of the RepositoryManager class.
-async ValueTask< IRepository?> CloneRepository(Uri url, string? initialBranch, string? username, string? password, JobProgressReporter? progressReporter, bool recurseSubmodules, CancellationToken cancellationToken)
Clone the repository at url . A ValueTask<TResult> resulting i the newly cloned IRepository,...
readonly ILogger< Repository > repositoryLogger
The ILogger created Repositorys.
async ValueTask DeleteRepository(CancellationToken cancellationToken)
Delete the current repository. A ValueTask representing the running operation.
readonly GeneralConfiguration generalConfiguration
The GeneralConfiguration for the RepositoryManager.
@@ -319,15 +318,16 @@ $(function() {
bool InUse
If something is holding a lock on the repository.
readonly IPostWriteHandler postWriteHandler
The IPostWriteHandler for the RepositoryManager.
readonly IIOManager ioManager
The IIOManager for the RepositoryManager.
+async ValueTask< IRepository?> CloneRepository(Uri url, string? initialBranch, string? username, string? password, JobProgressReporter progressReporter, bool recurseSubmodules, CancellationToken cancellationToken)
Clone the repository at url . A ValueTask<TResult> resulting i the newly cloned IRepository,...
readonly ILogger< RepositoryManager > logger
The ILogger for the RepositoryManager.
readonly IEventConsumer eventConsumer
The IEventConsumer for the RepositoryManager.
bool CloneInProgress
If a CloneRepository(Uri, string, string, string, JobProgressReporter, bool, CancellationToken) opera...
readonly IGitRemoteFeaturesFactory gitRemoteFeaturesFactory
The IGitRemoteFeaturesFactory for the RepositoryManager.
General configuration options.
Operation exceptions thrown from the context of a Models.Job.
-Progress reporter for a Job.
-JobProgressReporter CreateSection(string? newStageName, double percentage)
Create a subsection of the JobProgressReporter with its optional own stage name.
-void ReportProgress(double? progress)
Report progress.
+Progress reporter for a Job.
+JobProgressReporter CreateSection(string? newStageName, double percentage)
Create a subsection of the JobProgressReporter with its optional own stage name.
+void ReportProgress(double? progress)
Report progress.
Async lock context helper.
static async ValueTask< SemaphoreSlimContext > Lock(SemaphoreSlim semaphore, CancellationToken cancellationToken)
Asyncronously locks a semaphore .
Consumes EventTypes and takes the appropriate actions.
diff --git a/_repository_update_service_8cs_source.html b/_repository_update_service_8cs_source.html
index 0504c7fc61..fbbfbe87ed 100644
--- a/_repository_update_service_8cs_source.html
+++ b/_repository_update_service_8cs_source.html
@@ -210,491 +210,512 @@ $(function() {
173 var numSteps = (model.
NewTestMerges?.Count ?? 0) + (model.
UpdateFromOrigin ==
true ? 1 : 0) + (!modelHasShaOrReference ? 2 : (hardResettingToOriginReference ? 3 : 1));
174 var progressFactor = 1.0 / numSteps;
-
-
- 178 return progressReporter.
CreateSection(stage, progressFactor);
-
-
-
+
+
+
+
+
+ 181 Models.RevisionInformation? lastRevisionInfo =
null;
-
- 184 Models.RevisionInformation? lastRevisionInfo =
null;
-
-
-
-
-
-
- 191 ValueTask CallLoadRevInfo(Models.TestMerge? testMergeToAdd =
null,
string? lastOriginCommitSha =
null) => databaseContextFactory
-
- 193 async databaseContext =>
-
- 195 databaseContext.Instances.Attach(attachedInstance);
- 196 var previousRevInfo = lastRevisionInfo!;
-
-
-
-
-
-
- 203 x => lastRevisionInfo = x,
-
-
- 206 if (testMergeToAdd !=
null)
-
-
- 209 var mergedBy = databaseContext.Users.Local.FirstOrDefault(x => x.Id ==
initiatingUser.
Id);
- 210 if (mergedBy ==
default)
-
-
-
-
-
+
+
+
+
+
+ 188 ValueTask CallLoadRevInfo(Models.TestMerge? testMergeToAdd =
null,
string? lastOriginCommitSha =
null) => databaseContextFactory
+
+ 190 async databaseContext =>
+
+ 192 databaseContext.Instances.Attach(attachedInstance);
+ 193 var previousRevInfo = lastRevisionInfo!;
+
+
+
+
+
+
+ 200 x => lastRevisionInfo = x,
+
+
+ 203 if (testMergeToAdd !=
null)
+
+
+ 206 var mergedBy = databaseContext.Users.Local.FirstOrDefault(x => x.Id ==
initiatingUser.
Id);
+ 207 if (mergedBy ==
default)
+
+
+
+
+
+
+ 214 databaseContext.Users.Attach(mergedBy);
+
- 217 databaseContext.Users.Attach(mergedBy);
-
+ 217 testMergeToAdd.MergedBy = mergedBy;
+ 218 testMergeToAdd.MergedAt = DateTimeOffset.UtcNow;
- 220 testMergeToAdd.MergedBy = mergedBy;
- 221 testMergeToAdd.MergedAt = DateTimeOffset.UtcNow;
-
- 223 var activeTestMerges = lastRevisionInfo!.ActiveTestMerges!;
- 224 foreach (var activeTestMerge
in previousRevInfo.ActiveTestMerges!)
- 225 activeTestMerges.Add(activeTestMerge);
+ 220 var activeTestMerges = lastRevisionInfo!.ActiveTestMerges!;
+ 221 foreach (var activeTestMerge
in previousRevInfo.ActiveTestMerges!)
+ 222 activeTestMerges.Add(activeTestMerge);
+
+ 224 activeTestMerges.Add(
new RevInfoTestMerge(testMergeToAdd, lastRevisionInfo));
+ 225 lastRevisionInfo.PrimaryTestMerge = testMergeToAdd;
- 227 activeTestMerges.Add(
new RevInfoTestMerge(testMergeToAdd, lastRevisionInfo));
- 228 lastRevisionInfo.PrimaryTestMerge = testMergeToAdd;
+
+
-
-
-
-
- 234 await databaseContext.Save(cancellationToken);
-
-
- 237 await CallLoadRevInfo();
+
+ 231 await databaseContext.Save(cancellationToken);
+
+
+ 234 await CallLoadRevInfo();
+
+
+ 237 ValueTask UpdateRevInfo(Models.TestMerge? testMergeToAdd =
null) => CallLoadRevInfo(testMergeToAdd, lastRevisionInfo!.OriginCommitSha);
-
- 240 ValueTask UpdateRevInfo(Models.TestMerge? testMergeToAdd =
null) => CallLoadRevInfo(testMergeToAdd, lastRevisionInfo!.OriginCommitSha);
-
-
-
-
-
-
-
-
- 249 await repo.FetchOrigin(
- 250 NextProgressReporter(
"Fetch Origin"),
-
-
-
-
-
- 256 if (!modelHasShaOrReference)
-
- 258 var fastForward = await repo.MergeOrigin(
- 259 NextProgressReporter(
"Merge Origin"),
-
-
-
-
- 264 if (!fastForward.HasValue)
-
- 266 lastRevisionInfo!.OriginCommitSha = await repo.GetOriginSha(cancellationToken);
- 267 await UpdateRevInfo();
- 268 if (fastForward.Value)
-
- 270 await repo.Synchronize(
- 271 NextProgressReporter(
"Sychronize"),
-
-
-
-
-
-
-
- 279 postUpdateSha = repo.Head;
-
-
- 282 NextProgressReporter(
null).ReportProgress(1.0);
-
-
-
-
-
-
- 289 if (modelHasShaOrReference)
-
- 291 var validCheckoutSha =
- 292 model.CheckoutSha !=
null
- 293 && !repo.Head.StartsWith(model.
CheckoutSha, StringComparison.OrdinalIgnoreCase);
- 294 var validCheckoutReference =
- 295 model.Reference !=
null
- 296 && !repo.Reference.Equals(model.
Reference, StringComparison.OrdinalIgnoreCase);
-
- 298 if (validCheckoutSha || validCheckoutReference)
-
- 300 var committish = model.CheckoutSha ?? model.
Reference!;
- 301 var isSha = await repo.IsSha(committish, cancellationToken);
-
-
-
+
+
+
+
+
+
+
+ 246 using (var fetchReporter = NextProgressReporter(
"Fetch Origin"))
+ 247 await repo.FetchOrigin(
+
+
+
+
+
+
+ 254 if (!modelHasShaOrReference)
+
+
+ 257 using (var mergeReporter = NextProgressReporter(
"Merge Origin"))
+ 258 fastForward = await repo.MergeOrigin(
+
+
+
+
+
+
+ 265 if (!fastForward.HasValue)
+
+
+ 268 lastRevisionInfo!.OriginCommitSha = await repo.GetOriginSha(cancellationToken);
+ 269 await UpdateRevInfo();
+ 270 if (fastForward.Value)
+
+ 272 using var syncReporter = NextProgressReporter(
"Sychronize");
+ 273 await repo.Synchronize(
+
+
+
+
+
+
+
+
+ 282 postUpdateSha = repo.Head;
+
+
+ 285 NextProgressReporter(
null).Dispose();
+
+
+
+
+
+
+ 292 if (modelHasShaOrReference)
+
+ 294 var validCheckoutSha =
+ 295 model.CheckoutSha !=
null
+ 296 && !repo.Head.StartsWith(model.
CheckoutSha, StringComparison.OrdinalIgnoreCase);
+ 297 var validCheckoutReference =
+ 298 model.Reference !=
null
+ 299 && !repo.Reference.Equals(model.
Reference, StringComparison.OrdinalIgnoreCase);
+
+ 301 if (validCheckoutSha || validCheckoutReference)
+
+ 303 var committish = model.CheckoutSha ?? model.
Reference!;
+ 304 var isSha = await repo.IsSha(committish, cancellationToken);
- 306 await repo.CheckoutObject(
-
-
-
-
-
- 312 NextProgressReporter(
"Checkout"),
-
- 314 await CallLoadRevInfo();
-
-
- 317 NextProgressReporter(
null).ReportProgress(1.0);
-
- 319 if (hardResettingToOriginReference)
-
-
-
- 323 await repo.ResetToOrigin(
- 324 NextProgressReporter(
"Reset to Origin"),
-
-
-
-
-
- 330 await repo.Synchronize(
- 331 NextProgressReporter(
"Synchronize"),
-
-
-
-
-
-
-
- 339 await CallLoadRevInfo();
-
-
-
- 343 lastRevisionInfo!.OriginCommitSha = repo.Head;
-
-
+
+
+
+ 309 using (var checkoutReporter = NextProgressReporter(
"Checkout"))
+ 310 await repo.CheckoutObject(
+
+
+
+
+
+
+
+ 318 await CallLoadRevInfo();
+
+
+ 321 NextProgressReporter(
null).Dispose();
+
+ 323 if (hardResettingToOriginReference)
+
+
+
+ 327 using (var resetReporter = NextProgressReporter(
"Reset to Origin"))
+ 328 await repo.ResetToOrigin(
+
+
+
+
+
+
+
+ 336 using (var syncReporter = NextProgressReporter(
"Synchronize"))
+ 337 await repo.Synchronize(
+
+
+
+
+
+
+
+
-
-
-
-
-
-
-
-
- 355 foreach (var newTestMergeWithoutTargetCommitSha
in newTestMergeModels.Where(x => String.IsNullOrWhiteSpace(x.TargetCommitSha)))
- 356 newTestMergeWithoutTargetCommitSha.TargetCommitSha =
null;
-
- 358 var repoOwner = repo.RemoteRepositoryOwner;
- 359 var repoName = repo.RemoteRepositoryName;
+ 347 await CallLoadRevInfo();
+
+
+
+ 351 lastRevisionInfo!.OriginCommitSha = repo.Head;
+
+
+
+
+
+
+
+
-
- 362 Models.RevisionInformation? revInfoWereLookingFor =
null;
- 363 bool needToApplyRemainingPrs =
true;
- 364 if (lastRevisionInfo!.OriginCommitSha == lastRevisionInfo.CommitSha)
-
- 366 bool cantSearch =
false;
- 367 foreach (var newTestMerge
in newTestMergeModels)
-
- 369 if (newTestMerge.TargetCommitSha !=
null)
- 370#pragma warning disable CA1308
- 371 newTestMerge.TargetCommitSha = newTestMerge.TargetCommitSha?.ToLowerInvariant();
- 372#pragma warning restore CA1308
-
-
-
-
- 377 var pr = await repo.GetTestMerge(newTestMerge,
currentModel, cancellationToken);
-
-
- 380 newTestMerge.TargetCommitSha = pr.TargetCommitSha;
-
-
+
+
+ 363 foreach (var newTestMergeWithoutTargetCommitSha
in newTestMergeModels.Where(x => String.IsNullOrWhiteSpace(x.TargetCommitSha)))
+ 364 newTestMergeWithoutTargetCommitSha.TargetCommitSha =
null;
+
+ 366 var repoOwner = repo.RemoteRepositoryOwner;
+ 367 var repoName = repo.RemoteRepositoryName;
+
+
+ 370 Models.RevisionInformation? revInfoWereLookingFor =
null;
+ 371 bool needToApplyRemainingPrs =
true;
+ 372 if (lastRevisionInfo!.OriginCommitSha == lastRevisionInfo.CommitSha)
+
+ 374 bool cantSearch =
false;
+ 375 foreach (var newTestMerge
in newTestMergeModels)
+
+ 377 if (newTestMerge.TargetCommitSha !=
null)
+ 378#pragma warning disable CA1308
+ 379 newTestMerge.TargetCommitSha = newTestMerge.TargetCommitSha?.ToLowerInvariant();
+ 380#pragma warning restore CA1308
+
+
-
-
-
-
-
-
-
- 391 List<Models.RevisionInformation>? dbPull =
null;
-
-
- 394 async databaseContext =>
- 395 dbPull = await databaseContext.RevisionInformations
-
-
- 398 && x.OriginCommitSha == lastRevisionInfo.OriginCommitSha
- 399 && x.ActiveTestMerges!.Count <= newTestMergeModels.Count
- 400 && x.ActiveTestMerges!.Count > 0)
- 401 .Include(x => x.ActiveTestMerges!)
- 402 .ThenInclude(x => x.TestMerge)
- 403 .ToListAsync(cancellationToken));
-
-
- 406 revInfoWereLookingFor = dbPull!
- 407 .Where(x => x.ActiveTestMerges!.Count == newTestMergeModels.Count
- 408 && x.ActiveTestMerges
- 409 .Select(y => y.TestMerge)
- 410 .All(y => newTestMergeModels
-
-
- 413 && y.TargetCommitSha!.StartsWith(z.TargetCommitSha!, StringComparison.Ordinal)
- 414 && (y.Comment?.Trim().ToUpperInvariant() == z.Comment?.Trim().ToUpperInvariant() || z.Comment ==
null))))
-
-
- 417 if (revInfoWereLookingFor ==
default && newTestMergeModels.Count > 1)
-
-
- 420 var listedNewTestMerges = newTestMergeModels.ToList();
-
- 422 var appliedTestMergeIds =
new List<long>();
-
- 424 Models.RevisionInformation? lastGoodRevInfo =
null;
-
-
- 427 foreach (var newTestMergeParameters
in listedNewTestMerges)
-
- 429 revInfoWereLookingFor = dbPull!
- 430 .Where(testRevInfo =>
-
- 432 if (testRevInfo.PrimaryTestMerge ==
null)
-
-
- 435 var testMergeMatch = newTestMergeModels.Any(testTestMerge =>
-
- 437 var numberMatch = testRevInfo.PrimaryTestMerge.Number == testTestMerge.Number;
-
-
-
- 441 var shaMatch = testRevInfo.PrimaryTestMerge.TargetCommitSha!.StartsWith(
- 442 testTestMerge.TargetCommitSha!,
- 443 StringComparison.Ordinal);
-
-
-
- 447 var commentMatch = testRevInfo.PrimaryTestMerge.Comment == testTestMerge.Comment;
-
-
-
-
-
-
- 454 var previousTestMergesMatch = testRevInfo
-
- 456 .Select(previousRevInfoTestMerge => previousRevInfoTestMerge.TestMerge)
- 457 .All(previousTestMerge => appliedTestMergeIds.Contains(previousTestMerge.Id));
+
+ 385 var pr = await repo.GetTestMerge(newTestMerge,
currentModel, cancellationToken);
+
+
+ 388 newTestMerge.TargetCommitSha = pr.TargetCommitSha;
+
+
+
+
+
+
+
+
+
+
+ 399 List<Models.RevisionInformation>? dbPull =
null;
+
+
+ 402 async databaseContext =>
+ 403 dbPull = await databaseContext.RevisionInformations
+
+
+ 406 && x.OriginCommitSha == lastRevisionInfo.OriginCommitSha
+ 407 && x.ActiveTestMerges!.Count <= newTestMergeModels.Count
+ 408 && x.ActiveTestMerges!.Count > 0)
+ 409 .Include(x => x.ActiveTestMerges!)
+ 410 .ThenInclude(x => x.TestMerge)
+ 411 .ToListAsync(cancellationToken));
+
+
+ 414 revInfoWereLookingFor = dbPull!
+ 415 .Where(x => x.ActiveTestMerges!.Count == newTestMergeModels.Count
+ 416 && x.ActiveTestMerges
+ 417 .Select(y => y.TestMerge)
+ 418 .All(y => newTestMergeModels
+
+
+ 421 && y.TargetCommitSha!.StartsWith(z.TargetCommitSha!, StringComparison.Ordinal)
+ 422 && (y.Comment?.Trim().ToUpperInvariant() == z.Comment?.Trim().ToUpperInvariant() || z.Comment ==
null))))
+
+
+ 425 if (revInfoWereLookingFor ==
default && newTestMergeModels.Count > 1)
+
+
+ 428 var listedNewTestMerges = newTestMergeModels.ToList();
+
+ 430 var appliedTestMergeIds =
new List<long>();
+
+ 432 Models.RevisionInformation? lastGoodRevInfo =
null;
+
+
+ 435 foreach (var newTestMergeParameters
in listedNewTestMerges)
+
+ 437 revInfoWereLookingFor = dbPull!
+ 438 .Where(testRevInfo =>
+
+ 440 if (testRevInfo.PrimaryTestMerge ==
null)
+
+
+ 443 var testMergeMatch = newTestMergeModels.Any(testTestMerge =>
+
+ 445 var numberMatch = testRevInfo.PrimaryTestMerge.Number == testTestMerge.Number;
+
+
+
+ 449 var shaMatch = testRevInfo.PrimaryTestMerge.TargetCommitSha!.StartsWith(
+ 450 testTestMerge.TargetCommitSha!,
+ 451 StringComparison.Ordinal);
+
+
+
+ 455 var commentMatch = testRevInfo.PrimaryTestMerge.Comment == testTestMerge.Comment;
+
+
- 459 return previousTestMergesMatch;
-
-
-
- 463 if (revInfoWereLookingFor !=
null)
-
- 465 lastGoodRevInfo = revInfoWereLookingFor;
- 466 appliedTestMergeIds.Add(revInfoWereLookingFor.PrimaryTestMerge!.Id);
- 467 listedNewTestMerges.Remove(newTestMergeParameters);
-
-
-
-
- 472 while (revInfoWereLookingFor !=
null && listedNewTestMerges.Count > 0);
-
- 474 revInfoWereLookingFor = lastGoodRevInfo;
- 475 needToApplyRemainingPrs = listedNewTestMerges.Count != 0;
- 476 if (needToApplyRemainingPrs)
- 477 model.NewTestMerges = listedNewTestMerges;
-
- 479 else if (revInfoWereLookingFor !=
null)
- 480 needToApplyRemainingPrs =
false;
-
-
-
- 484 if (revInfoWereLookingFor !=
null)
-
-
- 487 var commitSha = revInfoWereLookingFor.CommitSha!;
- 488 logger.LogDebug(
"Reusing existing SHA {sha}...", commitSha);
- 489 await repo.ResetToSha(commitSha, NextProgressReporter($
"Reset to {commitSha[..7]}"), cancellationToken);
- 490 lastRevisionInfo = revInfoWereLookingFor;
-
-
- 493 if (needToApplyRemainingPrs)
-
- 495 foreach (var newTestMerge
in newTestMergeModels)
-
- 497 if (lastRevisionInfo.ActiveTestMerges!.Any(x => x.TestMerge.Number == newTestMerge.Number))
-
-
- 500 var fullTestMergeTask = repo.GetTestMerge(newTestMerge,
currentModel, cancellationToken);
+
+
+
+ 462 var previousTestMergesMatch = testRevInfo
+
+ 464 .Select(previousRevInfoTestMerge => previousRevInfoTestMerge.TestMerge)
+ 465 .All(previousTestMerge => appliedTestMergeIds.Contains(previousTestMerge.Id));
+
+ 467 return previousTestMergesMatch;
+
+
+
+ 471 if (revInfoWereLookingFor !=
null)
+
+ 473 lastGoodRevInfo = revInfoWereLookingFor;
+ 474 appliedTestMergeIds.Add(revInfoWereLookingFor.PrimaryTestMerge!.Id);
+ 475 listedNewTestMerges.Remove(newTestMergeParameters);
+
+
+
+
+ 480 while (revInfoWereLookingFor !=
null && listedNewTestMerges.Count > 0);
+
+ 482 revInfoWereLookingFor = lastGoodRevInfo;
+ 483 needToApplyRemainingPrs = listedNewTestMerges.Count != 0;
+ 484 if (needToApplyRemainingPrs)
+ 485 model.NewTestMerges = listedNewTestMerges;
+
+ 487 else if (revInfoWereLookingFor !=
null)
+ 488 needToApplyRemainingPrs =
false;
+
+
+
+ 492 if (revInfoWereLookingFor !=
null)
+
+
+ 495 var commitSha = revInfoWereLookingFor.CommitSha!;
+ 496 logger.LogDebug(
"Reusing existing SHA {sha}...", commitSha);
+ 497 using var resetReporter = NextProgressReporter($
"Reset to {commitSha[..7]}");
+ 498 await repo.ResetToSha(commitSha, resetReporter, cancellationToken);
+ 499 lastRevisionInfo = revInfoWereLookingFor;
+
- 502 var mergeResult = await repo.AddTestMerge(
-
-
-
-
-
-
- 509 NextProgressReporter($
"Test merge #{newTestMerge.Number}"),
-
-
- 512 if (mergeResult.Status == MergeStatus.Conflicts)
-
-
-
- 516 $
"Test Merge #{newTestMerge.Number} at {newTestMerge.TargetCommitSha![..7]} conflicted! Conflicting files:{Environment.NewLine}{String.Join(Environment.NewLine, mergeResult.ConflictingFiles!.Select(file => $"\t- /{file}
"))}"));
-
-
-
-
- 521 fullTestMerge = await fullTestMergeTask;
-
-
-
- 525 logger.LogWarning(
"Error retrieving metadata for test merge #{testMergeNumber}!", newTestMerge.Number);
-
-
-
-
- 530 BodyAtMerge = ex.Message,
- 531 TitleAtMerge = ex.Message,
- 532 Comment = newTestMerge.Comment,
- 533 Number = newTestMerge.Number,
-
-
-
+ 502 if (needToApplyRemainingPrs)
+
+ 504 foreach (var newTestMerge
in newTestMergeModels)
+
+ 506 if (lastRevisionInfo.ActiveTestMerges!.Any(x => x.TestMerge.Number == newTestMerge.Number))
+
+
+ 509 var fullTestMergeTask = repo.GetTestMerge(newTestMerge,
currentModel, cancellationToken);
+
+
+ 512 using (var testMergeReporter = NextProgressReporter($
"Test merge #{newTestMerge.Number}"))
+ 513 mergeResult = await repo.AddTestMerge(
+
+
+
+
+
+
+
+
+
+ 523 if (mergeResult.
Status == MergeStatus.Conflicts)
+
+
+
+ 527 $
"Test Merge #{newTestMerge.Number} at {newTestMerge.TargetCommitSha![..7]} conflicted! Conflicting files:{Environment.NewLine}{String.Join(Environment.NewLine, mergeResult.ConflictingFiles!.Select(file => $"\t- /{file}
"))}"));
+
+
+
+
+ 532 fullTestMerge = await fullTestMergeTask;
+
+
+
+ 536 logger.LogWarning(
"Error retrieving metadata for test merge #{testMergeNumber}!", newTestMerge.Number);
-
- 539 fullTestMerge.TargetCommitSha = newTestMerge.TargetCommitSha;
-
- 541 await UpdateRevInfo(fullTestMerge);
-
-
-
-
- 546 var currentHead = repo.Head;
-
-
- 549 await repo.Synchronize(
- 550 NextProgressReporter(
"Synchronize"),
-
-
-
-
-
-
-
- 558 await UpdateRevInfo();
-
-
-
-
-
-
-
-
-
- 568 var secondStep = startReference !=
null && repo.Head != startSha;
-
-
- 571 await repo.CheckoutObject(
- 572 startReference ?? startSha,
-
-
-
-
- 577 progressReporter.
CreateSection($
"Checkout {startReference ?? startSha[..7]}", secondStep ? 0.5 : 1.0),
-
-
-
- 581 await repo.ResetToSha(startSha, progressReporter.
CreateSection($
"Hard reset to SHA {startSha[..7]}", 0.5),
default);
+
+
+
+ 541 BodyAtMerge = ex.Message,
+ 542 TitleAtMerge = ex.Message,
+ 543 Comment = newTestMerge.Comment,
+ 544 Number = newTestMerge.Number,
+
+
+
+
+
+ 550 fullTestMerge.TargetCommitSha = newTestMerge.TargetCommitSha;
+
+ 552 await UpdateRevInfo(fullTestMerge);
+
+
+
+
+ 557 var currentHead = repo.Head;
+
+
+ 560 using (var syncReporter = NextProgressReporter(
"Synchronize"))
+ 561 await repo.Synchronize(
+
+
+
+
+
+
+
+
+
+ 571 await UpdateRevInfo();
+
+
+
+
+
+
+
+
+
+ 581 var secondStep = startReference !=
null && repo.Head != startSha;
-
-
-
-
-
-
-
-
- 599 CancellationToken cancellationToken)
-
- 601 ArgumentNullException.ThrowIfNull(instance);
- 602 ArgumentNullException.ThrowIfNull(databaseContextFactory);
- 603 ArgumentNullException.ThrowIfNull(progressReporter);
-
- 605 progressReporter.StageName =
"Loading Old Repository";
-
-
- 608 string? oldReference;
-
- 610 ValueTask deleteTask;
- 611 using (var oldRepo = await instance.
RepositoryManager.LoadRepository(cancellationToken))
-
-
-
-
- 616 origin = oldRepo.Origin;
- 617 oldSha = oldRepo.Head;
- 618 oldReference = oldRepo.Reference;
-
-
+
+ 584 using (var checkoutReporter = progressReporter.
CreateSection($
"Checkout {startReference ?? startSha[..7]}", secondStep ? 0.5 : 1.0))
+ 585 await repo.CheckoutObject(
+ 586 startReference ?? startSha,
+
+
+
+
+
+
+
+
+ 595 using (var resetReporter = progressReporter.
CreateSection($
"Hard reset to SHA {startSha[..7]}", 0.5))
+ 596 await repo.ResetToSha(startSha, resetReporter,
default);
+
+
+
+
+
+
+
+
+
+ 614 CancellationToken cancellationToken)
+
+ 616 ArgumentNullException.ThrowIfNull(instance);
+ 617 ArgumentNullException.ThrowIfNull(databaseContextFactory);
+ 618 ArgumentNullException.ThrowIfNull(progressReporter);
+
+ 620 progressReporter.StageName =
"Loading Old Repository";
- 622 progressReporter.StageName =
"Deleting Old Repository";
-
-
-
-
-
-
-
-
-
-
-
-
-
- 636 progressReporter.
CreateSection(
"Cloning New Repository", 0.8),
-
-
- 639 ??
throw new JobException(
"A race condition occurred while recloning the repository. Somehow, it was fully cloned instantly after being deleted!");
-
-
-
- 643 logger.LogWarning(
"Reclone failed, clearing credentials!");
+
+ 623 string? oldReference;
+
+ 625 ValueTask deleteTask;
+ 626 using (var deleteReporter = progressReporter.
CreateSection(
"Deleting Old Repository", 0.1))
+
+ 628 using (var oldRepo = await instance.
RepositoryManager.LoadRepository(cancellationToken))
+
+
+
+
+ 633 origin = oldRepo.Origin;
+ 634 oldSha = oldRepo.Head;
+ 635 oldReference = oldRepo.Reference;
+
+
+
+
+
+
+
+
-
-
-
-
- 649 currentModel.AccessUser =
null;
- 650 currentModel.AccessToken =
null;
- 651 return context.Save(CancellationToken.None);
-
-
-
-
-
-
-
-
-
-
-
- 663 oldReference !=
null,
- 664 progressReporter.
CreateSection(
"Checking out previous Detached Commit", 0.1),
-
-
-
-
+
+
+
+ 648 using var cloneReporter = progressReporter.
CreateSection(
"Cloning New Repository", 0.8);
+
+
+
+
+
+
+
+
+ 657 ??
throw new JobException(
"A race condition occurred while recloning the repository. Somehow, it was fully cloned instantly after being deleted!");
+
+
+
+ 661 logger.LogWarning(
"Reclone failed, clearing credentials!");
+
+
+
+
+
+ 667 currentModel.AccessUser =
null;
+ 668 currentModel.AccessToken =
null;
+ 669 return context.Save(CancellationToken.None);
+
+
+
+
+
+
+ 676 using (var checkoutReporter = progressReporter.
CreateSection(
"Checking out previous Detached Commit", 0.1))
+
+
+
+
+
+
+ 683 oldReference !=
null,
+
+
+
+
+
+
virtual ? long Id
The ID of the entity.
@@ -717,16 +738,18 @@ $(function() {
Service for performing the complex Job of updating the repository on user request.
RepositoryUpdateService(RepositorySettings currentModel, User initiatingUser, ILogger< RepositoryUpdateService > logger, long instanceId)
Initializes a new instance of the RepositoryUpdateService class.
readonly ILogger< RepositoryUpdateService > logger
The ILogger<TCategoryName> for the RepositoryUpdateService.
-async ValueTask RepositoryRecloneJob(IInstanceCore? instance, IDatabaseContextFactory databaseContextFactory, JobProgressReporter progressReporter, CancellationToken cancellationToken)
The job entrypoint used by Controllers.RepositoryController to reclone a repository.
+async ValueTask RepositoryRecloneJob(IInstanceCore? instance, IDatabaseContextFactory databaseContextFactory, JobProgressReporter progressReporter, CancellationToken cancellationToken)
The job entrypoint used by Controllers.RepositoryController to reclone a repository.
readonly long instanceId
The EntityId.Id of the associated Instance.
readonly RepositorySettings currentModel
The current RepositorySettings for the RepositoryUpdateService.
async ValueTask RepositoryUpdateJob(RepositoryUpdateRequest model, IInstanceCore? instance, IDatabaseContextFactory databaseContextFactory, JobProgressReporter progressReporter, CancellationToken cancellationToken)
The job entrypoint used by Controllers.RepositoryController to update the repository's current HEAD.
readonly User initiatingUser
The User that initiated the repository update.
static async ValueTask< bool > LoadRevisionInformation(IRepository repository, IDatabaseContext databaseContext, ILogger logger, Models.Instance instance, string? lastOriginCommitSha, Action< Models.RevisionInformation >? revInfoSink, CancellationToken cancellationToken)
Load the RevisionInformation for the current repository state into a given databaseContext .
+Represents the result of a repository test merge attempt.
+MergeStatus Status
The resulting MergeStatus.
Operation exceptions thrown from the context of a Models.Job.
-Progress reporter for a Job.
-JobProgressReporter CreateSection(string? newStageName, double percentage)
Create a subsection of the JobProgressReporter with its optional own stage name.
-void ReportProgress(double? progress)
Report progress.
+Progress reporter for a Job.
+JobProgressReporter CreateSection(string? newStageName, double percentage)
Create a subsection of the JobProgressReporter with its optional own stage name.
+void ReportProgress(double? progress)
Report progress.
Represents an Api.Models.Instance in the database.
Many to many relationship for Models.RevisionInformation and Models.TestMerge.
@@ -738,7 +761,7 @@ $(function() {
Represents an on-disk git repository.
Task< DateTimeOffset > TimestampCommit(string sha, CancellationToken cancellationToken)
Gets the DateTimeOffset a given sha was created on.
string Head
The SHA of the IRepository HEAD.
-ValueTask CheckoutObject(string committish, string? username, string? password, bool updateSubmodules, bool moveCurrentReference, JobProgressReporter? progressReporter, CancellationToken cancellationToken)
Checks out a given committish .
+ValueTask CheckoutObject(string committish, string? username, string? password, bool updateSubmodules, bool moveCurrentReference, JobProgressReporter progressReporter, CancellationToken cancellationToken)
Checks out a given committish .
IEnumerable< TModel > Local
An IEnumerable<T> of TModel s prioritizing in the working set.
void Add(TModel model)
Add a given model to the the working set.
Factory for scoping usage of IDatabaseContexts. Meant for use by Components.
diff --git a/_session_controller_8cs_source.html b/_session_controller_8cs_source.html
index 4757c442b0..79245a32c5 100644
--- a/_session_controller_8cs_source.html
+++ b/_session_controller_8cs_source.html
@@ -174,7 +174,7 @@ $(function() {
-
+
@@ -1176,7 +1176,6 @@ $(function() {
readonly IEventConsumer eventConsumer
The IEventConsumer for the SessionController.
BridgeResponse BridgeError(string message)
Log and return a BridgeResponse for a given message .
bool released
If process should be kept alive instead.
-long MemoryUsage
Gets the process' memory usage in bytes.
readonly IChatManager chat
The IChatManager for the SessionController.
readonly IChatTrackingContext chatTrackingContext
The IChatTrackingContext for the SessionController.
Task< int?> Lifetime
The Task<TResult> resulting in the exit code of the process or null if the process was detached.
@@ -1192,6 +1191,7 @@ $(function() {
string GenerateQueryString(TopicParameters parameters, out string json)
Generates a Byond.TopicSender.ITopicClient query string for a given set of parameters .
void CheckDisposed()
Throws an ObjectDisposedException if DisposeAsync has been called.
readonly? IBridgeRegistration bridgeRegistration
The IBridgeRegistration for the SessionController.
+long? MemoryUsage
Gets the process' memory usage in bytes.
async Task< LaunchResult > GetLaunchResult(IAssemblyInformationProvider assemblyInformationProvider, IAsyncDelayer asyncDelayer, uint? startupTimeout, bool reattached, bool apiValidate)
The Task<TResult> for LaunchResult.
IAsyncDisposable ReplaceDmbProvider(IDmbProvider dmbProvider)
Replace the IDmbProvider in use with a given newProvider , disposing the old one. An IAsyncDisposable...
Task OnStartup
A Task that completes when the server calls /world/TgsNew().
@@ -1246,7 +1246,7 @@ $(function() {
void SuspendProcess()
Suspends the process.
void ResumeProcess()
Resumes the process.
void AdjustPriority(bool higher)
Set's the owned global::System.Diagnostics.Process.PriorityClass to a non-normal value.
-long MemoryUsage
Gets the process' memory usage in bytes.
+long? MemoryUsage
Gets the process' memory usage in bytes.
ValueTask CreateDump(string outputFile, bool minidump, CancellationToken cancellationToken)
Create a dump file of the process.
Task< int?> Lifetime
The Task<TResult> resulting in the exit code of the process or null if the process was detached.
Abstraction over a global::System.Diagnostics.Process.
diff --git a/_tgstation_8_server_8_host_2_components_2_instance_8cs_source.html b/_tgstation_8_server_8_host_2_components_2_instance_8cs_source.html
index 6bc5b5dd5b..68ae7d64da 100644
--- a/_tgstation_8_server_8_host_2_components_2_instance_8cs_source.html
+++ b/_tgstation_8_server_8_host_2_components_2_instance_8cs_source.html
@@ -625,7 +625,7 @@ $(function() {
async ValueTask DeploymentProcess(Models.Job job, IDatabaseContextFactory databaseContextFactory, JobProgressReporter progressReporter, CancellationToken cancellationToken)
Task StopAsync(CancellationToken cancellationToken)
-async Task StartAsync(CancellationToken cancellationToken)
+async Task StartAsync(CancellationToken cancellationToken)
Task? timerTask
The auto update Task.
@@ -657,8 +657,8 @@ $(function() {
async ValueTask< IRepository?> LoadRepository(CancellationToken cancellationToken)
Attempt to load the IRepository from the default location. A ValueTask<TResult> resulting in the load...
Operation exceptions thrown from the context of a Models.Job.
-Progress reporter for a Job.
-JobProgressReporter CreateSection(string? newStageName, double percentage)
Create a subsection of the JobProgressReporter with its optional own stage name.
+Progress reporter for a Job.
+JobProgressReporter CreateSection(string? newStageName, double percentage)
Create a subsection of the JobProgressReporter with its optional own stage name.
Represents an Api.Models.Instance in the database.
static Job Create(JobCode code, User? startedBy, Api.Models.Instance instance)
Creates a new job for registering in the Jobs.IJobService.
diff --git a/_watchdog_base_8cs_source.html b/_watchdog_base_8cs_source.html
index 4140011a1c..1655e0a6f9 100644
--- a/_watchdog_base_8cs_source.html
+++ b/_watchdog_base_8cs_source.html
@@ -124,7 +124,7 @@ $(function() {
-
+
@@ -1253,7 +1253,7 @@ $(function() {
Interface for using filesystems.
Manages the runtime of Jobs.
ValueTask RegisterOperation(Job job, JobEntrypoint operation, CancellationToken cancellationToken)
Registers a given Job and begins running it.
-long MemoryUsage
Gets the process' memory usage in bytes.
+long? MemoryUsage
Gets the process' memory usage in bytes.
For waiting asynchronously.
diff --git a/_windows_open_dream_installer_8cs_source.html b/_windows_open_dream_installer_8cs_source.html
index 28ad7ac442..9dea4c76de 100644
--- a/_windows_open_dream_installer_8cs_source.html
+++ b/_windows_open_dream_installer_8cs_source.html
@@ -196,7 +196,7 @@ $(function() {
IIOManager IOManager
Gets the IIOManager for the EngineInstallerBase.
ILogger< EngineInstallerBase > Logger
Gets the ILogger for the EngineInstallerBase.
Implementation of IEngineInstaller for EngineType.OpenDream.
-void GetExecutablePaths(string installationPath, out string serverExePath, out string compilerExePath)
Gets the paths to the server and client executables.
+void GetExecutablePaths(string installationPath, out string serverExePath, out string compilerExePath)
Gets the paths to the server and client executables.
readonly IAbstractHttpClientFactory httpClientFactory
The IAbstractHttpClientFactory for the OpenDreamInstaller.
readonly IPlatformIdentifier platformIdentifier
The IPlatformIdentifier for the OpenDreamInstaller.
readonly IRepositoryManager repositoryManager
The IRepositoryManager for the OpenDream repository.
diff --git a/changelog.yml b/changelog.yml
index 3dcbe47c9b..5d432beb97 100644
--- a/changelog.yml
+++ b/changelog.yml
@@ -182,6 +182,11 @@ Components:
- The version in use can now be anonymously reported for statistics.
Author: Cyberboss
PullRequest: 1859
+ - Descriptions:
+ - Fixed several inconsistencies related to job progress reporting.
+ - Fixed request failures that could occur while querying game server memory as the process was crashing.
+ Author: Cyberboss
+ PullRequest: 1881
Unreleased: true
- Version: 6.8.1
ComponentVersions:
diff --git a/class_i_disposable.html b/class_i_disposable.html
index bacec75e70..e94827d242 100644
--- a/class_i_disposable.html
+++ b/class_i_disposable.html
@@ -78,7 +78,7 @@ Inheritance diagram for IDisposable:
-
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -118,8 +119,8 @@ Inheritance diagram for IDisposable:
-
-
+
+
[legend]
The documentation for this class was generated from the following file: