Skip to content

Commit 400a946

Browse files
authored
fix: pack format with subproject and overlays (#487)
1 parent e15dc6a commit 400a946

File tree

16 files changed

+167
-17
lines changed

16 files changed

+167
-17
lines changed

beet/library/base.py

Lines changed: 37 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -775,15 +775,22 @@ def merge(self, other: "Mcmeta") -> bool: # type: ignore
775775
overlays: Any = self.data.setdefault("overlays", {})
776776
for entry in overlays.setdefault("entries", []):
777777
if entry.get("directory") == other_entry.get("directory"):
778-
entry["formats"] = deepcopy(other_entry.get("formats"))
778+
if (value := deepcopy(other_entry.get("formats"))) is None:
779+
entry.pop("formats", None)
780+
else:
781+
entry["formats"] = value
779782
if (
780-
x := deepcopy(other_entry.get("min_format"))
781-
) is not None:
782-
entry["min_format"] = x
783+
value := deepcopy(other_entry.get("min_format"))
784+
) is None:
785+
entry.pop("min_format", None)
786+
else:
787+
entry["min_format"] = value
783788
if (
784-
x := deepcopy(other_entry.get("max_format"))
785-
) is not None:
786-
entry["max_format"] = x
789+
value := deepcopy(other_entry.get("max_format"))
790+
) is None:
791+
entry.pop("max_format", None)
792+
else:
793+
entry["max_format"] = value
787794
break
788795
else:
789796
overlays["entries"].append(deepcopy(other_entry))
@@ -1188,8 +1195,8 @@ def merge(
11881195
super().merge(other) # type: ignore
11891196

11901197
if isinstance(self, Pack) and isinstance(other, Pack):
1191-
self.extra.merge(other.extra) # type: ignore
11921198
self.overlays.merge(other.overlays) # type: ignore
1199+
self.extra.merge(other.extra) # type: ignore
11931200

11941201
empty_namespaces = [key for key, value in self.items() if not value] # type: ignore
11951202
for namespace in empty_namespaces:
@@ -1321,14 +1328,23 @@ def supported_formats(self, value: Optional[SupportedFormats]):
13211328
overlays: Any = self.overlay_parent.mcmeta.data.setdefault("overlays", {})
13221329
for entry in overlays.setdefault("entries", []):
13231330
if entry.get("directory") == self.overlay_name:
1324-
entry["formats"] = value
1331+
if value is None:
1332+
entry.pop("formats", None)
1333+
else:
1334+
entry["formats"] = value
13251335
break
13261336
else:
1327-
overlays["entries"].append(
1328-
{"formats": value, "directory": self.overlay_name}
1329-
)
1337+
if value is not None:
1338+
overlays["entries"].append(
1339+
{"formats": value, "directory": self.overlay_name}
1340+
)
1341+
else:
1342+
overlays["entries"].append({"directory": self.overlay_name})
13301343
else:
1331-
self.mcmeta.data.setdefault("pack", {})["supported_formats"] = value
1344+
if value is None:
1345+
self.mcmeta.data.setdefault("pack", {}).pop("supported_formats", None)
1346+
else:
1347+
self.mcmeta.data.setdefault("pack", {})["supported_formats"] = value
13321348

13331349
@property
13341350
def min_format(self) -> Optional[FormatSpecifier]:
@@ -1356,6 +1372,8 @@ def min_format(self, value: Optional[FormatSpecifier]):
13561372
overlays["entries"].append(
13571373
{"directory": self.overlay_name, "min_format": value}
13581374
)
1375+
else:
1376+
overlays["entries"].append({"directory": self.overlay_name})
13591377
pack = self.mcmeta.data.setdefault("pack", {})
13601378
if value is None:
13611379
pack.pop("min_format", None)
@@ -1384,9 +1402,12 @@ def max_format(self, value: Optional[FormatSpecifier]):
13841402
entry["max_format"] = value
13851403
break
13861404
else:
1387-
overlays["entries"].append(
1388-
{"directory": self.overlay_name, "max_format": value}
1389-
)
1405+
if value is None:
1406+
overlays["entries"].append({"directory": self.overlay_name})
1407+
else:
1408+
overlays["entries"].append(
1409+
{"directory": self.overlay_name, "max_format": value}
1410+
)
13901411
pack = self.mcmeta.data.setdefault("pack", {})
13911412
if value is None:
13921413
pack.pop("max_format", None)

beet/toolchain/project.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -268,7 +268,7 @@ def build(self) -> Iterator[Context]:
268268
project_root=self.root,
269269
minecraft_version=self.config.minecraft or LATEST_MINECRAFT_VERSION,
270270
directory=self.project.directory,
271-
output_directory=self.project.output_directory,
271+
output_directory=self.project.output_directory if self.root else None,
272272
meta=meta,
273273
cache=cache,
274274
worker=stack.enter_context(self.project.worker_pool.handle()),
Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
require: [demo]
2+
3+
output: build
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
from beet import Context, subproject
2+
3+
4+
def beet_default(ctx: Context):
5+
ctx.require(subproject("@demo"))
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
2+
3+
4+
data_pack:
5+
load: ["."]
6+
min_format: 88
7+
max_format: 88
8+
overlays:
9+
- directory: my_overlay
10+
min_format: 85
11+
max_format: 91
12+
pack_format: 85
13+
14+
15+
output: build
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
say HELLO
Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
{
2+
"test": "original"
3+
}
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
say WORLD
Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
{
2+
"test": "overlay"
3+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
say HELLO

0 commit comments

Comments
 (0)