diff --git a/alpha/declcfg/diff.go b/alpha/declcfg/diff.go index 034aa0240..351eb95e5 100644 --- a/alpha/declcfg/diff.go +++ b/alpha/declcfg/diff.go @@ -101,7 +101,10 @@ func (g *DiffGenerator) Run(oldModel, newModel model.Model) (model.Model, error) if len(ch.Bundles) == 0 { delete(outputPkg.Channels, ch.Name) } - + } + if len(outputPkg.Channels) == 0 { + // Remove empty packages. + delete(outputModel, outputPkg.Name) } } } diff --git a/alpha/declcfg/diff_test.go b/alpha/declcfg/diff_test.go index 18f7dc657..d36e2aadd 100644 --- a/alpha/declcfg/diff_test.go +++ b/alpha/declcfg/diff_test.go @@ -1271,6 +1271,66 @@ func TestDiffHeadsOnly(t *testing.T) { g: &DiffGenerator{}, expCfg: DeclarativeConfig{}, }, + { + name: "NoDiff/EmptyBundleWithInclude", + newCfg: DeclarativeConfig{ + Packages: []Package{ + {Schema: schemaPackage, Name: "etcd", DefaultChannel: "stable"}, + }, + Channels: []Channel{ + {Schema: schemaChannel, Name: "stable", Package: "etcd", Entries: []ChannelEntry{ + {Name: "etcd.v0.9.0"}, + {Name: "etcd.v0.9.1", Replaces: "etcd.v0.9.0"}, + }}, + {Schema: schemaChannel, Name: "clusterwide", Package: "etcd", Entries: []ChannelEntry{ + {Name: "etcd.v0.9.1-clusterwide"}, + }}, + }, + Bundles: []Bundle{ + { + Schema: schemaBundle, + Name: "etcd.v0.9.0", + Package: "etcd", + Image: "reg/etcd:latest", + Properties: []property.Property{ + property.MustBuildPackage("etcd", "0.9.1"), + }, + }, + { + Schema: schemaBundle, + Name: "etcd.v0.9.1", + Package: "etcd", + Image: "reg/etcd:latest", + Properties: []property.Property{ + property.MustBuildPackage("etcd", "0.9.1"), + }, + }, + { + Schema: schemaBundle, + Name: "etcd.v0.9.1-clusterwide", + Package: "etcd", + Image: "reg/etcd:latest", + Properties: []property.Property{ + property.MustBuildPackage("etcd", "0.9.1-clusterwide"), + }, + }, + }, + }, + g: &DiffGenerator{ + IncludeAdditively: false, + Includer: DiffIncluder{ + Packages: []DiffIncludePackage{ + { + Name: "etcd", + AllChannels: DiffIncludeChannel{ + Versions: []semver.Version{{Major: 0, Minor: 9, Patch: 2}}, + }, + }, + }, + }, + }, + expCfg: DeclarativeConfig{}, + }, { name: "HasDiff/OneBundle", newCfg: DeclarativeConfig{