[lxc-devel] [distrobuilder/master] chroot: Perform package refresh only when needed

monstermunchkin on Github lxc-bot at linuxcontainers.org
Tue Mar 10 19:37:25 UTC 2020


A non-text attachment was scrubbed...
Name: not available
Type: text/x-mailbox
Size: 509 bytes
Desc: not available
URL: <http://lists.linuxcontainers.org/pipermail/lxc-devel/attachments/20200310/95b565a9/attachment.bin>
-------------- next part --------------
From 62f0c595475ff91187dc6baaf60fb964cda528c4 Mon Sep 17 00:00:00 2001
From: Thomas Hipp <thomas.hipp at canonical.com>
Date: Tue, 10 Mar 2020 15:56:17 +0100
Subject: [PATCH] chroot: Perform package refresh only when needed

This changes the behaviour of package refresh. It only runs if packages
need to be installed or removed, or an update needs to be performed.

Signed-off-by: Thomas Hipp <thomas.hipp at canonical.com>
---
 distrobuilder/chroot.go | 28 ++++++++++++++++------------
 1 file changed, 16 insertions(+), 12 deletions(-)

diff --git a/distrobuilder/chroot.go b/distrobuilder/chroot.go
index 6c23f7f..242f87e 100644
--- a/distrobuilder/chroot.go
+++ b/distrobuilder/chroot.go
@@ -52,9 +52,23 @@ func manageRepositories(def *shared.Definition, manager *managers.Manager, image
 }
 
 func managePackages(def *shared.Definition, manager *managers.Manager, imageTarget shared.ImageTarget) error {
-	var err error
+	var validSets []shared.DefinitionPackagesSet
+
+	for _, set := range def.Packages.Sets {
+		if !shared.ApplyFilter(&set, def.Image.Release, def.Image.ArchitectureMapped, def.Image.Variant, def.Targets.Type, imageTarget) {
+			continue
+		}
+
+		validSets = append(validSets, set)
+	}
 
-	err = manager.Refresh()
+	// If there's nothing to install or remove, and no updates need to be performed,
+	// we can exit here.
+	if len(validSets) == 0 && !def.Packages.Update {
+		return nil
+	}
+
+	err := manager.Refresh()
 	if err != nil {
 		return err
 	}
@@ -74,16 +88,6 @@ func managePackages(def *shared.Definition, manager *managers.Manager, imageTarg
 		}
 	}
 
-	var validSets []shared.DefinitionPackagesSet
-
-	for _, set := range def.Packages.Sets {
-		if !shared.ApplyFilter(&set, def.Image.Release, def.Image.ArchitectureMapped, def.Image.Variant, def.Targets.Type, imageTarget) {
-			continue
-		}
-
-		validSets = append(validSets, set)
-	}
-
 	for _, set := range optimizePackageSets(validSets) {
 		if set.Action == "install" {
 			err = manager.Install(set.Packages, set.Flags)


More information about the lxc-devel mailing list