def buildPDF(self, bookPath, inputDirectory, outputPath): """ Build a PDF from the given a LaTeX book document. @type bookPath: L{FilePath} @param bookPath: The location of a LaTeX document defining a book. @type inputDirectory: L{FilePath} @param inputDirectory: The directory which the inputs of the book are relative to. @type outputPath: L{FilePath} @param outputPath: The location to which to write the resulting book. """ if not bookPath.basename().endswith(".tex"): raise ValueError("Book filename must end with .tex") workPath = FilePath(mkdtemp()) try: startDir = os.getcwd() try: os.chdir(inputDirectory.path) texToDVI = [ "latex", "-interaction=nonstopmode", "-output-directory=" + workPath.path, bookPath.path ] # What I tell you three times is true! # The first two invocations of latex on the book file allows it # correctly create page numbers for in-text references. Why this is # the case, I could not tell you. -exarkun for i in range(3): self.run(texToDVI) bookBaseWithoutExtension = bookPath.basename()[:-4] dviPath = workPath.child(bookBaseWithoutExtension + ".dvi") psPath = workPath.child(bookBaseWithoutExtension + ".ps") pdfPath = workPath.child(bookBaseWithoutExtension + ".pdf") self.run([ "dvips", "-o", psPath.path, "-t", "letter", "-Ppdf", dviPath.path ]) self.run(["ps2pdf13", psPath.path, pdfPath.path]) pdfPath.moveTo(outputPath) workPath.remove() finally: os.chdir(startDir) except: workPath.moveTo(bookPath.parent().child(workPath.basename())) raise
def buildPDF(self, bookPath, inputDirectory, outputPath): """ Build a PDF from the given a LaTeX book document. @type bookPath: L{FilePath} @param bookPath: The location of a LaTeX document defining a book. @type inputDirectory: L{FilePath} @param inputDirectory: The directory which the inputs of the book are relative to. @type outputPath: L{FilePath} @param outputPath: The location to which to write the resulting book. """ if not bookPath.basename().endswith(".tex"): raise ValueError("Book filename must end with .tex") workPath = FilePath(mkdtemp()) try: startDir = os.getcwd() try: os.chdir(inputDirectory.path) texToDVI = [ "latex", "-interaction=nonstopmode", "-output-directory=" + workPath.path, bookPath.path] # What I tell you three times is true! # The first two invocations of latex on the book file allows it # correctly create page numbers for in-text references. Why this is # the case, I could not tell you. -exarkun for i in range(3): self.run(texToDVI) bookBaseWithoutExtension = bookPath.basename()[:-4] dviPath = workPath.child(bookBaseWithoutExtension + ".dvi") psPath = workPath.child(bookBaseWithoutExtension + ".ps") pdfPath = workPath.child(bookBaseWithoutExtension + ".pdf") self.run([ "dvips", "-o", psPath.path, "-t", "letter", "-Ppdf", dviPath.path]) self.run(["ps2pdf13", psPath.path, pdfPath.path]) pdfPath.moveTo(outputPath) workPath.remove() finally: os.chdir(startDir) except: workPath.moveTo(bookPath.parent().child(workPath.basename())) raise
def buildAllTarballs(checkout, destination): """ Build complete tarballs (including documentation) for Twisted and all subprojects. This should be called after the version numbers have been updated and NEWS files created. @type checkout: L{FilePath} @param checkout: The SVN working copy from which a pristine source tree will be exported. @type destination: L{FilePath} @param destination: The directory in which tarballs will be placed. @raise UncleanWorkingDirectory: if there are modifications to the working directory of C{checkout}. @raise NotWorkingDirectory: if the checkout path is not an SVN checkout. """ if not checkout.child(".svn").exists(): raise NotWorkingDirectory( "%s does not appear to be an SVN working directory." % (checkout.path, )) if runCommand(["svn", "st", checkout.path]).strip(): raise UncleanWorkingDirectory( "There are local modifications to the SVN checkout in %s." % (checkout.path, )) workPath = FilePath(mkdtemp()) export = workPath.child("export") runCommand(["svn", "export", checkout.path, export.path]) twistedPath = export.child("twisted") version = Project(twistedPath).getVersion() versionString = version.base() apiBaseURL = "http://twistedmatrix.com/documents/%s/api/%%s.html" % ( versionString) if not destination.exists(): destination.createDirectory() db = DistributionBuilder(export, destination, apiBaseURL=apiBaseURL) db.buildCore(versionString) for subproject in twisted_subprojects: if (subproject not in db.blacklist and twistedPath.child(subproject).exists()): db.buildSubProject(subproject, versionString) db.buildTwisted(versionString) workPath.remove()
def buildAllTarballs(checkout, destination): """ Build complete tarballs (including documentation) for Twisted and all subprojects. This should be called after the version numbers have been updated and NEWS files created. @type checkout: L{FilePath} @param checkout: The SVN working copy from which a pristine source tree will be exported. @type destination: L{FilePath} @param destination: The directory in which tarballs will be placed. @raise UncleanWorkingDirectory: if there are modifications to the working directory of C{checkout}. @raise NotWorkingDirectory: if the checkout path is not an SVN checkout. """ if not checkout.child(".svn").exists(): raise NotWorkingDirectory( "%s does not appear to be an SVN working directory." % (checkout.path,)) if runCommand(["svn", "st", checkout.path]).strip(): raise UncleanWorkingDirectory( "There are local modifications to the SVN checkout in %s." % (checkout.path,)) workPath = FilePath(mkdtemp()) export = workPath.child("export") runCommand(["svn", "export", checkout.path, export.path]) twistedPath = export.child("twisted") version = Project(twistedPath).getVersion() versionString = version.base() apiBaseURL = "http://twistedmatrix.com/documents/%s/api/%%s.html" % ( versionString) if not destination.exists(): destination.createDirectory() db = DistributionBuilder(export, destination, apiBaseURL=apiBaseURL) db.buildCore(versionString) for subproject in twisted_subprojects: if (subproject not in db.blacklist and twistedPath.child(subproject).exists()): db.buildSubProject(subproject, versionString) db.buildTwisted(versionString) workPath.remove()