From 3e2c58a0143c2f7943b1602b69590e0028765e9f Mon Sep 17 00:00:00 2001 From: Kai Roth Date: Tue, 28 Mar 2023 15:30:22 +0200 Subject: [PATCH 1/5] refactor: :recycle: `validate_distinct_mod_ids_in_arrays()` reworked `validate_dependencies_and_incompatibilities_conflicts()` to work with any arrays, renamed it to `validate_distinct_mod_ids_in_arrays()`. Fixed the accidentally removed function call of `validate_dependencies_and_incompatibilities_conflicts()` in `_init()`. Added validation to check for distinct mod_ids in `incompatibilities` and `optional_dependencies`. closes #192 --- addons/mod_loader/classes/mod_manifest.gd | 32 ++++++++++++++++------- 1 file changed, 22 insertions(+), 10 deletions(-) diff --git a/addons/mod_loader/classes/mod_manifest.gd b/addons/mod_loader/classes/mod_manifest.gd index 5e645fe3..bc0c0fdd 100644 --- a/addons/mod_loader/classes/mod_manifest.gd +++ b/addons/mod_loader/classes/mod_manifest.gd @@ -91,7 +91,19 @@ func _init(manifest: Dictionary) -> void: var mod_id = get_mod_id() if (not is_mod_id_array_valid(mod_id, dependencies, "dependency") or not is_mod_id_array_valid(mod_id, incompatibilities, "incompatibility") or - not is_mod_id_array_valid(mod_id, optional_dependencies, "optional_dependency")): + not is_mod_id_array_valid(mod_id, optional_dependencies, "optional_dependency") or + not validate_distinct_mod_ids_in_arrays( + mod_id, + dependencies, + incompatibilities, + ["dependencies", "incompatibilities"] + ) or + not validate_distinct_mod_ids_in_arrays( + mod_id, + optional_dependencies, + incompatibilities, + ["optional_dependencies", "incompatibilities"] + )): return @@ -249,28 +261,28 @@ static func is_semver_valid(check_version_number: String, is_silent := false) -> return true -# Validates a mod's dependencies and incompatibilities to ensure they don't conflict. -static func validate_dependencies_and_incompatibilities_conflicts( +static func validate_distinct_mod_ids_in_arrays( mod_id: String, - dependencies: PoolStringArray, - incompatibilities: PoolStringArray, + array_one: PoolStringArray, + array_two: PoolStringArray, + array_description: PoolStringArray, is_silent := false ) -> bool: # Initialize an empty array to hold any overlaps. var overlaps: PoolStringArray = [] # Loop through each incompatibility and check if it is also listed as a dependency. - for incompatibility in incompatibilities: - if dependencies.has(incompatibility): - overlaps.push_back(incompatibility) + for mod_id in array_one: + if array_two.has(mod_id): + overlaps.push_back(mod_id) # If any overlaps were found, log a fatal error message and return true. if overlaps.size() > 0: if not is_silent: ModLoaderUtils.log_fatal( ( - "The mod -> %s lists the same mod(s) -> %s - in incompatibilities and dependencies" - % [mod_id, overlaps] + "The mod -> %s lists the same mod(s) -> %s - in %s and %s" + % [mod_id, overlaps, array_description[0], array_description[1]] ), LOG_NAME ) From aca41ae3f4d4232f185eed196220ab1b57e302bb Mon Sep 17 00:00:00 2001 From: Kai Roth Date: Tue, 28 Mar 2023 16:52:37 +0200 Subject: [PATCH 2/5] fix: :bug: wrong return values --- addons/mod_loader/classes/mod_manifest.gd | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/addons/mod_loader/classes/mod_manifest.gd b/addons/mod_loader/classes/mod_manifest.gd index bc0c0fdd..757943b1 100644 --- a/addons/mod_loader/classes/mod_manifest.gd +++ b/addons/mod_loader/classes/mod_manifest.gd @@ -286,10 +286,10 @@ static func validate_distinct_mod_ids_in_arrays( ), LOG_NAME ) - return true + return false # If no overlaps were found, return false. - return false + return true static func is_mod_id_array_valid(own_mod_id: String, mod_id_array: PoolStringArray, mod_id_array_description: String, is_silent := false) -> bool: From 030c17285e4c216c3398ca096ff7780363f24432 Mon Sep 17 00:00:00 2001 From: Kai Roth Date: Tue, 28 Mar 2023 16:53:29 +0200 Subject: [PATCH 3/5] feat: :sparkles: added `additional_info` parameter --- addons/mod_loader/classes/mod_manifest.gd | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/addons/mod_loader/classes/mod_manifest.gd b/addons/mod_loader/classes/mod_manifest.gd index 757943b1..43b78c28 100644 --- a/addons/mod_loader/classes/mod_manifest.gd +++ b/addons/mod_loader/classes/mod_manifest.gd @@ -266,6 +266,7 @@ static func validate_distinct_mod_ids_in_arrays( array_one: PoolStringArray, array_two: PoolStringArray, array_description: PoolStringArray, + additional_info := "", is_silent := false ) -> bool: # Initialize an empty array to hold any overlaps. @@ -281,8 +282,8 @@ static func validate_distinct_mod_ids_in_arrays( if not is_silent: ModLoaderUtils.log_fatal( ( - "The mod -> %s lists the same mod(s) -> %s - in %s and %s" - % [mod_id, overlaps, array_description[0], array_description[1]] + "The mod -> %s lists the same mod(s) -> %s - in \"%s\" and \"%s\". %s" + % [mod_id, overlaps, array_description[0], array_description[1], additional_info] ), LOG_NAME ) From 843653606a4245bc178738fe0eca99e57e09442e Mon Sep 17 00:00:00 2001 From: Kai Roth Date: Tue, 28 Mar 2023 22:12:54 +0200 Subject: [PATCH 4/5] style: :art: fixed comments | added early return --- addons/mod_loader/classes/mod_manifest.gd | 26 +++++++++++------------ 1 file changed, 13 insertions(+), 13 deletions(-) diff --git a/addons/mod_loader/classes/mod_manifest.gd b/addons/mod_loader/classes/mod_manifest.gd index 43b78c28..64dc5664 100644 --- a/addons/mod_loader/classes/mod_manifest.gd +++ b/addons/mod_loader/classes/mod_manifest.gd @@ -277,21 +277,21 @@ static func validate_distinct_mod_ids_in_arrays( if array_two.has(mod_id): overlaps.push_back(mod_id) - # If any overlaps were found, log a fatal error message and return true. - if overlaps.size() > 0: - if not is_silent: - ModLoaderUtils.log_fatal( - ( - "The mod -> %s lists the same mod(s) -> %s - in \"%s\" and \"%s\". %s" - % [mod_id, overlaps, array_description[0], array_description[1], additional_info] - ), - LOG_NAME - ) + # If no overlaps were found + if overlaps.size() == 0: + return true + + # If any overlaps were found + if not is_silent: + ModLoaderUtils.log_fatal( + ( + "The mod -> %s lists the same mod(s) -> %s - in \"%s\" and \"%s\". %s" + % [mod_id, overlaps, array_description[0], array_description[1], additional_info] + ), + LOG_NAME + ) return false - # If no overlaps were found, return false. - return true - static func is_mod_id_array_valid(own_mod_id: String, mod_id_array: PoolStringArray, mod_id_array_description: String, is_silent := false) -> bool: var is_valid := true From 154f1ca605df2784d3a98247a1fa861d0363ed4b Mon Sep 17 00:00:00 2001 From: Kai Roth Date: Tue, 28 Mar 2023 22:16:28 +0200 Subject: [PATCH 5/5] fix: :bug: added missing return value --- addons/mod_loader/classes/mod_manifest.gd | 3 +++ 1 file changed, 3 insertions(+) diff --git a/addons/mod_loader/classes/mod_manifest.gd b/addons/mod_loader/classes/mod_manifest.gd index 64dc5664..c744fd44 100644 --- a/addons/mod_loader/classes/mod_manifest.gd +++ b/addons/mod_loader/classes/mod_manifest.gd @@ -292,6 +292,9 @@ static func validate_distinct_mod_ids_in_arrays( ) return false + # If silent just return false + return false + static func is_mod_id_array_valid(own_mod_id: String, mod_id_array: PoolStringArray, mod_id_array_description: String, is_silent := false) -> bool: var is_valid := true