]> git.pld-linux.org Git - projects/pld-builder.new.git/commitdiff
- automatic BR installation
authorMichal Moskal <michal@moskal.me>
Sun, 15 Jun 2003 21:11:24 +0000 (21:11 +0000)
committercvs2git <feedback@pld-linux.org>
Sun, 24 Jun 2012 12:13:13 +0000 (12:13 +0000)
- automatic package upgrade after build, with removal of conflicting
  packages

Changed files:
    PLD_Builder/install_br.py -> 1.1
    PLD_Builder/report.py -> 1.2
    PLD_Builder/rpm_builder.py -> 1.11
    PLD_Builder/upgrade.py -> 1.1
    admin/install-chroot.sh -> 1.6

PLD_Builder/install_br.py [new file with mode: 0644]
PLD_Builder/report.py
PLD_Builder/rpm_builder.py
PLD_Builder/upgrade.py [new file with mode: 0644]
admin/install-chroot.sh

diff --git a/PLD_Builder/install_br.py b/PLD_Builder/install_br.py
new file mode 100644 (file)
index 0000000..96c0df4
--- /dev/null
@@ -0,0 +1,25 @@
+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
index 202ca86d6bc862e1b265a5b0329ab5ef1ac05d66..0a5d64948e1c2d48371f7c953f5dd2d74cc506dc 100644 (file)
@@ -23,7 +23,6 @@ def unpackaged_files(b):
 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 != "":
@@ -37,8 +36,12 @@ def info_from_log(b, target):
   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:
index 7d1992babc7509ef3547731ef8a3edb942d99ee6..ddfe630c636141fe28c13d00258911afab66741c 100644 (file)
@@ -2,6 +2,7 @@ import sys
 import os
 import atexit
 import time
+import string
 import urllib
 
 from config import config, init_conf
@@ -18,6 +19,8 @@ import ftp
 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
@@ -58,27 +61,46 @@ def build_rpm(r, b):
   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)
diff --git a/PLD_Builder/upgrade.py b/PLD_Builder/upgrade.py
new file mode 100644 (file)
index 0000000..081f93a
--- /dev/null
@@ -0,0 +1,64 @@
+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
index dd0273bbdd081fdb14c742b9ef0b65da99f8101a..ad63fad33287849c57b7b804404927c20ed7788c 100755 (executable)
@@ -39,7 +39,7 @@ load_config "$1"
 
 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/
@@ -115,7 +115,7 @@ esac
 echo "OK"
 echo "installing conf..."
 cat >poldek.conf <<EOF
-$(poldek_src)
+$(poldek_src local)
 $(common_poldek_opt)
 cachedir = $spools_dir/poldek
 keep_downloads = yes
@@ -125,6 +125,7 @@ chr "cat > /etc/poldek.conf" < poldek.conf
 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
This page took 0.68405 seconds and 4 git commands to generate.