Matches the Exiles fork-layout convention (one folder per addon). README
and tools/sweep.py updated for the new path; tools/sweep.py stays at repo
root since it's dev tooling, not part of the shipped bundle.
Two failures that compounded in the last round of ElvUI breakage:
1. The sweep script only lived in /tmp during a session — re-derived
from scratch each time, so the EXCLUDE_FORKS knowledge wasn't
anywhere reviewable.
2. The old filename-only filter ('if -ElvUI in name skip') missed
ElvUI's customizations inside otherwise-stock-named files AND
rsync --delete killed -ElvUI suffixed widgets that exist only in
ElvUI's bundle (e.g. AceGUIWidget-Button-ElvUI.lua).
This tool fixes both:
- Lives in the repo (tools/sweep.py), so the exclusion list is
visible in version control and reviewable.
- EXCLUDED_FORKS = {'coa-elvui'} hardcoded with an in-source comment
explaining why.
- --exclude='*-ElvUI*' passed to every rsync as belt-and-braces, so
even if a future fork accidentally carries an ElvUI-namespaced
file we never wanted to overwrite, the sweep won't touch it.
- Refuses to add new lib dirs — only updates ones already present
in the fork.
- --dry-run flag for safe verification.
README updated with a 'Forks excluded from sweep' section documenting
the same.
Upstream AceDB-3.0's simple-value defaults metatable uses
`function(t,k2) return k2~=nil and v or nil end` — when `v` is itself
falsy (`false`, `0`, `""`), the `and` short-circuits to that falsy
value and the trailing `or nil` then collapses it to nil, so any
`['*'] = false` (or similar) default silently reads back as nil.
Backport of https://github.com/WoWUIDev/Ace3/pull/10 (open upstream since
2023-11-04, not merged). Documented as CoA-compat patch #4 in README;
drop it when upstream finally merges.
AceGUI-3.0/widgets/AceGUIContainer-BlizOptionsGroup.lua: the Constructor
parented its frame to the global InterfaceOptionsFramePanelContainer, which
is nil at AceGUI widget-construction time on the CoA reworked FrameXML.
Guard with 'local _parent = InterfaceOptionsFramePanelContainer or UIParent'
and pass _parent to CreateFrame so addons that register a Blizzard Interface
Options panel don't error out during load.
AceConfig-3.0/AceConfigDialog-3.0/AceConfigDialog-3.0.lua: :AddToBlizOptions
used the Dragonflight+ Settings.* API (GetCategory, RegisterCanvasLayoutCategory,
RegisterCanvasLayoutSubcategory, RegisterAddOnCategory). The Settings table
doesn't exist on the 3.3.5-based CoA client, so every AceConfig-driven options
panel errored the moment it was registered. Wrap the whole Settings.* block in
'if Settings and Settings.GetCategory then ... else ... end' and fall back to
the WotLK-era InterfaceOptions_AddCategory(group.frame) after stamping the
category name via group:SetName(name or appName, parent).
Both retail and CoA paths now work; behaviour on retail is unchanged. luac -p
passes on both files. README CoA-compat patches table updated (entries 2 and 3).
This bundle is the source-of-truth for the Exiles/coa-* forks; the propagation
to bartender / quartz / shadowedunitframes / ai-voiceover / etc. bundled Ace
copies is handled separately.
WoW 3.3.5 / CoA does not support numeric FileDataIDs in Set(*)Texture —
only string paths. Upstream Ace3 uses FDIDs in 42 places across
AceGUI-3.0/widgets and AceConfigDialog-3.0, which silently fail and
render as red placeholders (visible as solid-red squares where color
swatches, checkboxes, and window chrome should be).
Substituted each FDID with the string path documented in the trailing
comment. Files touched:
AceGUI-3.0/widgets/AceGUIContainer-Frame.lua (5)
AceGUI-3.0/widgets/AceGUIContainer-TreeGroup.lua (4)
AceGUI-3.0/widgets/AceGUIContainer-Window.lua (12)
AceGUI-3.0/widgets/AceGUIWidget-CheckBox.lua (9)
AceGUI-3.0/widgets/AceGUIWidget-ColorPicker.lua (3)
AceGUI-3.0/widgets/AceGUIWidget-DropDown-Items.lua (3)
AceGUI-3.0/widgets/AceGUIWidget-Heading.lua (2)
AceGUI-3.0/widgets/AceGUIWidget-Icon.lua (1)
AceConfig-3.0/AceConfigDialog-3.0/AceConfigDialog-3.0.lua (3)
Documented as patch #1 in README.md.