123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201 |
- #!/usr/bin/python
-
- import sys,os,re
- from sets import Set
-
- ################################################################################
- # Configuration
- ################################################################################
- downloadsite = "http://vaadin.com/download"
- latestfile = "/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."
-
- ################################################################################
- # List files in an archive.
- ################################################################################
- def listZipFiles(archive):
- pin = os.popen("unzip -l -qq %s | cut -c 29- | sort" % (archive), "r")
- files = map(lambda x: x.strip(), pin.readlines())
- pin.close()
-
- cleanedfiles = []
- for file in files:
- # Remove archive file name from the file names
- slashpos = file.find("/")
- if slashpos != -1:
- cleanedname = file[slashpos+1:]
- else:
- cleanedname = file
-
- # Purge GWT compilation files.
- if cleanedname.find(".cache.html") != -1:
- continue
-
- cleanedfiles.append(cleanedname)
-
- return cleanedfiles
-
- ################################################################################
- # 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
-
- ################################################################################
- # Lists files inside a Vaadin Jar inside a ZIP
- ################################################################################
-
- # For Vaadin 6.3 Zip
- def listZipVaadinJarFiles(zipfile, vaadinversion):
- jarfile = "vaadin-%s/WebContent/vaadin-%s.jar" % (vaadinversion, vaadinversion)
- extractedjar = "/tmp/vaadinjar-tmp-%d.jar" % (os.getpid())
- zipcmd = "unzip -p %s %s > %s " % (zipfile, jarfile, extractedjar)
- command (zipcmd)
- files = listJarFiles(extractedjar)
- command ("rm %s" % (extractedjar))
- return files
-
- ################################################################################
- # JAPI - Java API Differences
- ################################################################################
- def japize(version, zipfile):
- jarfile = "/tmp/vaadin-tmp.jar"
- packagedjar = "vaadin-%s/WebContent/vaadin-%s.jar" % (version, version)
- command ("unzip -p %s %s > %s " % (zipfile, packagedjar, 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.zip" % (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 latest version.
- latestfiles = listZipFiles(locallatestpackage)
-
- # List files in built version.
- builtversion = sys.argv[1]
- builtpackage = "build/result/vaadin-%s.zip" % (builtversion)
- builtfiles = listZipFiles(builtpackage)
-
- # Report differences
-
- print "\n--------------------------------------------------------------------------------\nVaadin ZIP differences"
-
- # New files
- newfiles = diffFiles(builtfiles, latestfiles)
- print "\n%d new files:" % (len(newfiles))
- for item in newfiles:
- print item
-
- # Removed files
- removed = diffFiles(latestfiles, builtfiles)
- print "\n%d removed files:" % (len(removed))
- for item in removed:
- print item
-
- print "\n--------------------------------------------------------------------------------\nVaadin JAR differences"
-
- latestJarFiles = listZipVaadinJarFiles(locallatestpackage, latestversion)
- builtJarFiles = listZipVaadinJarFiles(builtpackage, builtversion)
-
- # 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))
|