Ejemplo n.º 1
0
	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
Ejemplo n.º 2
0
    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
Ejemplo n.º 3
0
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()
Ejemplo n.º 4
0
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()