Files
VOREStation/tools/mapmerge2/precommit.py
T
Drathek 9f124e5b14 Tooling Update and Maplint Port (#17199)
* Initial

* Remove corrupt dmis

* Fixup maps in TGM format

4e5a32721f: maps/_templates_and_guidance/Public Event Templates/Maze_Reward_-_Copy.dmm
4e5a32721f: maps/_templates_and_guidance/Templates/shelter_Medical.dmm
4e5a32721f: maps/expedition_vr/aerostat/aerostat.dmm
4e5a32721f: maps/expedition_vr/aerostat/aerostat_science_outpost.dmm
4e5a32721f: maps/expedition_vr/beach/submaps/deadBeacon.dmm
4e5a32721f: maps/expedition_vr/wild/tether_wild-crash-alt.dmm
4e5a32721f: maps/expedition_vr/wild/tether_wild-crash.dmm
4e5a32721f: maps/expedition_vr/wild/tether_wild-surface.dmm
4e5a32721f: maps/expedition_vr/wild/tether_wild-temple.dmm
4e5a32721f: maps/gateway_vr/lucky_7.dmm
4e5a32721f: maps/gateway_vr/snow_outpost.dmm
4e5a32721f: maps/overmap/_map.dmm
4e5a32721f: maps/overmap/bearcat/bearcat.dmm
4e5a32721f: maps/overmap/example_sector1.dmm
4e5a32721f: maps/overmap/example_sector2.dmm
4e5a32721f: maps/redgate/falls/falls.dmm
4e5a32721f: maps/submaps/pois_vr/aerostat/CaveS.dmm
4e5a32721f: maps/submaps/pois_vr/aerostat/DeadSettlers1.dmm
4e5a32721f: maps/submaps/pois_vr/aerostat/DeadSettlers2.dmm
4e5a32721f: maps/submaps/pois_vr/aerostat/DoomP.dmm
4e5a32721f: maps/submaps/pois_vr/aerostat/Lab1.dmm
4e5a32721f: maps/submaps/pois_vr/aerostat/Rockybase.dmm
4e5a32721f: maps/submaps/pois_vr/debris_field/debris14.dmm
4e5a32721f: maps/submaps/pois_vr/debris_field/derelict.dmm
4e5a32721f: maps/submaps/pois_vr/debris_field/new_escapepod_xeno.dmm
4e5a32721f: maps/submaps/surface_submaps/mountains/BlastMine1.dmm
4e5a32721f: maps/submaps/surface_submaps/mountains/CaveTrench.dmm
4e5a32721f: maps/submaps/surface_submaps/mountains/Cavelake.dmm
4e5a32721f: maps/submaps/surface_submaps/mountains/Cliff1.dmm
4e5a32721f: maps/submaps/surface_submaps/mountains/CrashedMedShuttle1.dmm
4e5a32721f: maps/submaps/surface_submaps/mountains/Geyser1.dmm
4e5a32721f: maps/submaps/surface_submaps/mountains/Geyser2.dmm
4e5a32721f: maps/submaps/surface_submaps/mountains/Geyser3.dmm
4e5a32721f: maps/submaps/surface_submaps/mountains/Mineshaft1.dmm
4e5a32721f: maps/submaps/surface_submaps/mountains/Scave1.dmm
4e5a32721f: maps/submaps/surface_submaps/mountains/SupplyDrop1.dmm
4e5a32721f: maps/submaps/surface_submaps/mountains/crashed_ufo.dmm
4e5a32721f: maps/submaps/surface_submaps/mountains/crashed_ufo_frigate.dmm
4e5a32721f: maps/submaps/surface_submaps/mountains/crashedcontainmentshuttle.dmm
4e5a32721f: maps/submaps/surface_submaps/mountains/crystal1.dmm
4e5a32721f: maps/submaps/surface_submaps/mountains/crystal2.dmm
4e5a32721f: maps/submaps/surface_submaps/mountains/crystal3.dmm
4e5a32721f: maps/submaps/surface_submaps/mountains/deadBeacon.dmm
4e5a32721f: maps/submaps/surface_submaps/mountains/deadly_rabbit_vr.dmm
4e5a32721f: maps/submaps/surface_submaps/mountains/deadspy.dmm
4e5a32721f: maps/submaps/surface_submaps/mountains/digsite.dmm
4e5a32721f: maps/submaps/surface_submaps/mountains/excavation1.dmm
4e5a32721f: maps/submaps/surface_submaps/mountains/lava_trench.dmm
4e5a32721f: maps/submaps/surface_submaps/mountains/prepper1.dmm
4e5a32721f: maps/submaps/surface_submaps/mountains/ritual.dmm
4e5a32721f: maps/submaps/surface_submaps/mountains/spatial_anomaly.dmm
4e5a32721f: maps/submaps/surface_submaps/mountains/speakeasy_vr.dmm
4e5a32721f: maps/submaps/surface_submaps/mountains/vault1.dmm
4e5a32721f: maps/submaps/surface_submaps/mountains/vault2.dmm
4e5a32721f: maps/submaps/surface_submaps/mountains/vault3.dmm
4e5a32721f: maps/submaps/surface_submaps/mountains/vault4.dmm
4e5a32721f: maps/submaps/surface_submaps/mountains/vault5.dmm
4e5a32721f: maps/submaps/surface_submaps/mountains/vault6.dmm
4e5a32721f: maps/submaps/surface_submaps/plains/Boathouse.dmm
4e5a32721f: maps/submaps/surface_submaps/plains/BuriedTreasure.dmm
4e5a32721f: maps/submaps/surface_submaps/plains/BuriedTreasure2.dmm
4e5a32721f: maps/submaps/surface_submaps/plains/BuriedTreasure3.dmm
4e5a32721f: maps/submaps/surface_submaps/plains/Oldhouse.dmm
4e5a32721f: maps/submaps/surface_submaps/plains/PooledR.dmm
4e5a32721f: maps/submaps/surface_submaps/plains/Rocky5.dmm
4e5a32721f: maps/submaps/surface_submaps/plains/Shakden.dmm
4e5a32721f: maps/submaps/surface_submaps/plains/Thiefc.dmm
4e5a32721f: maps/submaps/surface_submaps/plains/beacons.dmm
4e5a32721f: maps/submaps/surface_submaps/plains/chemspill1.dmm
4e5a32721f: maps/submaps/surface_submaps/plains/farm1.dmm
4e5a32721f: maps/submaps/surface_submaps/plains/house1.dmm
4e5a32721f: maps/submaps/surface_submaps/plains/lonehome.dmm
4e5a32721f: maps/submaps/surface_submaps/plains/smol2.dmm
4e5a32721f: maps/submaps/surface_submaps/wilderness/Blackshuttledown.dmm
4e5a32721f: maps/submaps/surface_submaps/wilderness/Blueshuttledown.dmm
4e5a32721f: maps/submaps/surface_submaps/wilderness/Boombase.dmm
4e5a32721f: maps/submaps/surface_submaps/wilderness/CaveS.dmm
4e5a32721f: maps/submaps/surface_submaps/wilderness/Chapel.dmm
4e5a32721f: maps/submaps/surface_submaps/wilderness/Cragzone1.dmm
4e5a32721f: maps/submaps/surface_submaps/wilderness/DJOutpost1.dmm
4e5a32721f: maps/submaps/surface_submaps/wilderness/DJOutpost2.dmm
4e5a32721f: maps/submaps/surface_submaps/wilderness/DJOutpost3.dmm
4e5a32721f: maps/submaps/surface_submaps/wilderness/DJOutpost4.dmm
4e5a32721f: maps/submaps/surface_submaps/wilderness/DecoupledEngine.dmm
4e5a32721f: maps/submaps/surface_submaps/wilderness/DoomP.dmm
4e5a32721f: maps/submaps/surface_submaps/wilderness/Drugden.dmm
4e5a32721f: maps/submaps/surface_submaps/wilderness/Epod3.dmm
4e5a32721f: maps/submaps/surface_submaps/wilderness/Epod4.dmm
4e5a32721f: maps/submaps/surface_submaps/wilderness/Flake.dmm
4e5a32721f: maps/submaps/surface_submaps/wilderness/FrostflyNest.dmm
4e5a32721f: maps/submaps/surface_submaps/wilderness/MCamp1.dmm
4e5a32721f: maps/submaps/surface_submaps/wilderness/MHR.dmm
4e5a32721f: maps/submaps/surface_submaps/wilderness/Manor1.dmm
4e5a32721f: maps/submaps/surface_submaps/wilderness/Mudpit.dmm
4e5a32721f: maps/submaps/surface_submaps/wilderness/Rocky1.dmm
4e5a32721f: maps/submaps/surface_submaps/wilderness/Rocky3.dmm
4e5a32721f: maps/submaps/surface_submaps/wilderness/Rocky4.dmm
4e5a32721f: maps/submaps/surface_submaps/wilderness/Rockybase.dmm
4e5a32721f: maps/submaps/surface_submaps/wilderness/Shack1.dmm
4e5a32721f: maps/submaps/surface_submaps/wilderness/Shelter.dmm
4e5a32721f: maps/submaps/surface_submaps/wilderness/Smol1.dmm
4e5a32721f: maps/submaps/surface_submaps/wilderness/Snowrock1.dmm
4e5a32721f: maps/submaps/surface_submaps/wilderness/borglab.dmm
4e5a32721f: maps/submaps/surface_submaps/wilderness/butchershack.dmm
4e5a32721f: maps/submaps/surface_submaps/wilderness/chasm.dmm
4e5a32721f: maps/submaps/surface_submaps/wilderness/chemspill2.dmm
4e5a32721f: maps/submaps/surface_submaps/wilderness/deathden.dmm
4e5a32721f: maps/submaps/surface_submaps/wilderness/derelictengine.dmm
4e5a32721f: maps/submaps/surface_submaps/wilderness/frostoasis.dmm
4e5a32721f: maps/submaps/surface_submaps/wilderness/kururakden.dmm
4e5a32721f: maps/submaps/surface_submaps/wilderness/spider1.dmm
4e5a32721f: maps/submaps/surface_submaps/wilderness/wolfden.dmm
4e5a32721f: maps/submaps/surface_submaps/wilderness/xenohive.dmm
4e5a32721f: maps/tether/tether-02-surface2.dmm
4e5a32721f: maps/virgo_minitest/virgo_minitest-sector-2.dmm

Automatically commited by: tools\mapmerge2\fixup.py

* Remove unnecessary whitespace edits from mapmerger

* Cable dirs update path

* Fix area var edits

* Put the area over there

* Ignore archive maps folder

* Forgot to port multivar support too

* A few changes I forgot about for hook install

* restore multivar support that chomp doesn't have yet

* ban those

* Forgot to add code for the marker too

* Couple more of these invalid cables were added in master

* Update multiple_blood_effects.yml

* Update multiple_blood_effects.yml

* Fixup maps in TGM format

612ca9cbb9: maps/tether/submaps/tether_misc.dmm

Automatically commited by: tools\mapmerge2\fixup.py

* Fixup now logs the map its currently checking

* Final fixes?

* Fixup maps in TGM format

3078e5cd0a: maps/expedition_vr/beach/submaps/crashedcontainmentshuttle.dmm
3078e5cd0a: maps/redgate/fantasy_dungeon.dmm
3078e5cd0a: maps/submaps/pois_vr/aerostat/Rockybase.dmm
3078e5cd0a: maps/submaps/surface_submaps/mountains/crashedcontainmentshuttle_vr.dmm
3078e5cd0a: maps/submaps/surface_submaps/plains/Oldhouse_vr.dmm
3078e5cd0a: maps/submaps/surface_submaps/plains/dogbase.dmm
3078e5cd0a: maps/submaps/surface_submaps/plains/greatwolfden.dmm
3078e5cd0a: maps/submaps/surface_submaps/plains/lonehome_vr.dmm
3078e5cd0a: maps/submaps/surface_submaps/plains/methlab.dmm
3078e5cd0a: maps/submaps/surface_submaps/plains/oldhotel.dmm
3078e5cd0a: maps/submaps/surface_submaps/plains/priderock.dmm
3078e5cd0a: maps/submaps/surface_submaps/wilderness/Rockybase.dmm
3078e5cd0a: maps/submaps/surface_submaps/wilderness/demonpool.dmm
3078e5cd0a: maps/submaps/surface_submaps/wilderness/dogbase.dmm
3078e5cd0a: maps/submaps/surface_submaps/wilderness/greatwolfden.dmm
3078e5cd0a: maps/tether/submaps/underdark_pois/abandonded_outpost.dmm
3078e5cd0a: maps/tether/submaps/underdark_pois/phoron_rat_den.dmm

Automatically commited by: tools\mapmerge2\fixup.py

* Fix tether_misc error

* Remap reused solar farm area

* Fix erroneous bearcat entries

* Fix weird whitespace (most archive maps also affected but didn't bother)

* misc mdb cleanup

* moar

* grr

---------

Co-authored-by: Kashargul <144968721+Kashargul@users.noreply.github.com>
Co-authored-by: Cameron Lennox <killer65311@gmail.com>
2025-03-16 01:06:55 +01:00

70 lines
2.5 KiB
Python

#!/usr/bin/env python3
import os
import sys
import pygit2
from . import dmm
from .mapmerge import merge_map
def main(repo, *, use_workdir=False):
if repo.index.conflicts:
print("You need to resolve merge conflicts first.")
return 1
try:
repo.lookup_reference('MERGE_HEAD')
print("Not running mapmerge for merge commit.")
return 0
except KeyError:
pass
target_statuses = pygit2.GIT_STATUS_INDEX_MODIFIED | pygit2.GIT_STATUS_INDEX_NEW
skip_to_file_statuses = pygit2.GIT_STATUS_WT_DELETED | pygit2.GIT_STATUS_WT_MODIFIED
if use_workdir:
target_statuses |= pygit2.GIT_STATUS_WT_MODIFIED | pygit2.GIT_STATUS_WT_NEW
skip_to_file_statuses &= ~pygit2.GIT_STATUS_WT_MODIFIED
changed = 0
for path, status in repo.status().items():
if path.endswith(".dmm") and (status & target_statuses):
# read the index
index_entry = repo.index[path]
if use_workdir:
index_map = dmm.DMM.from_file(os.path.join(repo.workdir, path))
else:
index_map = dmm.DMM.from_bytes(repo[index_entry.id].read_raw())
try:
head_blob = repo[repo[repo.head.target].tree[path].id]
except KeyError:
# New map, no entry in HEAD
print(f"Converting new map: {path}", flush=True)
assert (status & pygit2.GIT_STATUS_INDEX_NEW)
merged_map = index_map
else:
# Entry in HEAD, merge the index over it
print(f"Converting map: {path}", flush=True)
assert not (status & pygit2.GIT_STATUS_INDEX_NEW)
head_map = dmm.DMM.from_bytes(head_blob.read_raw())
merged_map = merge_map(index_map, head_map)
# write to the index
blob_id = repo.create_blob(merged_map.to_bytes())
repo.index.add(pygit2.IndexEntry(path, blob_id, index_entry.mode))
changed += 1
# write to the working directory if that's clean
if status & skip_to_file_statuses:
print(f"Warning: {path} has unindexed changes, not overwriting them")
else:
merged_map.to_file(os.path.join(repo.workdir, path))
if changed:
repo.index.write()
return 0
if __name__ == '__main__':
repo = pygit2.Repository(pygit2.discover_repository(os.getcwd()))
exit(main(repo, use_workdir='--use-workdir' in sys.argv))