| 1 |
#!/usr/bin/ruby1.8 -w
|
| 2 |
|
| 3 |
require 'optparse'
|
| 4 |
require 'fileutils'
|
| 5 |
require 'pathname'
|
| 6 |
|
| 7 |
$package = nil
|
| 8 |
$chroot = nil
|
| 9 |
$uchroot = nil
|
| 10 |
$logfile = nil
|
| 11 |
$chroots = []
|
| 12 |
$tests_failed = []
|
| 13 |
$tests_ok = []
|
| 14 |
|
| 15 |
def create_chroot(chroot = $chroot)
|
| 16 |
chr = `schroot -c #{chroot} -b 2>&1`.chomp
|
| 17 |
if $?.exitstatus != 0
|
| 18 |
puts "chroot creation FAILED!\n#{chr}"
|
| 19 |
$tests_failed << 'create-chroot'
|
| 20 |
exit(0)
|
| 21 |
else
|
| 22 |
$chroots << chr
|
| 23 |
return chr
|
| 24 |
end
|
| 25 |
system("schroot -c #{chr} -r -- cp /proc/mounts /etc/mtab 2>&1")
|
| 26 |
end
|
| 27 |
|
| 28 |
def form(s)
|
| 29 |
return s.split(/\n/).map { |l| ' ' + l }.join("\n")
|
| 30 |
end
|
| 31 |
|
| 32 |
opts = OptionParser::new do |opts|
|
| 33 |
opts.banner = "Usage: ./buildpackage.rb [options]"
|
| 34 |
opts.separator ""
|
| 35 |
opts.separator "Options:"
|
| 36 |
opts.on("-p", "--package PACKAGE", "") { |p| $package = p }
|
| 37 |
opts.on("-c", "--chroot CHROOT", "") { |c| $chroot = c }
|
| 38 |
opts.on("-l", "--log LOGFILE", "Specify log file") { |l| $logfile = l }
|
| 39 |
opts.on("-u", "--upgrade-chroot CHROOT", "Specify a chroot to upgrade from (lenny chroot, usually)") { |c| $uchroot = c }
|
| 40 |
end
|
| 41 |
opts.parse!(ARGV)
|
| 42 |
|
| 43 |
$wdir = `mktemp -d /tmp/build.XXXXXX`.chomp
|
| 44 |
# cleanup
|
| 45 |
Dir::chdir($wdir)
|
| 46 |
ENV['http_proxy']=''
|
| 47 |
|
| 48 |
if $logfile != nil
|
| 49 |
system("mkdir -p #{File::dirname($logfile)}")
|
| 50 |
log = File::new($logfile, "w")
|
| 51 |
STDOUT.reopen(log)
|
| 52 |
STDERR.reopen(log)
|
| 53 |
end
|
| 54 |
|
| 55 |
# Copy chroot locally if needed
|
| 56 |
if ['lsid32', 'llenny32', 'lsid64', 'lsid64-instest', 'lsid64b', 'lsid64c', 'llucid32', 'llucid64', 'lsqueeze64-instest'].include?($chroot)
|
| 57 |
chr = $chroot.gsub(/^l/,'')
|
| 58 |
if not File::exists?("/debscratch/chroots/#{chr}.tgz")
|
| 59 |
system("lockfile-create /debscratch/chroots/#{chr}.lock")
|
| 60 |
if not File::exists?("/debscratch/chroots/#{chr}.tgz")
|
| 61 |
system("cp /dc/data/chroots/#{chr}.tgz /debscratch/chroots/#{chr}.tgz.#{$$}")
|
| 62 |
system("mv /debscratch/chroots/#{chr}.tgz.#{$$} /debscratch/chroots/#{chr}.tgz")
|
| 63 |
# Updating to refresh apt-p2p meta-informations
|
| 64 |
system("schroot -c #{$chroot} apt-get -o Debug::pkgProblemResolver=true update >/dev/null 2>&1")
|
| 65 |
end
|
| 66 |
system('lockfile-remove /debscratch/chroots/#{chr}.lock')
|
| 67 |
end
|
| 68 |
end
|
| 69 |
|
| 70 |
$tstart = Time::now
|
| 71 |
at_exit do
|
| 72 |
$chroots.each do |chr|
|
| 73 |
STDOUT.flush
|
| 74 |
system("schroot -c #{chr} -e")
|
| 75 |
if $?.exitstatus != 0
|
| 76 |
puts "Cleanup of chroot #{chr} failed. Running processes:"
|
| 77 |
loc = `schroot -c #{chr} -i | grep "Mount Location" | awk '{print $3}'`.chomp
|
| 78 |
loc = Pathname::new(loc).realpath
|
| 79 |
system("lsof +D #{loc}")
|
| 80 |
pids = `lsof -t +D #{loc}`.split.each do |pid|
|
| 81 |
if Pathname::new(`readlink /proc/#{pid}/root`.chomp).realpath == loc
|
| 82 |
system("kill -9 #{pid}")
|
| 83 |
else
|
| 84 |
puts "Skipping #{pid}: not correct root."
|
| 85 |
end
|
| 86 |
end
|
| 87 |
system("schroot -c #{chr} -e")
|
| 88 |
if $?.exitstatus != 0
|
| 89 |
puts "Cleanup of chroot still failed. Stopping there."
|
| 90 |
STDOUT.flush
|
| 91 |
sleep 86400
|
| 92 |
end
|
| 93 |
end
|
| 94 |
end
|
| 95 |
realtime = Time::now - $tstart
|
| 96 |
if $tests_failed.length == 0
|
| 97 |
puts "-- Result: OK"
|
| 98 |
else
|
| 99 |
puts "-- Result: FAILED"
|
| 100 |
end
|
| 101 |
puts "-- Total time: #{realtime}s"
|
| 102 |
puts "-- Tests OK: #{$tests_ok.join(' ')}"
|
| 103 |
puts "-- Tests Failed: #{$tests_failed.join(' ')}"
|
| 104 |
|
| 105 |
Dir::chdir("/")
|
| 106 |
system("rm -rf #{$wdir}")
|
| 107 |
end
|
| 108 |
|
| 109 |
# start!
|
| 110 |
puts "IT-Header: #{$package} #{$chroot} / #{$tstart}"
|
| 111 |
|
| 112 |
# first test. install b-deps first, then package.
|
| 113 |
chr = create_chroot
|
| 114 |
$defaultinst = false
|
| 115 |
print "-- Checking if the package is already installed: "
|
| 116 |
s = `schroot -c #{chr} -r -- apt-cache policy #{$package} 2>&1`.chomp
|
| 117 |
if s =~ /Installed: \(none\)/
|
| 118 |
puts "NO"
|
| 119 |
else
|
| 120 |
puts "YES"
|
| 121 |
$defaultinst = true
|
| 122 |
end
|
| 123 |
print "-- Finding version: #{$package} "
|
| 124 |
s = `schroot -c #{chr} -r -- apt-cache show --no-all-versions #{$package} 2>&1`.chomp
|
| 125 |
unstable_version = s.split(/\n/).grep(/^Version: /)[0].split(' ')[1]
|
| 126 |
puts unstable_version
|
| 127 |
STDOUT.flush
|
| 128 |
print "-- Finding depends and recommends: "
|
| 129 |
s = `schroot -c #{chr} -r -- apt-get -o Debug::pkgProblemResolver=true -s install #{$package} 2>&1`.chomp
|
| 130 |
if $?.exitstatus != 0
|
| 131 |
puts "FAILED\n#{form(s)}"
|
| 132 |
$tests_failed << 'find-deps'
|
| 133 |
exit(0)
|
| 134 |
end
|
| 135 |
pkgs = (s.split(/\n/).grep(/^Inst /).map { |e| e.split(' ')[1] } - [$package])
|
| 136 |
if pkgs != []
|
| 137 |
puts pkgs.join(' ')
|
| 138 |
print "-- Installing depends and recommends: "
|
| 139 |
s = `schroot -c #{chr} -r -- apt-get -o Debug::pkgProblemResolver=true -y install #{pkgs.join(' ')} 2>&1`
|
| 140 |
if $?.exitstatus != 0
|
| 141 |
puts "FAILED\n#{form(s)}"
|
| 142 |
$tests_failed << 'inst-deps'
|
| 143 |
puts "-- Installing depends failed, but we are trying to install the package directly anyway since apt might be able to do better."
|
| 144 |
else
|
| 145 |
puts "OK\n#{form(s)}"
|
| 146 |
$tests_ok << 'inst-deps'
|
| 147 |
end
|
| 148 |
else
|
| 149 |
puts "-- No depends to install, skipping dependencies installation."
|
| 150 |
end
|
| 151 |
STDOUT.flush
|
| 152 |
|
| 153 |
$use_workaround_db = false
|
| 154 |
def test_install_package(chr, testname, pkgm, instrecs)
|
| 155 |
if pkgm == :apt
|
| 156 |
if instrecs
|
| 157 |
cmd = "schroot -c #{chr} -r -- apt-get -o Debug::pkgProblemResolver=true -o APT::Install-Recommends=true -y install #{$package} 2>&1"
|
| 158 |
else
|
| 159 |
cmd = "schroot -c #{chr} -r -- apt-get -o Debug::pkgProblemResolver=true -o APT::Install-Recommends=false -y install #{$package} 2>&1"
|
| 160 |
end
|
| 161 |
elsif pkgm == :aptitude
|
| 162 |
cmd = "schroot -c #{chr} -r -- aptitude -y install #{$package} 2>&1"
|
| 163 |
end
|
| 164 |
s = `#{cmd}`
|
| 165 |
if $?.exitstatus == 0
|
| 166 |
puts "OK\n#{form(s)}"
|
| 167 |
else
|
| 168 |
puts "FAILED\n#{form(s)}"
|
| 169 |
if s =~ /Is the server running locally and accepting connections on Unix domain socket "\/var\/run\/postgresql\// or
|
| 170 |
s =~ /psql: could not connect to server: No such file or directory/ or
|
| 171 |
s =~ /connections on Unix domain socket "\/var\/run\/postgresql\// or
|
| 172 |
s =~ /Can't connect to local MySQL server through socket/ or
|
| 173 |
s =~ /warning: database package not installed\?/ or
|
| 174 |
$use_workaround_db
|
| 175 |
# postgresql hack
|
| 176 |
puts "-- Failed, maybe because postgresql or mysql was not running. Let's try after starting them."
|
| 177 |
file = File::new('/tmp/instest-pg-lock', 'w')
|
| 178 |
file.flock(File::LOCK_EX)
|
| 179 |
print "-- Installing postgresql and mysql, ignoring result: "
|
| 180 |
s = `schroot -c #{chr} -r -- apt-get -y install postgresql mysql-server 2>&1`
|
| 181 |
puts "\n#{form(s)}"
|
| 182 |
print "-- Starting postgresql: "
|
| 183 |
#system("schroot -c #{chr} -r -- sed -i \"s/#listen_addresses = 'localhost'/listen_addresses = ''/\" /etc/postgresql/8.4/main/postgresql.conf")
|
| 184 |
s = `schroot -c #{chr} -r -- /etc/init.d/postgresql start 2>&1`
|
| 185 |
if $?.exitstatus != 0
|
| 186 |
puts "FAILED\n#{form(s)}"
|
| 187 |
$tests_failed << testname
|
| 188 |
$tests_failed << 'start-postgresql'
|
| 189 |
exit(0)
|
| 190 |
end
|
| 191 |
puts "OK\n#{form(s)}"
|
| 192 |
print "-- Starting mysql: "
|
| 193 |
system("schroot -c #{chr} -r -- sed -i \"s/^bind-address.*/skip-networking/\" /etc/mysql/my.cnf")
|
| 194 |
s = `schroot -c #{chr} -r -- /etc/init.d/mysql start 2>&1`
|
| 195 |
if $?.exitstatus != 0
|
| 196 |
puts "FAILED\n#{form(s)}"
|
| 197 |
$tests_failed << testname
|
| 198 |
$tests_failed << 'start-mysql'
|
| 199 |
exit(0)
|
| 200 |
end
|
| 201 |
puts "OK\n#{form(s)}"
|
| 202 |
|
| 203 |
print "-- Retrying to install package: "
|
| 204 |
s = `#{cmd}`
|
| 205 |
if $?.exitstatus != 0
|
| 206 |
puts "FAILED\n#{form(s)}"
|
| 207 |
$tests_failed << testname
|
| 208 |
$tests_failed << 'inst-after-postgresql'
|
| 209 |
print "-- Stopping postgresql anyway: "
|
| 210 |
s = `schroot -c #{chr} -r -- /etc/init.d/postgresql stop 2>&1`
|
| 211 |
if $?.exitstatus != 0
|
| 212 |
puts "FAILED\n#{form(s)}"
|
| 213 |
$tests_failed << 'stop-postgresql'
|
| 214 |
else
|
| 215 |
puts "OK\n#{form(s)}"
|
| 216 |
end
|
| 217 |
print "-- Stopping mysql anyway: "
|
| 218 |
s = `schroot -c #{chr} -r -- /etc/init.d/mysql stop 2>&1`
|
| 219 |
if $?.exitstatus != 0
|
| 220 |
puts "FAILED\n#{form(s)}"
|
| 221 |
$tests_failed << 'stop-mysql'
|
| 222 |
else
|
| 223 |
puts "OK\n#{form(s)}"
|
| 224 |
end
|
| 225 |
exit(0)
|
| 226 |
end
|
| 227 |
puts "OK\n#{form(s)}"
|
| 228 |
$use_workaround_db = true
|
| 229 |
print "-- Stopping postgresql: "
|
| 230 |
s = `schroot -c #{chr} -r -- /etc/init.d/postgresql stop 2>&1`
|
| 231 |
if $?.exitstatus != 0
|
| 232 |
puts "FAILED\n#{form(s)}"
|
| 233 |
$tests_failed << testname
|
| 234 |
$tests_failed << 'stop-postgresql'
|
| 235 |
exit(0)
|
| 236 |
end
|
| 237 |
file.flock(File::LOCK_UN)
|
| 238 |
puts "OK\n#{form(s)}"
|
| 239 |
print "-- Stopping mysql: "
|
| 240 |
s = `schroot -c #{chr} -r -- /etc/init.d/mysql stop 2>&1`
|
| 241 |
if $?.exitstatus != 0
|
| 242 |
puts "FAILED\n#{form(s)}"
|
| 243 |
$tests_failed << testname
|
| 244 |
$tests_failed << 'stop-mysql'
|
| 245 |
exit(0)
|
| 246 |
end
|
| 247 |
puts "OK\n#{form(s)}"
|
| 248 |
else
|
| 249 |
$tests_failed << testname
|
| 250 |
exit(0)
|
| 251 |
end
|
| 252 |
end
|
| 253 |
if testname == 'inst-after-deps' and $tests_failed.include?('inst-deps')
|
| 254 |
# installing the deps failed for some reason, but installing the package
|
| 255 |
# worked. it might be caused by suboptimal apt choices. ignoring the inst-deps
|
| 256 |
# error.
|
| 257 |
$tests_failed.delete('inst-deps')
|
| 258 |
end
|
| 259 |
$tests_ok << testname
|
| 260 |
end
|
| 261 |
|
| 262 |
print "-- Installing the package after its depends and recommends: "
|
| 263 |
test_install_package(chr, 'inst-after-deps', :apt, true)
|
| 264 |
STDOUT.flush
|
| 265 |
|
| 266 |
dchr = create_chroot
|
| 267 |
print "-- Installing the package together with its depends, without recommends: "
|
| 268 |
test_install_package(dchr, 'inst-with-deps', :apt, false)
|
| 269 |
STDOUT.flush
|
| 270 |
|
| 271 |
print "-- Creating new chroot and installing aptitude: "
|
| 272 |
achr = create_chroot
|
| 273 |
s = `schroot -c #{achr} -r -- apt-get -o Debug::pkgProblemResolver=true -y install aptitude 2>&1`
|
| 274 |
if $?.exitstatus != 0
|
| 275 |
puts "FAILED while installing aptitude\n#{form(s)}"
|
| 276 |
$tests_failed << 'inst-aptitude'
|
| 277 |
exit(0)
|
| 278 |
else
|
| 279 |
puts "OK\n#{form(s)}"
|
| 280 |
end
|
| 281 |
print "-- Installing the package with aptitude: "
|
| 282 |
test_install_package(achr, 'inst-aptitude', :aptitude, true)
|
| 283 |
STDOUT.flush
|
| 284 |
|
| 285 |
chr = create_chroot
|
| 286 |
print "-- Installing the package together with its depends and recommends: "
|
| 287 |
pkgs_before = `schroot -c #{chr} -r -- dpkg -l 2>&1`.split(/\n/).grep(/^ii /).map { |e| e.split(/\s+/)[1] }
|
| 288 |
test_install_package(chr, 'inst-with-recs', :apt, true)
|
| 289 |
STDOUT.flush
|
| 290 |
|
| 291 |
if $defaultinst
|
| 292 |
puts "-- Package in default install, not testing removal."
|
| 293 |
else
|
| 294 |
pkgs_after = `schroot -c #{chr} -r -- dpkg -l 2>&1`.split(/\n/).grep(/^ii /).map { |e| e.split(/\s+/)[1] }
|
| 295 |
print "-- Removing the package: "
|
| 296 |
s = `schroot -c #{chr} -r -- apt-get -o Debug::pkgProblemResolver=true -y --force-yes remove #{$package} 2>&1`
|
| 297 |
if $?.exitstatus != 0
|
| 298 |
puts "FAILED\n#{form(s)}"
|
| 299 |
$tests_failed << 'rm-pkg'
|
| 300 |
else
|
| 301 |
puts "OK\n#{form(s)}"
|
| 302 |
$tests_ok << 'rm-pkg'
|
| 303 |
print "-- Removing all dependencies: "
|
| 304 |
# ignore problems with adduser and ucf at this point
|
| 305 |
# also about install-info, for now (bug filed against apt)
|
| 306 |
deps = (pkgs_after - pkgs_before - [$package, 'adduser', 'ucf', 'update-inetd', 'perl-modules', 'install-info'])
|
| 307 |
s = `schroot -c #{chr} -r -- apt-get -o Debug::pkgProblemResolver=true -y --force-yes remove #{deps.join(' ')} 2>&1`
|
| 308 |
if $?.exitstatus != 0
|
| 309 |
puts "FAILED\n#{form(s)}"
|
| 310 |
$tests_failed << 'rm-deps'
|
| 311 |
else
|
| 312 |
puts "OK\n#{form(s)}"
|
| 313 |
$tests_ok << 'rm-deps'
|
| 314 |
print "-- Purging package: "
|
| 315 |
s = `schroot -c #{chr} -r -- dpkg --purge #{$package} 2>&1`
|
| 316 |
if $?.exitstatus != 0
|
| 317 |
puts "FAILED\n#{form(s)}"
|
| 318 |
$tests_failed << 'purge-pkg'
|
| 319 |
else
|
| 320 |
puts "OK\n#{form(s)}"
|
| 321 |
$tests_ok << 'purge-pkg'
|
| 322 |
end
|
| 323 |
end
|
| 324 |
end
|
| 325 |
end
|
| 326 |
|
| 327 |
if $uchroot != nil
|
| 328 |
# Copy chroot locally if needed
|
| 329 |
if ['lsid32', 'llenny32', 'lsid64', 'lsid64-instest', 'lsid64b', 'lsid64c', 'llucid32', 'llucid64', 'lsqueeze64-instest'].include?($uchroot)
|
| 330 |
chr = $uchroot.gsub(/^l/,'')
|
| 331 |
if not File::exists?("/debscratch/chroots/#{chr}.tgz")
|
| 332 |
system("lockfile-create /debscratch/chroots/#{chr}.lock")
|
| 333 |
if not File::exists?("/debscratch/chroots/#{chr}.tgz")
|
| 334 |
system("cp /dc/data/chroots/#{chr}.tgz /debscratch/chroots/#{chr}.tgz.#{$$}")
|
| 335 |
system("mv /debscratch/chroots/#{chr}.tgz.#{$$} /debscratch/chroots/#{chr}.tgz")
|
| 336 |
# Updating to refresh apt-p2p meta-informations
|
| 337 |
system("schroot -c #{$uchroot} apt-get -o Debug::pkgProblemResolver=true update >/dev/null 2>&1")
|
| 338 |
end
|
| 339 |
system('lockfile-remove /debscratch/chroots/#{chr}.lock')
|
| 340 |
end
|
| 341 |
end
|
| 342 |
puts "-- Now testing upgrade from #{$uchroot}."
|
| 343 |
chr = create_chroot($uchroot)
|
| 344 |
print "-- Finding version in #{$uchroot}: #{$package} "
|
| 345 |
s = `schroot -c #{chr} -r -- apt-cache show #{$package} 2>&1`.chomp
|
| 346 |
sver = s.split(/\n/).grep(/^Version: /)
|
| 347 |
if sver == []
|
| 348 |
puts "NOT FOUND"
|
| 349 |
else
|
| 350 |
sver = sver[0].split(' ')[1]
|
| 351 |
puts sver
|
| 352 |
print "-- Installing #{$package} in #{$uchroot}: "
|
| 353 |
s = `schroot -c #{chr} -r -- apt-get -o Debug::pkgProblemResolver=true -y install #{$package} 2>&1`
|
| 354 |
if $?.exitstatus != 0
|
| 355 |
puts "FAILED\n#{form(s)}"
|
| 356 |
$tests_failed << 'inst-old'
|
| 357 |
else
|
| 358 |
puts "OK\n#{form(s)}"
|
| 359 |
$tests_ok << 'inst-old'
|
| 360 |
print "-- Upgrading distribution: "
|
| 361 |
s = "## Updating /etc/apt/sources.list...\n"
|
| 362 |
s += `schroot -c #{chr} -r -- sed -i 's/ squeeze / sid /' /etc/apt/sources.list 2>&1`
|
| 363 |
s += "## Running apt-get update...\n"
|
| 364 |
s += `schroot -c #{chr} -r -- apt-get -o Debug::pkgProblemResolver=true update 2>&1`
|
| 365 |
# s += "## Running apt-get -y install apt...\n"
|
| 366 |
# s += `schroot -c #{chr} -r -- apt-get -o Debug::pkgProblemResolver=true -y install apt 2>&1`
|
| 367 |
s += "## Running apt-get -y upgrade...\n"
|
| 368 |
s += `schroot -c #{chr} -r -- apt-get -o Debug::pkgProblemResolver=true -y upgrade 2>&1`
|
| 369 |
s += "## Running apt-get -y dist-upgrade...\n"
|
| 370 |
s += `schroot -c #{chr} -r -- apt-get -o Debug::pkgProblemResolver=true -y dist-upgrade 2>&1`
|
| 371 |
if $?.exitstatus != 0
|
| 372 |
puts "FAILED\n#{form(s)}"
|
| 373 |
$tests_failed << 'upgrade-old'
|
| 374 |
else
|
| 375 |
puts "OK\n#{form(s)}"
|
| 376 |
$tests_ok << 'upgrade-old'
|
| 377 |
print "-- Finding version of #{$package}: "
|
| 378 |
l = `schroot -c #{chr} -r -- dpkg -l 2>&1`.split(/\n/).grep(/^ii\s+#{Regexp::escape($package)}\s/)
|
| 379 |
if l.length == 1
|
| 380 |
new_version = l[0].split(/\s+/)[2]
|
| 381 |
puts new_version
|
| 382 |
elsif l == []
|
| 383 |
new_version = "UNINSTALLED"
|
| 384 |
puts new_version
|
| 385 |
else
|
| 386 |
p l
|
| 387 |
exit(0)
|
| 388 |
end
|
| 389 |
print "-- New version is unstable version: "
|
| 390 |
if new_version == unstable_version
|
| 391 |
puts "OK"
|
| 392 |
$tests_ok << 'pkg-upgrade'
|
| 393 |
else
|
| 394 |
puts "FAILED (#{new_version} != #{unstable_version})"
|
| 395 |
$tests_failed << 'pkg-upgrade'
|
| 396 |
print "-- Packages that will be removed if installed: "
|
| 397 |
s = `schroot -c #{chr} -r -- apt-get -o Debug::pkgProblemResolver=true -s install #{$package} 2>&1`.chomp
|
| 398 |
if $?.exitstatus != 0
|
| 399 |
puts "FAILED\n#{form(s)}"
|
| 400 |
$tests_failed << 'find-rm-after-upgrade'
|
| 401 |
exit(0)
|
| 402 |
end
|
| 403 |
pkgs = (s.split(/\n/).grep(/^Remv /).map { |e| e.split(' ')[1] })
|
| 404 |
puts pkgs.join(' ')
|
| 405 |
print "-- Trying to install new version anyway: "
|
| 406 |
s = `schroot -c #{chr} -r -- apt-get -o Debug::pkgProblemResolver=true -y install #{$package} 2>&1`
|
| 407 |
if $?.exitstatus != 0
|
| 408 |
puts "FAILED\n#{form(s)}"
|
| 409 |
tests_failed << 'inst-new-after-upgrade'
|
| 410 |
else
|
| 411 |
puts "OK\n#{form(s)}"
|
| 412 |
end
|
| 413 |
end
|
| 414 |
end
|
| 415 |
end
|
| 416 |
end
|
| 417 |
end
|