[otBase] demote repacker ERROR to WARNING, only 1 per loop; don't exit at firstfail
Fixes https://github.com/fonttools/fonttools/issues/2594
This commit is contained in:
parent
f68ce14d7a
commit
350f893e17
@ -96,6 +96,7 @@ class BaseTTXConverter(DefaultTable):
|
|||||||
self.tableTag,
|
self.tableTag,
|
||||||
)
|
)
|
||||||
|
|
||||||
|
hb_first_error_logged = False
|
||||||
while True:
|
while True:
|
||||||
try:
|
try:
|
||||||
writer = OTTableWriter(tableTag=self.tableTag)
|
writer = OTTableWriter(tableTag=self.tableTag)
|
||||||
@ -109,19 +110,22 @@ class BaseTTXConverter(DefaultTable):
|
|||||||
log.debug("serializing '%s' with hb.repack", self.tableTag)
|
log.debug("serializing '%s' with hb.repack", self.tableTag)
|
||||||
return writer.getAllDataUsingHarfbuzz()
|
return writer.getAllDataUsingHarfbuzz()
|
||||||
except (ValueError, MemoryError, hb.RepackerError) as e:
|
except (ValueError, MemoryError, hb.RepackerError) as e:
|
||||||
if use_hb_repack is None:
|
# Only log hb repacker errors the first time they occur in
|
||||||
|
# the offset-overflow resolution loop, they are just noisy.
|
||||||
|
# Maybe we can revisit this if/when uharfbuzz actually gives
|
||||||
|
# us more info as to why hb.repack failed...
|
||||||
|
if not hb_first_error_logged:
|
||||||
error_msg = f"{type(e).__name__}"
|
error_msg = f"{type(e).__name__}"
|
||||||
if str(e) != "":
|
if str(e) != "":
|
||||||
error_msg += f": {e}"
|
error_msg += f": {e}"
|
||||||
log.error(
|
log.warning(
|
||||||
"hb.repack failed to serialize '%s', reverting to "
|
"hb.repack failed to serialize '%s', reverting to "
|
||||||
"pure-python serializer; the error message was: %s",
|
"pure-python serializer; the error message was: %s",
|
||||||
self.tableTag,
|
self.tableTag,
|
||||||
error_msg,
|
error_msg,
|
||||||
)
|
)
|
||||||
return writer.getAllData(remove_duplicate=False)
|
hb_first_error_logged = True
|
||||||
# let the error propagate if USE_HARFBUZZ_REPACKER is True
|
return writer.getAllData(remove_duplicate=False)
|
||||||
raise
|
|
||||||
return writer.getAllData()
|
return writer.getAllData()
|
||||||
|
|
||||||
except OTLOffsetOverflowError as e:
|
except OTLOffsetOverflowError as e:
|
||||||
|
@ -847,18 +847,11 @@ class SubsetTest:
|
|||||||
args.append("--no-harfbuzz-repacker")
|
args.append("--no-harfbuzz-repacker")
|
||||||
# elif enabled is None: ... is the default
|
# elif enabled is None: ... is the default
|
||||||
|
|
||||||
if enabled is True:
|
if enabled is True and not installed:
|
||||||
if not installed:
|
# raise if enabled but not installed
|
||||||
# raise if enabled but not installed
|
with pytest.raises(ImportError, match="uharfbuzz"):
|
||||||
with pytest.raises(ImportError, match="uharfbuzz"):
|
subset.main(args)
|
||||||
subset.main(args)
|
return
|
||||||
return
|
|
||||||
|
|
||||||
elif not ok:
|
|
||||||
# raise if enabled but fails
|
|
||||||
with pytest.raises(hb.RepackerError, match="mocking"):
|
|
||||||
subset.main(args)
|
|
||||||
return
|
|
||||||
|
|
||||||
with caplog.at_level(logging.DEBUG, "fontTools.ttLib.tables.otBase"):
|
with caplog.at_level(logging.DEBUG, "fontTools.ttLib.tables.otBase"):
|
||||||
subset.main(args)
|
subset.main(args)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user