[elbe-devel] [PATCH v2 22/22] check_updates: add option to build changelogxml

Torben Hohn torben.hohn at linutronix.de
Tue Jul 2 12:55:44 CEST 2019


"elbe check_updates" is now capable of downloading all packages,
pending updates, and then extract the changelogs.

these changelogs are aggregated into an xml file, which could
be processed further.

Signed-off-by: Torben Hohn <torben.hohn at linutronix.de>
---
 elbepack/commands/check_updates.py | 58 ++++++++++++++++++++++++++++++++------
 1 file changed, 50 insertions(+), 8 deletions(-)

diff --git a/elbepack/commands/check_updates.py b/elbepack/commands/check_updates.py
index f87419020..7d446228c 100644
--- a/elbepack/commands/check_updates.py
+++ b/elbepack/commands/check_updates.py
@@ -15,6 +15,29 @@ from elbepack import virtapt
 from elbepack.validate import validate_xml
 from elbepack.shellhelper import system
 from elbepack.elbexml import ElbeXML
+from elbepack.pkgutils import extract_pkg_changelog, ChangelogNeedsDependency
+from elbepack.aptpkgutils import XMLPackage
+from elbepack.changelogxml import changelogs_xml
+
+
+def build_changelog_xml(v, opt, update_packages):
+    v.do_downloads()
+
+    clx = changelogs_xml()
+
+    for xp in update_packages:
+        try:
+            f = v.get_downloaded_pkg(xp.name)
+            log = extract_pkg_changelog(f)
+        except ChangelogNeedsDependency as e:
+            v.mark_pkg_download(e.pkgname)
+            v.do_downloads()
+            extra = v.get_downloaded_pkg(e.pkgname)
+            log = extract_pkg_changelog(f, extra)
+
+        clx.add_pkg_changelog(xp, log)
+
+    clx.write(opt.changelogs)
 
 
 def run_command(argv):
@@ -33,6 +56,11 @@ def run_command(argv):
     oparser.add_option("--skip-validation", action="store_true",
                        dest="skip_validation", default=False,
                        help="Skip xml schema validation")
+    oparser.add_option(
+        "-c",
+        "--changelogs",
+        dest="changelogs",
+        help="filename of changelog xml file")
     (opt, args) = oparser.parse_args(argv)
 
     if len(args) != 1:
@@ -54,6 +82,8 @@ def run_command(argv):
 
     fullp = xml.node("fullpkgs")
 
+    arch = xml.text("project/buildimage/arch", key="arch")
+
     v = virtapt.VirtApt(xml)
 
     for p in fullp:
@@ -67,29 +97,37 @@ def run_command(argv):
     errors = 0
     required_updates = 0
 
+    update_packages = []
+
     for p in fullp:
+        xp = XMLPackage(p, arch)
         pname = p.et.text
         pver = p.et.get('version')
         pauto = p.et.get('auto')
 
-        if not v.has_pkg(pname):
-            if pauto == 'false':
+        if not v.has_pkg(xp.name):
+            if not xp.is_auto_installed:
                 print(
                     "%s does not exist in cache but is specified in pkg-list" %
-                    pname)
+                    xp.name)
                 errors += 1
             else:
-                print("%s is no more required" % pname)
+                print("%s is no more required" % xp.name)
                 required_updates += 1
 
             continue
 
-        if v.marked_install(pname):
-            cver = v.get_candidate_ver(pname)
-            if pver != cver:
-                print("%s: %s != %s" % (pname, pver, cver))
+        if v.marked_install(xp.name):
+            cver = v.get_candidate_ver(xp.name)
+            if xp.installed_version != cver:
+                print("%s: %s != %s" % (xp.installed_version, pver, cver))
                 required_updates += 1
 
+                if opt.changelogs:
+                    v.mark_pkg_download(xp.name)
+                    xp.candidate_version = cver
+                    update_packages.append(xp)
+
     sys.stdout.flush()
     sys.stderr.flush()
     if errors > 0:
@@ -98,6 +136,10 @@ def run_command(argv):
             system("%s ERRORS %s" % (opt.script, args[0]), allow_fail=True)
     elif required_updates > 0:
         print("%d updates required" % required_updates)
+
+        if opt.changelogs:
+            build_changelog_xml(v, opt, update_packages)
+
         if opt.script:
             system("%s UPDATE %s" % (opt.script, args[0]), allow_fail=True)
     else:
-- 
2.11.0




More information about the elbe-devel mailing list