From 274ef027dc44d4818da154edfaa3fa0706eda1ff Mon Sep 17 00:00:00 2001 From: warriorstar-orion Date: Sat, 5 Nov 2022 11:58:35 -0400 Subject: [PATCH] Add required configuration for automated map merge script. (#19484) * Update merge_driver script. * Actually tick and compile new files. * Improve marker description. --- .gitattributes | 2 ++ code/modules/mapping/merge_conflicts.dm | 17 +++++++++++++++++ icons/effects/mapping_helpers.dmi | Bin 9242 -> 9833 bytes paradise.dme | 1 + tools/ci/check_grep.sh | 9 +++++++++ tools/mapmerge2/merge_driver.py | 13 +++++++++---- 6 files changed, 38 insertions(+), 4 deletions(-) create mode 100644 .gitattributes create mode 100644 code/modules/mapping/merge_conflicts.dm diff --git a/.gitattributes b/.gitattributes new file mode 100644 index 00000000000..d7a9139e8ac --- /dev/null +++ b/.gitattributes @@ -0,0 +1,2 @@ +## Merger hooks, run tools/hooks/install.bat or install.sh to set up +*.dmm text eol=lf merge=dmm diff --git a/code/modules/mapping/merge_conflicts.dm b/code/modules/mapping/merge_conflicts.dm new file mode 100644 index 00000000000..bc6a647068b --- /dev/null +++ b/code/modules/mapping/merge_conflicts.dm @@ -0,0 +1,17 @@ +// Used by mapmerge2 to denote the existence of a merge conflict (or when it has to complete a "best intent" merge where it dumps the movable contents of an old key and a new key on the same tile). +// We define it explicitly here to ensure that it shows up on the highest possible plane (while giving off a verbose icon) to aide mappers in resolving these conflicts. +// DO NOT USE THIS IN NORMAL MAPPING!!! Linters WILL fail. + +/obj/merge_conflict_marker + name = "Merge Conflict Marker - DO NOT USE" + icon = 'icons/effects/mapping_helpers.dmi' + icon_state = "merge_conflict_marker" + desc = "If you are seeing this in-game: someone REALLY, REALLY, REALLY fucked up. Please make an issue report on GitHub or contact a coder as soon as possible." + plane = POINT_PLANE + +///We REALLY do not want un-addressed merge conflicts in maps for an inexhaustible list of reasons. This should help ensure that this will not be missed in case linters fail to catch it for any reason what-so-ever. +/obj/merge_conflict_marker/Initialize(mapload) + . = ..() + var/msg = "HEY, LISTEN!!! Merge Conflict Marker detected at [AREACOORD(src)]! Please manually address all potential merge conflicts!!!" + warning(msg) + to_chat(world, "[msg]") diff --git a/icons/effects/mapping_helpers.dmi b/icons/effects/mapping_helpers.dmi index b82578726a2e342aa79875f3949a7cf9d49b085d..3959c8fd205934536ed738ecd4a1647c52443462 100644 GIT binary patch literal 9833 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 diff --git a/paradise.dme b/paradise.dme index 6551663ecc1..7acb9ca86f6 100644 --- a/paradise.dme +++ b/paradise.dme @@ -1782,6 +1782,7 @@ #include "code\modules\mapping\cyberiad.dm" #include "code\modules\mapping\delta.dm" #include "code\modules\mapping\mapping_helpers.dm" +#include "code\modules\mapping\merge_conflicts.dm" #include "code\modules\mapping\metastation.dm" #include "code\modules\mapping\test_tiny.dm" #include "code\modules\martial_arts\adminfu.dm" diff --git a/tools/ci/check_grep.sh b/tools/ci/check_grep.sh index aff249df8a1..b34715bc5c8 100755 --- a/tools/ci/check_grep.sh +++ b/tools/ci/check_grep.sh @@ -31,6 +31,15 @@ if grep -P '^/*var/' code/**/*.dm; then echo "ERROR: Unmanaged global var use detected in code, please use the helpers." st=1 fi; +# Check for merge conflict markers and their associated description text. +if grep -P 'Merge Conflict Marker' _maps/**/*.dmm; then + echo "ERROR: Merge conflict markers detected in map, please resolve all merge failures!" + st=1 +fi; +if grep -P '/obj/merge_conflict_marker' _maps/**/*.dmm; then + echo "ERROR: Merge conflict markers detected in map, please resolve all merge failures!" + st=1 +fi; nl=' ' nl=$'\n' diff --git a/tools/mapmerge2/merge_driver.py b/tools/mapmerge2/merge_driver.py index 440b90628a7..8daead9c165 100644 --- a/tools/mapmerge2/merge_driver.py +++ b/tools/mapmerge2/merge_driver.py @@ -1,5 +1,6 @@ #!/usr/bin/env python3 -import sys, collections +import sys +import collections from . import dmm, mapmerge from hooks.merge_frontend import MergeDriver @@ -74,9 +75,13 @@ def three_way_merge(base, left, right): print(f" C: Both sides touch the tile at {coord}") if merged_movables is None: - obj_name = "---Merge conflict marker---" - merged_movables = left_movables + [f'/obj{{name = "{obj_name}"}}'] + right_movables - print(f" Left and right movable groups are split by an `/obj` named \"{obj_name}\"") + # Note that if you do not have an object that matches this path in your DME, the invalid path may be discarded when the map is loaded into a map editor. + # To rectify this, either add an object with this same path, or create a new object/denote an existing object in the obj_path define. + obj_path = "/obj/merge_conflict_marker" + obj_name = "---Merge Conflict Marker---" + obj_desc = "A best-effort merge was performed. You must resolve this conflict yourself (manually) and remove this object once complete." + merged_movables = left_movables + [f'{obj_path}{{name = "{obj_name}";\n\tdesc = "{obj_desc}"}}'] + right_movables + print(f" Left and right movable groups are split by an `{obj_path}` named \"{obj_name}\"") if merged_turfs is None: merged_turfs = left_turfs print(f" Saving turf: {', '.join(left_turfs)}")