vaadin-framework/build/bin/package-diff.py
Artur Signell 8c740b94ba Removed svn:executable property to avoid problems with Git on Windows
svn changeset:21944/svn branch:6.7
2011-11-08 14:29:40 +00:00

141 lines
4.6 KiB
Python

#!/usr/bin/python
import sys,os,re
from sets import Set
################################################################################
# Configuration
################################################################################
downloadsite = "http://vaadin.com/download"
latestfile = "/release/6.7/LATEST"
JAPIZE = "japize"
JAPICOMPAT = "japicompat"
################################################################################
# Utility Functions
################################################################################
def command(cmd, dryrun=0):
if not dryrun:
if os.system(cmd):
print "Command '%s' failed, exiting." % (cmd)
sys.exit(1)
else:
print "Dry run - not executing."
################################################################################
# Difference of two lists of files
################################################################################
def diffFiles(a, b):
diff = Set(a).difference(Set(b))
difffiles = []
for item in diff:
difffiles.append(item)
difffiles.sort()
return difffiles
################################################################################
# Lists files inside a Zip file (a JAR)
################################################################################
def listJarFiles(jarfile):
# Read the jar content listing
pin = os.popen("unzip -ql %s" % jarfile, "r")
lines = map(lambda x: x[:-1], pin.readlines())
pin.close()
# Determine the position of file names
namepos = lines[0].find("Name")
files = []
for i in xrange(2, len(lines)-2):
filename = lines[i][namepos:]
files.append(filename)
return files
################################################################################
# JAPI - Java API Differences
################################################################################
def japize(version, jarfile):
cmd = "%s as %s apis %s +com.vaadin, $JAVA_HOME/jre/lib/rt.jar lib/core/**/*.jar 2>/dev/null" % (JAPIZE, version, jarfile)
command (cmd)
return "%s.japi.gz" % (version)
def japicompat(japi1, japi2):
cmd = "%s -q %s %s" % (JAPICOMPAT, japi1, japi2)
pin = os.popen(cmd, "r")
lines = "".join(pin.readlines())
pin.close()
return lines
################################################################################
#
################################################################################
# Download the installation package of the latest version
wgetcmd = "wget -q -O - %s" % (downloadsite+latestfile)
pin = os.popen(wgetcmd, "r")
latestdata = pin.readlines()
pin.close()
latestversion = latestdata[0].strip()
latestpath = latestdata[1].strip()
latestURL = downloadsite + "/" + latestpath + "/"
latestfilename = "vaadin-%s.jar" % (latestversion)
latestpackage = latestURL + latestfilename
locallatestpackage = "/tmp/%s" % (latestfilename)
print "Latest version: %s" % (latestversion)
print "Latest version path: %s" % (latestpath)
print "Latest version URL: %s" % (latestURL)
# Check if it already exists
try:
os.stat(locallatestpackage)
print "Latest package already exists in %s" % (locallatestpackage)
# File exists
except OSError:
# File does not exist, get it.
print "Downloading latest release package %s to %s" % (latestpackage, locallatestpackage)
wgetcmd = "wget -q -O %s %s" % (locallatestpackage, latestpackage)
command (wgetcmd)
# List files in built version.
builtversion = sys.argv[1]
builtpackage = "build/result/vaadin-%s/WebContent/WEB-INF/lib/vaadin-%s.jar" % (builtversion, builtversion)
# Report differences
print "\n--------------------------------------------------------------------------------\nVaadin JAR differences"
latestJarFiles = listJarFiles(locallatestpackage)
builtJarFiles = listJarFiles(builtpackage)
# New files
newfiles = diffFiles(builtJarFiles, latestJarFiles)
print "\n%d new files:" % (len(newfiles))
for item in newfiles:
print item
# Removed files
removed = diffFiles(latestJarFiles, builtJarFiles)
print "\n%d removed files:" % (len(removed))
for item in removed:
print item
print "\n--------------------------------------------------------------------------------\nVaadin API differences"
oldjapi = japize(latestversion, locallatestpackage)
newjapi = japize(builtversion, builtpackage)
print "\n--------------------------------------------------------------------------------\nLost API features\n"
japidiff1 = japicompat(oldjapi, newjapi)
print japidiff1
print "\n--------------------------------------------------------------------------------\nNew API features\n"
japidiff2 = japicompat(newjapi, oldjapi)
print japidiff2
# Purge downloaded package
command("rm %s" % (locallatestpackage))