// detectContent downloads a layer's archive and extracts its Namespace and Features. func detectContent(imageFormat, name, path string, headers map[string]string, parent *database.Layer) (namespace *database.Namespace, features []database.FeatureVersion, err error) { data, err := detectors.DetectData(imageFormat, path, headers, append(detectors.GetRequiredFilesFeatures(), detectors.GetRequiredFilesNamespace()...), maxFileSize) if err != nil { log.Errorf("layer %s: failed to extract data from %s: %s", name, utils.CleanURL(path), err) return } // Detect namespace. namespace, err = detectNamespace(data, parent) if err != nil { return } if namespace != nil { log.Debugf("layer %s: Namespace is %s.", name, namespace.Name) } else { log.Debugf("layer %s: OS is unknown.", name) } // Detect features. features, err = detectFeatures(name, data, namespace) if err != nil { return } // If there are no feature detected, use parent's features if possible. // TODO(Quentin-M): We eventually want to give the choice to each detectors to use none/some // parent's Features. It would be useful for detectors that can't find their entire result using // one Layer. if len(features) == 0 && parent != nil { features = parent.Features } log.Debugf("layer %s: detected %d features", name, len(features)) return }
// detectContent downloads a layer's archive and extracts its Namespace and Features. func detectContent(imageFormat, name, path string, headers map[string]string, parent *database.Layer) (namespace *database.Namespace, featureVersions []database.FeatureVersion, err error) { data, err := detectors.DetectData(imageFormat, path, headers, append(detectors.GetRequiredFilesFeatures(), detectors.GetRequiredFilesNamespace()...), maxFileSize) if err != nil { log.Errorf("layer %s: failed to extract data from %s: %s", name, utils.CleanURL(path), err) return } // Detect namespace. namespace = detectNamespace(name, data, parent) // Detect features. featureVersions, err = detectFeatureVersions(name, data, namespace, parent) if err != nil { return } if len(featureVersions) > 0 { log.Debugf("layer %s: detected %d features", name, len(featureVersions)) } return }