fix: fix refactor issues

This commit is contained in:
2026-09-06 13:59:32 +08:00
parent f650d3f98a
commit 44ba5fbbee
9 changed files with 32 additions and 16 deletions
+8 -6
View File
@@ -10,18 +10,20 @@ from . import std_icons, nostd_icons
def main() -> None:
opts = parse()
def tempdir_initializer(p: Path) -> None:
# create our special temporary subdirectory
comp = p / "component"
comp.mkdir(parents=True, exist_ok=True)
repository_root = Path(__file__).resolve().parent.parent.parent.parent
iconset_input = repository_root / "src"
iconset_output = repository_root / "artifact"
prologue = AuroraPrologue(iconset_input, iconset_output, opts.svg_render)
prologue = AuroraPrologue(
iconset_input, iconset_output, opts.svg_render, tempdir_initializer
)
env = Environment(prologue)
ctx = Context(env)
# TODO: use explicit temporary directory initializer in prologue to do this.
# create our special temporary subdirectory
env.__temporary_artifact("component").mkdir(parents=True, exist_ok=True)
try:
register(ctx)
ctx.run(opts.selection)
@@ -184,7 +184,8 @@ class Context(Generic[P]):
for item in ios:
if not isinstance(item, (Source, Sink)):
raise TypeError(
"passes source or sink instance must be the subclass of Source or Sink"
f"All items in the ios of job {name!r} must be instances "
f"of Source or Sink, but got {type(item)}."
)
self.__jobs[name] = Job(name, cast(tuple[Source | Sink, ...], ios), executor)
@@ -2,7 +2,7 @@ from dataclasses import dataclass
from .common import Sink
from ..address import Address, AddressDomain
from ..environment import Environment
from ..utils import Artifact, FdContext, FD_THUMBNAIL_HWS
from ..utils import Artifact, FdContext, FD_THUMBNAIL_HWS, check_vart
from ...lowlevel import artio, artrdr
from ...logger import HIGHLEVEL_LOGGER as LOGGER
@@ -31,6 +31,7 @@ class FdArtSink(Sink):
self.__kind,
self.__name,
)
check_vart(art)
for hw, thumbnail in zip(
FD_THUMBNAIL_HWS, artrdr.render_thumbnail(art, FD_THUMBNAIL_HWS)
):
@@ -2,7 +2,7 @@ from dataclasses import dataclass
from .common import Sink
from ..address import Address, AddressDomain
from ..environment import Environment
from ..utils import Artifact, MacCategory
from ..utils import Artifact, MacCategory, check_vart
from ...lowlevel import artrdr
from ...logger import HIGHLEVEL_LOGGER as LOGGER
@@ -31,7 +31,8 @@ class MacArtSink(Sink):
self.__kind,
self.__name,
)
artrdr.render_ico(art, env.mac_output_artifact(self.__kind, self.__name))
check_vart(art)
artrdr.render_icns(art, env.mac_output_artifact(self.__kind, self.__name))
def push_hint(self) -> MacArtSinkHint:
return MacArtSinkHint(self.__kind, self.__name)
@@ -2,7 +2,7 @@ from dataclasses import dataclass
from .common import Sink
from ..address import Address, AddressDomain
from ..environment import Environment
from ..utils import Artifact, WinCategory
from ..utils import Artifact, WinCategory, check_vart
from ...lowlevel import artrdr
from ...logger import HIGHLEVEL_LOGGER as LOGGER
@@ -31,6 +31,7 @@ class WinArtSink(Sink):
self.__kind,
self.__name,
)
check_vart(art)
artrdr.render_ico(art, env.win_output_artifact(self.__kind, self.__name))
def push_hint(self) -> WinArtSinkHint:
@@ -19,7 +19,7 @@ class FdArtSource(Source):
def address(self) -> Address:
return Address(AddressDomain.FdOutput, str(self.__kind), self.__name)
def pull_to_fd(self, env: Environment, fd_sink: FdArtSink) -> None:
def link_to(self, env: Environment, fd_sink: FdArtSink) -> None:
sink_hint = fd_sink.push_hint()
LOGGER.info(
'Duplicating FreeDesktop artifact from kind "%s" name "%s" to kind "%s" name "%s".',
@@ -19,10 +19,10 @@ class MacArtSource(Source):
def address(self) -> Address:
return Address(AddressDomain.MacOutput, str(self.__kind), self.__name)
def pull_to_fd(self, env: Environment, mac_sink: MacArtSink) -> None:
def link_to(self, env: Environment, mac_sink: MacArtSink) -> None:
sink_hint = mac_sink.push_hint()
LOGGER.info(
'Duplicating Macdows-only artifact from kind "%s" name "%s" to kind "%s" name "%s".',
'Duplicating macOS-only artifact from kind "%s" name "%s" to kind "%s" name "%s".',
sink_hint.kind,
sink_hint.name,
self.__kind,
@@ -19,7 +19,7 @@ class WinArtSource(Source):
def address(self) -> Address:
return Address(AddressDomain.WinOutput, str(self.__kind), self.__name)
def pull_to_fd(self, env: Environment, win_sink: WinArtSink) -> None:
def link_to(self, env: Environment, win_sink: WinArtSink) -> None:
sink_hint = win_sink.push_hint()
LOGGER.info(
'Duplicating Windows-only artifact from kind "%s" name "%s" to kind "%s" name "%s".',
@@ -124,8 +124,18 @@ def link_artifact(src: Path, dst: Path) -> None:
f'No common directory between "{src}" and "{dst}", '
f"can not create relative symlink."
)
# SAFETY: the symlink target must always be stored with POSIX
# separators ("/"). On Windows, "relative_to" yields a
# backslash-separated path, and "symlink_to" stores the target string
# verbatim into the NTFS reparse point, so a backslash form would
# also leak verbatim into tar archives. Whether an unpacker accepts
# backslash targets is not guaranteed, and we deliberately do not
# rely on the packer normalizing them. Converting to POSIX form here
# is the single point guaranteeing that archived symlinks stay
# portable, regardless of the platform the build ran on or the
# packer used.
try:
dst.symlink_to(link_target)
dst.symlink_to(link_target.as_posix())
except OSError as e:
LOGGER.warning(
"Fail to create symlink for artifact %s: %s. Falling back to copy.",