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
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
|
#!/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 listfiles(archive):
pin = os.popen("tar ztf %s | 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
# For Zip archives in Vaadin 6.3.0
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 Tar
################################################################################
# For Vaadin 6.2 Tar
def listTarVaadinJarFiles(tarfile, vaadinversion):
jarfile = "vaadin-linux-%s/WebContent/vaadin-%s.jar" % (vaadinversion, vaadinversion)
extractedjar = "/tmp/vaadinjar-tmp-%d.jar" % (os.getpid())
tarcmd = "tar zOxf %s %s > %s " % (tarfile, jarfile, extractedjar)
command (tarcmd)
files = listJarFiles(extractedjar)
command ("rm %s" % (extractedjar))
return files
# 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())
tarcmd = "unzip -p %s %s > %s " % (zipfile, jarfile, extractedjar)
command (tarcmd)
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 + "/"
# TODO: Remove "linux" after 6.3.0 is released.
linuxfilename = "vaadin-linux-%s.tar.gz" % (latestversion)
linuxpackage = latestURL + linuxfilename
locallinuxpackage = "/tmp/%s" % (linuxfilename)
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(locallinuxpackage)
print "Latest package already exists in %s" % (locallinuxpackage)
# File exists
except OSError:
# File does not exist, get it.
print "Downloading Linux package %s to %s" % (linuxpackage, locallinuxpackage)
wgetcmd = "wget -q -O %s %s" % (locallinuxpackage, linuxpackage)
command (wgetcmd)
# List files in latest version.
latestfiles = listfiles(locallinuxpackage)
# List files in built version.
builtversion = sys.argv[1]
builtpackage = "build/result/vaadin-%s.zip" % (builtversion)
builtfiles = listZipFiles(builtpackage)
# Report differences
print "\n--------------------------------------------------------------------------------\nVaadin TAR 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 = listTarVaadinJarFiles(locallinuxpackage, 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" % (locallinuxpackage))
|