mirror of https://github.com/apache/lucene.git
LUCENE-3885: When checking maven artifacts from an RC URL that doesn't name a release branch, instead of failing, find the POM templates in the local working copy the script is run from; also, (temporarily) stop requiring that maven artifacts are identical to their counterparts in the binary distribution
git-svn-id: https://svn.apache.org/repos/asf/lucene/dev/trunk@1302734 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
parent
c800132d39
commit
870c47f4d7
|
@ -457,10 +457,8 @@ def checkMaven(baseURL, tmpDir, version):
|
|||
for text, subURL in branches:
|
||||
if text == releaseBranchText:
|
||||
releaseBranchSvnURL = subURL
|
||||
if releaseBranchSvnURL is None:
|
||||
raise RuntimeError('Release branch %s%s not found' % (branchesURL, releaseBranchText))
|
||||
|
||||
print ' download POM templates',
|
||||
print ' get POM templates',
|
||||
POMtemplates = defaultdict()
|
||||
getPOMtemplates(POMtemplates, tmpDir, releaseBranchSvnURL)
|
||||
print
|
||||
|
@ -495,7 +493,7 @@ def checkMaven(baseURL, tmpDir, version):
|
|||
print ' verify that non-Mavenized deps are same as in the binary distribution...'
|
||||
checkIdenticalNonMavenizedDeps(distributionFiles, nonMavenizedDeps)
|
||||
print ' verify that Maven artifacts are same as in the binary distribution...'
|
||||
checkIdenticalMavenArtifacts(distributionFiles, nonMavenizedDeps, artifacts)
|
||||
checkIdenticalMavenArtifacts(distributionFiles, nonMavenizedDeps, artifacts, version)
|
||||
|
||||
def getDistributionsForMavenChecks(tmpDir, version, baseURL):
|
||||
distributionFiles = defaultdict()
|
||||
|
@ -549,8 +547,8 @@ def checkIdenticalNonMavenizedDeps(distributionFiles, nonMavenizedDeps):
|
|||
raise RuntimeError('Deployed non-mavenized dep %s differs from distribution dep %s'
|
||||
% (dep, distFilenames[depOrigFilename]))
|
||||
|
||||
def checkIdenticalMavenArtifacts(distributionFiles, nonMavenizedDeps, artifacts):
|
||||
reJarWar = re.compile(r'\.[wj]ar$')
|
||||
def checkIdenticalMavenArtifacts(distributionFiles, nonMavenizedDeps, artifacts, version):
|
||||
reJarWar = re.compile(r'%s\.[wj]ar$' % version) # exclude *-javadoc.jar and *-sources.jar
|
||||
for project in ('lucene', 'solr'):
|
||||
distFilenames = dict()
|
||||
for file in distributionFiles[project]:
|
||||
|
@ -562,10 +560,11 @@ def checkIdenticalMavenArtifacts(distributionFiles, nonMavenizedDeps, artifacts)
|
|||
if artifactFilename not in distFilenames.keys():
|
||||
raise RuntimeError('Maven artifact %s is not present in %s binary distribution'
|
||||
% (artifact, project))
|
||||
identical = filecmp.cmp(artifact, distFilenames[artifactFilename], shallow=False)
|
||||
if not identical:
|
||||
raise RuntimeError('Maven artifact %s is not identical to %s in %s binary distribution'
|
||||
% (artifact, distFilenames[artifactFilename], project))
|
||||
# TODO: Either fix the build to ensure that maven artifacts *are* identical, or recursively compare contents
|
||||
# identical = filecmp.cmp(artifact, distFilenames[artifactFilename], shallow=False)
|
||||
# if not identical:
|
||||
# raise RuntimeError('Maven artifact %s is not identical to %s in %s binary distribution'
|
||||
# % (artifact, distFilenames[artifactFilename], project))
|
||||
|
||||
def verifyMavenDigests(artifacts):
|
||||
reJarWarPom = re.compile(r'\.(?:[wj]ar|pom)$')
|
||||
|
@ -643,20 +642,29 @@ def checkNonMavenizedDeps(nonMavenizedDependencies, POMtemplates, artifacts,
|
|||
nonMavenizedDependencies[depJar] = file
|
||||
elif pomFile: # Find non-Mavenized deps with associated POMs
|
||||
pomFile = pomFile.split('/')[-1] # remove path
|
||||
doc2 = None
|
||||
workingCopy = os.path.abspath('%s/../..' % sys.path[0])
|
||||
for pomDir in pomDirs:
|
||||
entries = getDirEntries('%s/%s' % (releaseBranchSvnURL, pomDir))
|
||||
for text, subURL in entries:
|
||||
if text == pomFile:
|
||||
doc2 = ET.XML(load(subURL))
|
||||
groupId2, artifactId2, packaging2, POMversion = getPOMcoordinate(doc2)
|
||||
depJar = '%s/maven/%s/%s/%s/%s-%s.jar' \
|
||||
% (tmpDir, groupId2.replace('.', '/'),
|
||||
artifactId2, version, artifactId2, version)
|
||||
if depJar not in artifacts['lucene'] \
|
||||
and depJar not in artifacts['solr']:
|
||||
raise RuntimeError('Missing non-mavenized dependency %s' % depJar)
|
||||
nonMavenizedDependencies[depJar] = file
|
||||
if releaseBranchSvnURL is None:
|
||||
pomPath = '%s/%s/%s' % (workingCopy, pomDir, pomFile)
|
||||
if os.path.exists(pomPath):
|
||||
doc2 = ET.XML(open(pomPath).read())
|
||||
break
|
||||
else:
|
||||
entries = getDirEntries('%s/%s' % (releaseBranchSvnURL, pomDir))
|
||||
for text, subURL in entries:
|
||||
if text == pomFile:
|
||||
doc2 = ET.XML(load(subURL))
|
||||
break
|
||||
if doc2 is not None: break
|
||||
|
||||
groupId2, artifactId2, packaging2, POMversion = getPOMcoordinate(doc2)
|
||||
depJar = '%s/maven/%s/%s/%s/%s-%s.jar' \
|
||||
% (tmpDir, groupId2.replace('.', '/'),
|
||||
artifactId2, version, artifactId2, version)
|
||||
if depJar not in artifacts['lucene'] and depJar not in artifacts['solr']:
|
||||
raise RuntimeError('Missing non-mavenized dependency %s' % depJar)
|
||||
nonMavenizedDependencies[depJar] = file
|
||||
|
||||
def getPOMcoordinate(treeRoot):
|
||||
namespace = '{http://maven.apache.org/POM/4.0.0}'
|
||||
|
@ -775,21 +783,31 @@ def verifyArtifactPerPOMtemplate(POMtemplates, artifacts, tmpDir, version):
|
|||
raise RuntimeError('Missing artifact %s' % artifact)
|
||||
|
||||
def getPOMtemplates(POMtemplates, tmpDir, releaseBranchSvnURL):
|
||||
releaseBranchSvnURL += 'dev-tools/maven/'
|
||||
targetDir = '%s/dev-tools/maven' % tmpDir
|
||||
if not os.path.exists(targetDir):
|
||||
os.makedirs(targetDir)
|
||||
allPOMtemplates = []
|
||||
crawl(allPOMtemplates, releaseBranchSvnURL, targetDir, set(['Apache Subversion'])) # Ignore "Apache Subversion" links
|
||||
POMtemplates['lucene'] = [p for p in allPOMtemplates if '/lucene/' in p]
|
||||
sourceLocation = releaseBranchSvnURL
|
||||
if sourceLocation is None:
|
||||
# Use the POM templates under dev-tools/maven/ in the local working copy
|
||||
# sys.path[0] is the directory containing this script: dev-tools/scripts/
|
||||
sourceLocation = os.path.abspath('%s/../maven' % sys.path[0])
|
||||
rePOMtemplate = re.compile(r'^pom.xml.template$')
|
||||
for root, dirs, files in os.walk(sourceLocation):
|
||||
allPOMtemplates.extend([os.path.join(root, f) for f in files if rePOMtemplate.search(f)])
|
||||
else:
|
||||
sourceLocation += 'dev-tools/maven/'
|
||||
targetDir = '%s/dev-tools/maven' % tmpDir
|
||||
if not os.path.exists(targetDir):
|
||||
os.makedirs(targetDir)
|
||||
crawl(allPOMtemplates, sourceLocation, targetDir, set(['Apache Subversion'])) # Ignore "Apache Subversion" links
|
||||
|
||||
POMtemplates['lucene'] = [p for p in allPOMtemplates if '/maven/lucene/' in p]
|
||||
if POMtemplates['lucene'] is None:
|
||||
raise RuntimeError('No Lucene POMs found at %s' % releaseBranchSvnURL)
|
||||
POMtemplates['solr'] = [p for p in allPOMtemplates if '/solr/' in p]
|
||||
raise RuntimeError('No Lucene POMs found at %s' % sourceLocation)
|
||||
POMtemplates['solr'] = [p for p in allPOMtemplates if '/maven/solr/' in p]
|
||||
if POMtemplates['solr'] is None:
|
||||
raise RuntimeError('No Solr POMs found at %s' % releaseBranchSvnURL)
|
||||
raise RuntimeError('No Solr POMs found at %s' % sourceLocation)
|
||||
POMtemplates['grandfather'] = [p for p in allPOMtemplates if '/maven/pom.xml.template' in p]
|
||||
if POMtemplates['grandfather'] is None:
|
||||
raise RuntimeError('No Lucene/Solr grandfather POM found at %s' % releaseBranchSvnURL)
|
||||
raise RuntimeError('No Lucene/Solr grandfather POM found at %s' % sourceLocation)
|
||||
|
||||
def crawl(downloadedFiles, urlString, targetDir, exclusions=set()):
|
||||
for text, subURL in getDirEntries(urlString):
|
||||
|
|
Loading…
Reference in New Issue