mirror of https://github.com/apache/lucene.git
LUCENE-3887: fix smoke tester to fail when package.html is missing or public classes don't have description in package-summary
git-svn-id: https://svn.apache.org/repos/asf/lucene/dev/trunk@1303830 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
parent
86c2da0eac
commit
aa8cfa0d12
|
@ -0,0 +1,106 @@
|
||||||
|
# Licensed to the Apache Software Foundation (ASF) under one or more
|
||||||
|
# contributor license agreements. See the NOTICE file distributed with
|
||||||
|
# this work for additional information regarding copyright ownership.
|
||||||
|
# The ASF licenses this file to You under the Apache License, Version 2.0
|
||||||
|
# (the "License"); you may not use this file except in compliance with
|
||||||
|
# the License. You may obtain a copy of the License at
|
||||||
|
#
|
||||||
|
# http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
#
|
||||||
|
# Unless required by applicable law or agreed to in writing, software
|
||||||
|
# distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
# See the License for the specific language governing permissions and
|
||||||
|
# limitations under the License.
|
||||||
|
|
||||||
|
import sys
|
||||||
|
import os
|
||||||
|
import re
|
||||||
|
|
||||||
|
reHREF = re.compile('<a.*?>(.*?)</a>', re.IGNORECASE)
|
||||||
|
|
||||||
|
reMarkup = re.compile('<.*?>')
|
||||||
|
|
||||||
|
def checkSummary(fullPath):
|
||||||
|
printed = False
|
||||||
|
f = open(fullPath)
|
||||||
|
lastLine = None
|
||||||
|
anyMissing = False
|
||||||
|
sawPackage = False
|
||||||
|
desc = []
|
||||||
|
for line in f.readlines():
|
||||||
|
lineLower = line.strip().lower()
|
||||||
|
if desc is not None:
|
||||||
|
# TODO: also detect missing description in overview-summary
|
||||||
|
if lineLower.startswith('package ') or lineLower.startswith('<h1 title="package" '):
|
||||||
|
sawPackage = True
|
||||||
|
elif sawPackage:
|
||||||
|
if lineLower.startswith('<table ') or lineLower.startswith('<b>see: '):
|
||||||
|
desc = ' '.join(desc)
|
||||||
|
desc = reMarkup.sub(' ', desc)
|
||||||
|
desc = desc.strip()
|
||||||
|
if desc == '':
|
||||||
|
if not printed:
|
||||||
|
print
|
||||||
|
print fullPath
|
||||||
|
printed = True
|
||||||
|
print ' no package description (missing package.html in src?)'
|
||||||
|
anyMissing = True
|
||||||
|
desc = None
|
||||||
|
else:
|
||||||
|
desc.append(lineLower)
|
||||||
|
|
||||||
|
if lineLower in ('<td> </td>', '<td></td>', '<td class="collast"> </td>'):
|
||||||
|
m = reHREF.search(lastLine)
|
||||||
|
if not printed:
|
||||||
|
print
|
||||||
|
print fullPath
|
||||||
|
printed = True
|
||||||
|
print ' missing: %s' % unescapeHTML(m.group(1))
|
||||||
|
anyMissing = True
|
||||||
|
lastLine = line
|
||||||
|
if desc is not None and fullPath.find('/overview-summary.html') == -1:
|
||||||
|
raise RuntimeError('BUG: failed to locate description in %s' % fullPath)
|
||||||
|
f.close()
|
||||||
|
return anyMissing
|
||||||
|
|
||||||
|
def unescapeHTML(s):
|
||||||
|
s = s.replace('<', '<')
|
||||||
|
s = s.replace('>', '>')
|
||||||
|
s = s.replace('&', '&')
|
||||||
|
return s
|
||||||
|
|
||||||
|
def checkPackageSummaries(root):
|
||||||
|
"""
|
||||||
|
Just checks for blank summary lines in package-summary.html; returns
|
||||||
|
True if there are problems.
|
||||||
|
"""
|
||||||
|
|
||||||
|
#for dirPath, dirNames, fileNames in os.walk('%s/lucene/build/docs/api' % root):
|
||||||
|
|
||||||
|
if False:
|
||||||
|
os.chdir(root)
|
||||||
|
print
|
||||||
|
print 'Run "ant javadocs" > javadocs.log...'
|
||||||
|
if os.system('ant javadocs > javadocs.log 2>&1'):
|
||||||
|
print ' FAILED'
|
||||||
|
sys.exit(1)
|
||||||
|
|
||||||
|
anyMissing = False
|
||||||
|
for dirPath, dirNames, fileNames in os.walk(root):
|
||||||
|
|
||||||
|
if dirPath.find('/all/') != -1:
|
||||||
|
# These are dups (this is a bit risk, eg, root IS this /all/ directory..)
|
||||||
|
continue
|
||||||
|
|
||||||
|
if 'package-summary.html' in fileNames:
|
||||||
|
if checkSummary('%s/package-summary.html' % dirPath):
|
||||||
|
anyMissing = True
|
||||||
|
if 'overview-summary.html' in fileNames:
|
||||||
|
if checkSummary('%s/overview-summary.html' % dirPath):
|
||||||
|
anyMissing = True
|
||||||
|
|
||||||
|
return anyMissing
|
||||||
|
|
||||||
|
if __name__ == '__main__':
|
||||||
|
checkPackageSummaries(sys.argv[1])
|
|
@ -26,6 +26,7 @@ from collections import defaultdict
|
||||||
import xml.etree.ElementTree as ET
|
import xml.etree.ElementTree as ET
|
||||||
import filecmp
|
import filecmp
|
||||||
import platform
|
import platform
|
||||||
|
import checkJavaDocs
|
||||||
|
|
||||||
# This tool expects to find /lucene and /solr off the base URL. You
|
# This tool expects to find /lucene and /solr off the base URL. You
|
||||||
# must have a working gpg, tar, unzip in your path. This has been
|
# must have a working gpg, tar, unzip in your path. This has been
|
||||||
|
@ -243,7 +244,7 @@ def testChangesText(dir, version, project):
|
||||||
# NOTE: O(N) but N should be smallish:
|
# NOTE: O(N) but N should be smallish:
|
||||||
if 'CHANGES.txt' in files:
|
if 'CHANGES.txt' in files:
|
||||||
fullPath = '%s/CHANGES.txt' % root
|
fullPath = '%s/CHANGES.txt' % root
|
||||||
print 'CHECK %s' % fullPath
|
#print 'CHECK %s' % fullPath
|
||||||
checkChangesContent(open(fullPath).read(), version, fullPath, project, False)
|
checkChangesContent(open(fullPath).read(), version, fullPath, project, False)
|
||||||
|
|
||||||
def checkChangesContent(s, version, name, project, isHTML):
|
def checkChangesContent(s, version, name, project, isHTML):
|
||||||
|
@ -383,6 +384,9 @@ def verifyUnpacked(project, artifact, unpackPath, version):
|
||||||
# test javadocs
|
# test javadocs
|
||||||
print ' generate javadocs w/ Java 5...'
|
print ' generate javadocs w/ Java 5...'
|
||||||
run('export JAVA_HOME=%s; ant javadocs' % JAVA5_HOME, '%s/javadocs.log' % unpackPath)
|
run('export JAVA_HOME=%s; ant javadocs' % JAVA5_HOME, '%s/javadocs.log' % unpackPath)
|
||||||
|
if checkJavaDocs.checkPackageSummaries('build/docs/api'):
|
||||||
|
raise RuntimeError('javadoc summaries failed')
|
||||||
|
|
||||||
else:
|
else:
|
||||||
print ' run tests w/ Java 6...'
|
print ' run tests w/ Java 6...'
|
||||||
run('export JAVA_HOME=%s; ant test' % JAVA6_HOME, '%s/test.log' % unpackPath)
|
run('export JAVA_HOME=%s; ant test' % JAVA6_HOME, '%s/test.log' % unpackPath)
|
||||||
|
@ -421,6 +425,21 @@ def verifyUnpacked(project, artifact, unpackPath, version):
|
||||||
|
|
||||||
testChangesText('.', version, project)
|
testChangesText('.', version, project)
|
||||||
|
|
||||||
|
if project == 'lucene' and not isSrc:
|
||||||
|
print ' check Lucene\'s javadoc JAR'
|
||||||
|
unpackJavadocsJar('%s/lucene-core-%s-javadoc.jar' % (unpackPath, version), unpackPath)
|
||||||
|
|
||||||
|
def unpackJavadocsJar(jarPath, unpackPath):
|
||||||
|
destDir = '%s/javadocs' % unpackPath
|
||||||
|
if os.path.exists(destDir):
|
||||||
|
shutil.rmtree(destDir)
|
||||||
|
os.makedirs(destDir)
|
||||||
|
os.chdir(destDir)
|
||||||
|
run('unzip %s' % jarPath, '%s/unzip.log' % destDir)
|
||||||
|
if checkJavaDocs.checkPackageSummaries('.'):
|
||||||
|
raise RuntimeError('javadoc problems')
|
||||||
|
os.chdir(unpackPath)
|
||||||
|
|
||||||
def testDemo(isSrc, version):
|
def testDemo(isSrc, version):
|
||||||
print ' test demo...'
|
print ' test demo...'
|
||||||
sep = ';' if platform.system().lower().startswith('cygwin') else ':'
|
sep = ';' if platform.system().lower().startswith('cygwin') else ':'
|
||||||
|
|
Loading…
Reference in New Issue