[Collab-qa-commits] r2266 - udd/udd
Andreas Tille
tille at alioth.debian.org
Sun May 6 13:21:31 UTC 2012
Author: tille
Date: 2012-05-06 13:21:31 +0000 (Sun, 06 May 2012)
New Revision: 2266
Modified:
udd/udd/bibref_gatherer.py
Log:
Try to run pdflatex to process debian.tex and debian.bib to verify the correctness of BibTeX data; Make creation of BibTeX file etc is only done if a latex installation exists to not stress test udd.d.o with uselss database queries
Modified: udd/udd/bibref_gatherer.py
===================================================================
--- udd/udd/bibref_gatherer.py 2012-05-06 10:35:41 UTC (rev 2265)
+++ udd/udd/bibref_gatherer.py 2012-05-06 13:21:31 UTC (rev 2266)
@@ -6,13 +6,15 @@
from gatherer import gatherer
from sys import stderr, exit
-from os import listdir
+from os import listdir, unlink, rename, access, X_OK
+from os.path import isfile
from fnmatch import fnmatch
import yaml
from psycopg2 import IntegrityError, InternalError
import re
import logging
import logging.handlers
+from subprocess import Popen, PIPE
from types import *
@@ -21,6 +23,12 @@
def get_gatherer(connection, config, source):
return bibref_gatherer(connection, config, source)
+def rm_f(file):
+ try:
+ unlink(file)
+ except OSError:
+ pass
+
other_known_keys = ('Archive', 'Contact', 'CRAN', 'Donation', 'Download', 'Help', 'Homepage', 'Name', 'Watch', 'Webservice')
class bibref_gatherer(gatherer):
@@ -260,14 +268,20 @@
cur.execute("DEALLOCATE bibref_insert")
cur.execute("ANALYZE %s" % my_config['table'])
- bf = open(self.bibtexfile, 'w')
- cur.execute("SELECT * FROM bibtex()")
- for row in cur.fetchall():
+ # if there is a working LaTeX installation try to build a BibTeX database and test it by creating a debian.pdf file
+ if isfile('/usr/bin/pdflatex') and access('/usr/bin/pdflatex', X_OK) and \
+ isfile('/usr/bin/bibtex') and access('/usr/bin/bibtex', X_OK) and \
+ isfile('/usr/share/texlive/texmf-dist/fonts/source/jknappen/ec/ecrm.mf'):
+ # create BibTeX file
+ bf = open(self.bibtexfile, 'w')
+ cur.execute("SELECT * FROM bibtex()")
+ for row in cur.fetchall():
print >>bf, row[0]
- bf.close()
+ bf.close()
- bf = open(self.bibtex_example_tex, 'w')
- print >>bf, """\documentclass{article}
+ # create LaTeX file to test BibTeX functionality
+ bf = open(self.bibtex_example_tex, 'w')
+ print >>bf, """\documentclass{article}
\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc}
\usepackage[left=2mm,top=2mm,right=2mm,bottom=2mm,nohead,nofoot]{geometry}
@@ -277,19 +291,49 @@
\\begin{longtable}{llp{70mm}l}
\\bf package & \\bf source & \\bf description & BibTeX key \\\\ \hline"""
- cur.execute("SELECT * FROM bibtex_example_data() AS (package text, source text, bibkey text, description text)")
- for row in cur.fetchall():
+ cur.execute("SELECT * FROM bibtex_example_data() AS (package text, source text, bibkey text, description text)")
+ for row in cur.fetchall():
print >>bf, row[0], '&', row[1], '&', row[3] , '&', row[2]+'\cite{'+row[2]+'} \\\\'
- print >>bf, """\end{longtable}
+ print >>bf, """\end{longtable}
\\bibliographystyle{plain}
\\bibliography{debian}
\end{document}
"""
- bf.close()
+ bf.close()
+ # try to build debian.pdf file to test aboc LaTeX file
+ basetexfile = self.bibtex_example_tex.replace('.tex','')
+ rm_f(basetexfile+'.aux')
+ rm_f(basetexfile+'.bbl')
+ rm_f(basetexfile+'.blg')
+ rm_f(basetexfile+'.log')
+ try:
+ rename(basetexfile+'.pdf', basetexfile+'.pdf~')
+ except OSError:
+ pass
+ pdftex1 = Popen(['pdflatex', '-interaction=nonstopmode', basetexfile], shell=False, stdout=PIPE)
+ if pdftex1.wait():
+ self.log.error("Problem in 1. PdfLaTeX run of %s" % (basetexfile))
+ bibtex = Popen(['bibtex', basetexfile], shell=False, stdout=PIPE)
+ if bibtex.wait():
+ self.log.error("Problem in BibTeX run of %s" % (basetexfile))
+ pdftex2 = Popen(['pdflatex', '-interaction=nonstopmode', basetexfile], shell=False, stdout=PIPE)
+ if pdftex2.wait():
+ self.log.error("Problem in 2. PdfLaTeX run of %s" % (basetexfile))
+ for logrow in pdftex2.communicate()[0].splitlines():
+ if logrow.startswith('!'):
+ print logrow
+ exit(1)
+ print "DEBUG: 3. LaTeX-Lauf"
+ pdftex_process = Popen(['pdflatex', '-interaction=nonstopmode', basetexfile], shell=False, stdout=PIPE)
+ rm_f(basetexfile+'.aux')
+ rm_f(basetexfile+'.bbl')
+ rm_f(basetexfile+'.blg')
+ rm_f(basetexfile+'.log')
+
if __name__ == '__main__':
main()
More information about the Collab-qa-commits
mailing list