1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
|
#!/usr/bin/python
import sys,os,re
from sets import Set
################################################################################
# Configuration
################################################################################
downloadsite = "http://vaadin.com/download"
latestfile = "/LATEST"
################################################################################
# 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
################################################################################
#
################################################################################
# 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
# Purge downloaded package
command("rm %s" % (locallatestpackage))
|