mute exception on zip abort

This commit is contained in:
ed 2022-07-25 01:20:38 +02:00
parent 10430b347f
commit 2fb1e6dab8
2 changed files with 46 additions and 41 deletions

View file

@ -65,17 +65,19 @@ class StreamTar(StreamArc):
w.start() w.start()
def gen(self) -> Generator[Optional[bytes], None, None]: def gen(self) -> Generator[Optional[bytes], None, None]:
while True: try:
buf = self.qfile.q.get() while True:
if not buf: buf = self.qfile.q.get()
break if not buf:
break
self.co += len(buf) self.co += len(buf)
yield buf yield buf
yield None yield None
if self.errf: finally:
bos.unlink(self.errf["ap"]) if self.errf:
bos.unlink(self.errf["ap"])
def ser(self, f: dict[str, Any]) -> None: def ser(self, f: dict[str, Any]) -> None:
name = f["vp"] name = f["vp"]

View file

@ -272,41 +272,44 @@ class StreamZip(StreamArc):
def gen(self) -> Generator[bytes, None, None]: def gen(self) -> Generator[bytes, None, None]:
errors = [] errors = []
for f in self.fgen: try:
if "err" in f: for f in self.fgen:
errors.append((f["vp"], f["err"])) if "err" in f:
continue errors.append((f["vp"], f["err"]))
continue
try: try:
for x in self.ser(f): for x in self.ser(f):
yield x
except GeneratorExit:
raise
except:
ex = min_ex(5, True).replace("\n", "\n-- ")
errors.append((f["vp"], ex))
if errors:
errf, txt = errdesc(errors)
self.log("\n".join(([repr(errf)] + txt[1:])))
for x in self.ser(errf):
yield x yield x
except:
ex = min_ex(5, True).replace("\n", "\n-- ")
errors.append((f["vp"], ex))
if errors: cdir_pos = self.pos
errf, txt = errdesc(errors) for name, sz, ts, crc, h_pos in self.items:
self.log("\n".join(([repr(errf)] + txt[1:]))) buf = gen_hdr(h_pos, name, sz, ts, self.utf8, crc, self.pre_crc)
for x in self.ser(errf): yield self._ct(buf)
yield x cdir_end = self.pos
cdir_pos = self.pos _, need_64 = gen_ecdr(self.items, cdir_pos, cdir_end)
for name, sz, ts, crc, h_pos in self.items: if need_64:
buf = gen_hdr(h_pos, name, sz, ts, self.utf8, crc, self.pre_crc) ecdir64_pos = self.pos
yield self._ct(buf) buf = gen_ecdr64(self.items, cdir_pos, cdir_end)
cdir_end = self.pos yield self._ct(buf)
_, need_64 = gen_ecdr(self.items, cdir_pos, cdir_end) buf = gen_ecdr64_loc(ecdir64_pos)
if need_64: yield self._ct(buf)
ecdir64_pos = self.pos
buf = gen_ecdr64(self.items, cdir_pos, cdir_end)
yield self._ct(buf)
buf = gen_ecdr64_loc(ecdir64_pos) ecdr, _ = gen_ecdr(self.items, cdir_pos, cdir_end)
yield self._ct(buf) yield self._ct(ecdr)
finally:
ecdr, _ = gen_ecdr(self.items, cdir_pos, cdir_end) if errors:
yield self._ct(ecdr) bos.unlink(errf["ap"])
if errors:
bos.unlink(errf["ap"])