The following pull request was submitted through Github.
It can be accessed and reviewed at: https://github.com/lxc/distrobuilder/pull/297

This e-mail was sent by the LXC bot, direct replies will not reach the author
unless they happen to be subscribed to this list.

=== Description (from pull-request) ===
This changes the types filtering behaviour.
When running build-dir, only section with no types filter will be
processed.

Signed-off-by: Thomas Hipp <thomas.h...@canonical.com>
From 1b3f6ec78d7e17ed7a5f3c674d5ff8c8f2fb9de5 Mon Sep 17 00:00:00 2001
From: Thomas Hipp <thomas.h...@canonical.com>
Date: Tue, 3 Mar 2020 14:19:41 +0100
Subject: [PATCH] shared: Differentiate between build-dir and others

This changes the types filtering behaviour.
When running build-dir, only section with no types filter will be
processed.

Signed-off-by: Thomas Hipp <thomas.h...@canonical.com>
---
 distrobuilder/main.go           | 16 +++++++---
 distrobuilder/main_build-dir.go |  2 +-
 distrobuilder/main_lxc.go       |  2 +-
 distrobuilder/main_lxd.go       |  2 +-
 shared/definition.go            | 10 ++++--
 shared/definition_test.go       | 54 +++++++++++++++++++++++----------
 6 files changed, 60 insertions(+), 26 deletions(-)

diff --git a/distrobuilder/main.go b/distrobuilder/main.go
index 6fba06a..55ffd83 100644
--- a/distrobuilder/main.go
+++ b/distrobuilder/main.go
@@ -259,15 +259,23 @@ func (c *cmdGlobal) preRunBuild(cmd *cobra.Command, args 
[]string) error {
        // Unmount everything and exit the chroot
        defer exitChroot()
 
-       // If we're running build-dir, only process sections which are meant 
for both
-       // containers and VMs.
-       imageTargets := shared.ImageTargetAll
+       var imageTargets shared.ImageTarget
+
+       // If we're running either build-lxc or build-lxd, include types which 
are
+       // meant for all.
+       // If we're running build-dir, only process section which DO NOT specify
+       // a types filter.
+       if !isRunningBuildDir {
+               imageTargets = shared.ImageTargetAll
+       }
 
-       // If we call build-lxc or build-lxd, also process container-only 
sections.
        switch cmd.CalledAs() {
        case "build-lxc":
+               // If we're running build-lxc, also process container-only 
sections.
                imageTargets |= shared.ImageTargetContainer
        case "build-lxd":
+               // Include either container-specific or vm-specific sections 
when
+               // running build-lxd.
                ok, err := cmd.Flags().GetBool("vm")
                if err != nil {
                        return err
diff --git a/distrobuilder/main_build-dir.go b/distrobuilder/main_build-dir.go
index c9994bb..fedc6c5 100644
--- a/distrobuilder/main_build-dir.go
+++ b/distrobuilder/main_build-dir.go
@@ -28,7 +28,7 @@ func (c *cmdBuildDir) command() *cobra.Command {
                                        return fmt.Errorf("Unknown generator 
'%s'", file.Generator)
                                }
 
-                               if !shared.ApplyFilter(&file, 
c.global.definition.Image.Release, 
c.global.definition.Image.ArchitectureMapped, 
c.global.definition.Image.Variant, c.global.definition.Targets.Type, 
shared.ImageTargetAll) {
+                               if !shared.ApplyFilter(&file, 
c.global.definition.Image.Release, 
c.global.definition.Image.ArchitectureMapped, 
c.global.definition.Image.Variant, c.global.definition.Targets.Type, 0) {
                                        continue
                                }
 
diff --git a/distrobuilder/main_lxc.go b/distrobuilder/main_lxc.go
index 950a3cb..0384066 100644
--- a/distrobuilder/main_lxc.go
+++ b/distrobuilder/main_lxc.go
@@ -71,7 +71,7 @@ func (c *cmdLXC) runPack(cmd *cobra.Command, args []string, 
overlayDir string) e
        defer exitChroot()
 
        var manager *managers.Manager
-       imageTargets := shared.ImageTargetContainer
+       imageTargets := shared.ImageTargetAll | shared.ImageTargetContainer
 
        if c.global.definition.Packages.Manager != "" {
                manager = managers.Get(c.global.definition.Packages.Manager)
diff --git a/distrobuilder/main_lxd.go b/distrobuilder/main_lxd.go
index 2fa2648..c4bd98d 100644
--- a/distrobuilder/main_lxd.go
+++ b/distrobuilder/main_lxd.go
@@ -121,7 +121,7 @@ func (c *cmdLXD) runPack(cmd *cobra.Command, args []string, 
overlayDir string) e
        defer exitChroot()
 
        var manager *managers.Manager
-       var imageTargets shared.ImageTarget
+       imageTargets := shared.ImageTargetAll
 
        if c.flagVM {
                imageTargets = shared.ImageTargetVM
diff --git a/shared/definition.go b/shared/definition.go
index a61e4d3..b8fa7eb 100644
--- a/shared/definition.go
+++ b/shared/definition.go
@@ -594,20 +594,24 @@ func ApplyFilter(filter Filter, release string, 
architecture string, variant str
 
        types := filter.GetTypes()
 
+       if acceptedImageTargets == 0 && len(types) == 0 {
+               return true
+       }
+
        if acceptedImageTargets&ImageTargetAll > 0 {
-               if len(types) == 0 || len(types) == 2 && 
shared.StringInSlice(targetType, types) {
+               if len(types) == 2 && shared.StringInSlice(targetType, types) {
                        return true
                }
        }
 
        if acceptedImageTargets&ImageTargetContainer > 0 {
-               if targetType == "container" && len(types) == 1 && types[0] == 
targetType {
+               if targetType == "container" && 
shared.StringInSlice(targetType, types) {
                        return true
                }
        }
 
        if acceptedImageTargets&ImageTargetVM > 0 {
-               if targetType == "vm" && len(types) == 1 && types[0] == 
targetType {
+               if targetType == "vm" && shared.StringInSlice(targetType, 
types) {
                        return true
                }
        }
diff --git a/shared/definition_test.go b/shared/definition_test.go
index eeace7b..4810b8c 100644
--- a/shared/definition_test.go
+++ b/shared/definition_test.go
@@ -507,33 +507,55 @@ func TestDefinitionFilter(t *testing.T) {
 func TestApplyFilter(t *testing.T) {
        repo := DefinitionPackagesRepository{}
 
+       // Variants
        repo.Variants = []string{"default"}
+       require.True(t, ApplyFilter(&repo, "foo", "amd64", "default", "vm", 0))
+       require.False(t, ApplyFilter(&repo, "foo", "amd64", "cloud", "vm", 0))
+
+       // Architectures
        repo.Architectures = []string{"amd64", "i386"}
+       require.True(t, ApplyFilter(&repo, "foo", "amd64", "default", "vm", 0))
+       require.True(t, ApplyFilter(&repo, "foo", "i386", "default", "vm", 0))
+       require.False(t, ApplyFilter(&repo, "foo", "s390", "default", "vm", 0))
+
+       // Releases
        repo.Releases = []string{"foo"}
-       repo.Types = []string{"vm"}
+       require.True(t, ApplyFilter(&repo, "foo", "amd64", "default", "vm", 0))
+       require.False(t, ApplyFilter(&repo, "bar", "amd64", "default", "vm", 0))
 
-       require.False(t, ApplyFilter(&repo, "foo", "amd64", "default", "vm", 
ImageTargetAll))
+       // Targets
+       require.True(t, ApplyFilter(&repo, "foo", "amd64", "default", "vm", 0))
+       require.True(t, ApplyFilter(&repo, "foo", "amd64", "default", 
"container", 0))
+       require.False(t, ApplyFilter(&repo, "foo", "amd64", "default", "vm", 
ImageTargetVM))
+       require.False(t, ApplyFilter(&repo, "foo", "amd64", "default", "vm", 
ImageTargetAll|ImageTargetVM))
+       require.False(t, ApplyFilter(&repo, "foo", "amd64", "default", "vm", 
ImageTargetContainer|ImageTargetVM))
+       require.False(t, ApplyFilter(&repo, "foo", "amd64", "default", 
"container", ImageTargetVM))
+       require.False(t, ApplyFilter(&repo, "foo", "amd64", "default", 
"container", ImageTargetAll|ImageTargetVM))
+       require.False(t, ApplyFilter(&repo, "foo", "amd64", "default", 
"container", ImageTargetContainer|ImageTargetVM))
+
+       repo.Types = []string{"vm"}
        require.True(t, ApplyFilter(&repo, "foo", "amd64", "default", "vm", 
ImageTargetVM))
        require.True(t, ApplyFilter(&repo, "foo", "amd64", "default", "vm", 
ImageTargetAll|ImageTargetVM))
+       require.True(t, ApplyFilter(&repo, "foo", "amd64", "default", "vm", 
ImageTargetContainer|ImageTargetVM))
        require.False(t, ApplyFilter(&repo, "foo", "amd64", "default", 
"container", ImageTargetVM))
-       require.False(t, ApplyFilter(&repo, "foo", "amd64", "default", 
"container", ImageTargetVM))
-       require.False(t, ApplyFilter(&repo, "", "arm64", "default", "vm", 
ImageTargetAll))
+       require.False(t, ApplyFilter(&repo, "foo", "amd64", "default", 
"container", ImageTargetAll|ImageTargetVM))
+       require.False(t, ApplyFilter(&repo, "foo", "amd64", "default", 
"container", ImageTargetContainer|ImageTargetVM))
+       require.False(t, ApplyFilter(&repo, "foo", "amd64", "default", 
"container", 0))
 
        repo.Types = []string{"container"}
-       require.False(t, ApplyFilter(&repo, "foo", "amd64", "default", "vm", 
ImageTargetContainer))
-       require.False(t, ApplyFilter(&repo, "foo", "amd64", "default", "vm", 
ImageTargetAll))
        require.True(t, ApplyFilter(&repo, "foo", "amd64", "default", 
"container", ImageTargetContainer))
-       require.False(t, ApplyFilter(&repo, "foo", "amd64", "default", 
"container", ImageTargetAll|ImageTargetVM))
-
-       repo.Types = []string{"container", "vm"}
-       require.True(t, ApplyFilter(&repo, "foo", "amd64", "default", "vm", 
ImageTargetAll))
-       require.True(t, ApplyFilter(&repo, "foo", "amd64", "default", 
"container", ImageTargetAll))
-       require.False(t, ApplyFilter(&repo, "foo", "amd64", "default", 
"container", ImageTargetVM))
+       require.True(t, ApplyFilter(&repo, "foo", "amd64", "default", 
"container", ImageTargetAll|ImageTargetContainer))
+       require.True(t, ApplyFilter(&repo, "foo", "amd64", "default", 
"container", ImageTargetContainer|ImageTargetVM))
        require.False(t, ApplyFilter(&repo, "foo", "amd64", "default", "vm", 
ImageTargetContainer))
+       require.False(t, ApplyFilter(&repo, "foo", "amd64", "default", "vm", 
ImageTargetAll|ImageTargetContainer))
+       require.False(t, ApplyFilter(&repo, "foo", "amd64", "default", "vm", 
ImageTargetContainer|ImageTargetVM))
+       require.False(t, ApplyFilter(&repo, "foo", "amd64", "default", "vm", 0))
 
-       repo.Types = []string{}
-       require.True(t, ApplyFilter(&repo, "foo", "amd64", "default", "vm", 
ImageTargetAll))
-       require.True(t, ApplyFilter(&repo, "foo", "amd64", "default", 
"container", ImageTargetAll))
-       require.False(t, ApplyFilter(&repo, "foo", "amd64", "default", 
"container", ImageTargetVM))
+       repo.Types = []string{"container", "vm"}
+       require.True(t, ApplyFilter(&repo, "foo", "amd64", "default", 
"container", ImageTargetContainer))
+       require.True(t, ApplyFilter(&repo, "foo", "amd64", "default", 
"container", ImageTargetAll|ImageTargetContainer))
+       require.True(t, ApplyFilter(&repo, "foo", "amd64", "default", 
"container", ImageTargetContainer|ImageTargetVM))
+       require.True(t, ApplyFilter(&repo, "foo", "amd64", "default", "vm", 
ImageTargetAll|ImageTargetContainer))
+       require.True(t, ApplyFilter(&repo, "foo", "amd64", "default", "vm", 
ImageTargetContainer|ImageTargetVM))
        require.False(t, ApplyFilter(&repo, "foo", "amd64", "default", "vm", 
ImageTargetContainer))
 }
_______________________________________________
lxc-devel mailing list
lxc-devel@lists.linuxcontainers.org
http://lists.linuxcontainers.org/listinfo/lxc-devel

Reply via email to