--- /dev/null
+import re
+import string
+
+import chroot
+
+def install_br(r, b):
+ cmd = "cd rpm/SPECS; TMPDIR=$HOME/%s rpmbuild --nobuild %s %s 2>&1" \
+ % (b.b_id, b.bconds_string(), b.spec)
+ f = chroot.popen(cmd)
+ rx = re.compile("^\s*([^\s]+) .* is needed by")
+ needed = {}
+ for l in f.xreadlines():
+ m = rx.search(l)
+ if m: needed[m.group(1)] = 1
+ f.close()
+ if len(needed) == 0:
+ return
+ br = string.join(needed.keys())
+ b.log_line("installing BR: %s" % br)
+ res = chroot.run("poldek --up && poldek --unique-pkg-names -v --install %s" % br,
+ user = "root",
+ logfile = b.logfile)
+ if res != 0:
+ b.log_line("error: BR installation failed")
+ return res
def add_pld_builder_info(b):
l = open(b.logfile, "a")
l.write("Begin-PLD-Builder-Info\n")
- l.write("\n--- %s:%s:\n" % (b.spec, b.branch))
l.write("Build-Time: %s\n\n" % b.build_time)
st = ftp.status()
if st != "":
end = "End-PLD-Builder-Info\n"
f = open(b.logfile)
copy_mode = 0
+ need_header = 1
for l in f.xreadlines():
if l == beg:
+ if need_header:
+ need_header = 0
+ target.write("\n--- %s:%s:\n" % (b.spec, b.branch))
copy_mode = 1
elif copy_mode:
if l == end:
import os
import atexit
import time
+import string
import urllib
from config import config, init_conf
import notify
import build
import report
+import upgrade
+import install_br
# this code is duplicated in srpm_builder, but we
# might want to handle some cases differently here
b.log_line("installing srpm: %s" % b.src_rpm)
res = chroot.run("rpm -U %s" % b.src_rpm, logfile = b.logfile)
chroot.run("rm -f %s" % b.src_rpm, logfile = b.logfile)
+ b.files = []
if res:
b.log_line("error: installing src rpm failed")
res = 1
else:
- cmd = "install -m 700 -d $HOME/%s; cd rpm/SPECS; " \
- "TMPDIR=$HOME/%s rpmbuild -bb %s" % \
- (b.b_id, b.b_id, b.spec)
- b.log_line("building RPM using: %s" % cmd)
- res = chroot.run(cmd, logfile = b.logfile)
- files = util.collect_files(b.logfile)
- if len(files) > 0:
- r.chroot_files.extend(files)
- else:
- # FIXME: is it error?
- b.log_line("error: No files produced.")
+ chroot.run("install -m 700 -d $HOME/%s" % b.b_id)
+ cmd = "cd rpm/SPECS; TMPDIR=$HOME/%s rpmbuild -bb %s %s" % \
+ (b.b_id, b.bconds_string(), b.spec)
+ if install_br.install_br(r, b):
res = 1
- b.files = files
+ else:
+ b.log_line("building RPM using: %s" % cmd)
+ res = chroot.run(cmd, logfile = b.logfile)
+ files = util.collect_files(b.logfile)
+ if len(files) > 0:
+ r.chroot_files.extend(files)
+ else:
+ b.log_line("error: No files produced.")
+ res = 1 # FIXME: is it error?
+ b.files = files
chroot.run("rm -rf $HOME/%s; cd rpm/SPECS; rpmbuild --nodeps --nobuild " \
"--clean --rmspec --rmsource %s" % \
(b.b_id, b.spec), logfile = b.logfile)
-
+
+ def ll(l):
+ util.append_to(b.logfile, l)
+
+ if b.files != []:
+ if "test-build" not in r.flags:
+ chroot.run("cp -f %s /spools/ready/; poldek --mkidxz -s /spools/ready/" % \
+ string.join(b.files), logfile = b.logfile, user = "root")
+ else:
+ ll("test-build: not coping to /spools/ready/")
+ ll("Begin-PLD-Builder-Info")
+ if "upgrade" in r.flags:
+ upgrade.upgrade_from_batch(r, b)
+ else:
+ ll("not upgrading")
+ ll("End-PLD-Builder-Info")
+
for f in b.files:
local = r.tmp_dir + os.path.basename(f)
chroot.run("cat %s; rm -f %s" % (f, f), logfile = local)
--- /dev/null
+import re
+import string
+
+import chroot
+
+hold = [
+ 'poldek',
+ 'rpm-build'
+]
+
+def close_killset(killset):
+ k = killset.keys()
+ rx = re.compile(r' marks ([^\s]+)-[^-]+-[^-]+$')
+ errors = ""
+ for p in k:
+ if p in hold:
+ del killset[p]
+ errors += "cannot remove %s because it's crucial\n" % p
+ else:
+ f = chroot.popen("poldek --noask --test --erase %s" % p, user = "root")
+ crucial = 0
+ e = []
+ for l in f.xreadlines():
+ m = rx.search(l)
+ if m:
+ pkg = m.group(1)
+ if pkg in hold:
+ errors += "cannot remove %s because it's required by %s, that is crucial\n" % \
+ (p, pkg)
+ crucial = 1
+ e.append(pkg)
+ f.close()
+ if crucial:
+ del killset[p]
+ else:
+ for p in e:
+ killset[p] = 2
+ return errors
+
+def upgrade_from_batch(r, b):
+ f = chroot.popen("rpm --test -F %s 2>&1" % string.join(b.files), user = "root")
+ killset = {}
+ rx = re.compile(r' ([^\s]+)-[^-]+-[^-]+$')
+ for l in f.xreadlines():
+ m = rx.search(l)
+ if m: killset[m.group(1)] = 1
+ f.close()
+ if len(killset) != 0:
+ err = close_killset(killset)
+ if err != "":
+ util.append_to(b.logfile, err)
+ log.notice("cannot upgrade rpms")
+ return
+ k = string.join(killset.keys())
+ b.log_line("removing %s")
+ res = chroot.run("rpm -e %s" % k, logfile = b.logfile, user = "root")
+ if res != 0:
+ b.log_line("package removal failed")
+ return
+ b.log_line("upgrading packages")
+ res = chroot.run("rpm --test -Fvh %s" % string.join(b.files), user = "root")
+ if res != 0:
+ b.log_line("package upgrade failed")
+ return
poldek_src () {
if test "$1" ; then
- echo "source = local,pri=1 $spools_dir/local-ready/"
+ echo "source = local,pri=1 $spools_dir/ready/"
fi
cat <<EOF
source = main-test,noauto,pri=2 $dist_url/test/$arch/
echo "OK"
echo "installing conf..."
cat >poldek.conf <<EOF
-$(poldek_src)
+$(poldek_src local)
$(common_poldek_opt)
cachedir = $spools_dir/poldek
keep_downloads = yes
chr "useradd -c 'PLD $chroot_name builder' -d /home/users/builder -m -g users -s /bin/sh builder"
chr "cat > /etc/resolv.conf" < /etc/resolv.conf
chr "cat > /etc/mtab" < /dev/null
+chr "mkdir /spools/ready/" < /dev/null
install_SPECS_builder () {
cat >install-specs <<EOF