From 9d1f0660852801dc5828f8b426237cf62a508683 Mon Sep 17 00:00:00 2001 From: "Martin A. Brown" Date: Fri, 26 Feb 2016 11:22:00 -0800 Subject: [PATCH] better PDF generation logic; add cleanup() try to make the PDF first with jw, but don't quit if that fails fall back to PDF generation with dblatex and tell the user cleanup any generated index.sgml (if we made it) --- tldp/doctypes/docbooksgml.py | 31 ++++++++++++++++++++++++++++++- 1 file changed, 30 insertions(+), 1 deletion(-) diff --git a/tldp/doctypes/docbooksgml.py b/tldp/doctypes/docbooksgml.py index 5c49134..0718935 100644 --- a/tldp/doctypes/docbooksgml.py +++ b/tldp/doctypes/docbooksgml.py @@ -4,6 +4,7 @@ from __future__ import absolute_import, division, print_function import os +import errno import logging import networkx as nx @@ -52,6 +53,26 @@ class DocbookSGML(BaseDoctype, SignatureChecker): buildorder = ['buildall'] + def cleanup(self): + stem = self.source.stem + removals = getattr(self, 'removals', None) + if removals: + for fn in removals: + logger.debug("%s cleaning up file %s", stem, fn) + try: + os.unlink(fn) + except OSError as e: + if e.errno is errno.ENOENT: + logger.error("%s missing file at cleanup %s", stem, fn) + else: + raise e + + def hook_build_success(self): + self.cleanup() + + def hook_build_failure(self): + self.cleanup() + def chdir_output(self): os.chdir(self.output.dirname) return True @@ -97,8 +118,8 @@ class DocbookSGML(BaseDoctype, SignatureChecker): -- "index.sgml" "{source.dirname}/index.sgml"''' moved = self.shellscript(s) if moved: - self.removals = indexsgml logger.debug("%s created %s", self.source.stem, indexsgml) + self.removals = [indexsgml] return True return os.path.exists(indexsgml) @@ -162,8 +183,16 @@ class DocbookSGML(BaseDoctype, SignatureChecker): @depends(graph, cleaned_indexsgml) def make_name_pdf(self): + stem = self.source.stem + classname = self.__class__.__name__ + logger.info("%s calling method %s.%s", + stem, classname, 'make_pdf_with_jw') if self.make_pdf_with_jw(): return True + logger.error("%s jw failed creating PDF, falling back to dblatex...", + stem) + logger.info("%s calling method %s.%s", + stem, classname, 'make_pdf_with_dblatex') return self.make_pdf_with_dblatex() @depends(graph, make_name_htmls)