Merge pull request #403 from KeyboardNerd/multiplens

worker: fixed duplicated ns and ns not inherited bug
This commit is contained in:
Jimmy Zelinskie 2017-06-05 13:32:48 -07:00 committed by GitHub
commit ce162f5524
2 changed files with 19 additions and 11 deletions

View File

@ -145,26 +145,29 @@ func detectContent(imageFormat, name, path string, headers map[string]string, pa
return
}
// detectNamespaces returns a list of unique namespaces detected in a layer and its ancestry.
func detectNamespaces(name string, files tarutil.FilesMap, parent *database.Layer) (namespaces []database.Namespace, err error) {
namespaces, err = featurens.Detect(files)
nsSet := map[string]*database.Namespace{}
nsCurrent, err := featurens.Detect(files)
if err != nil {
return
}
if len(namespaces) > 0 {
for _, ns := range namespaces {
for _, ns := range nsCurrent {
nsSet[ns.Name] = &ns
log.WithFields(log.Fields{logLayerName: name, "detected namespace": ns.Name}).Debug("detected namespace")
}
return
}
// Fallback to the parent's namespace.
if parent != nil {
for _, ns := range parent.Namespaces {
nsSet[ns.Name] = &ns
log.WithFields(log.Fields{logLayerName: name, "detected namespace": ns.Name}).Debug("detected namespace (from parent)")
}
return
}
for _, ns := range nsSet {
namespaces = append(namespaces, *ns)
}
return
}

View File

@ -101,11 +101,16 @@ func TestProcessWithDistUpgrade(t *testing.T) {
// Ensure that the 'wheezy' layer has the expected namespace and non-upgraded features.
jessie, ok := datastore.layers["jessie"]
if assert.True(t, ok, "layer 'jessie' not processed") {
if !assert.Len(t, jessie.Namespaces, 1) {
if !assert.Len(t, jessie.Namespaces, 2) {
return
}
assert.Equal(t, "debian:8", jessie.Namespaces[0].Name)
assert.Len(t, jessie.Features, 74)
nsNames := []string{jessie.Namespaces[0].Name, jessie.Namespaces[1].Name}
// the old features and namespace should remain here with only the features in new namespaces detected
assert.Contains(t, nsNames, "debian:8")
assert.Contains(t, nsNames, "debian:7")
// because the featurefmt detects the features under "debian:8" and "debian:7", therefore the number of features is duplicated
assert.Len(t, jessie.Features, 148)
for _, nufv := range nonUpgradedFeatureVersions {
nufv.Feature.Namespace.Name = "debian:7"