mirror of
https://github.com/anchore/syft.git
synced 2026-02-12 10:36:45 +01:00
* improve struct and field comments and incorporate into json schema Signed-off-by: Alex Goodman <wagoodman@users.noreply.github.com> * address review feedback Signed-off-by: Alex Goodman <wagoodman@users.noreply.github.com> --------- Signed-off-by: Alex Goodman <wagoodman@users.noreply.github.com>
122 lines
4.1 KiB
Go
122 lines
4.1 KiB
Go
package pkg
|
|
|
|
import (
|
|
"sort"
|
|
|
|
"github.com/scylladb/go-set/strset"
|
|
)
|
|
|
|
// CondaPathData represents metadata for a single file within a Conda package from the paths.json file.
|
|
type CondaPathData struct {
|
|
// Path is the file path relative to the Conda environment root.
|
|
Path string `json:"_path"`
|
|
|
|
// PathType indicates the link type for the file (e.g., "hardlink", "softlink", "directory").
|
|
PathType string `json:"path_type"`
|
|
|
|
// SHA256 is the SHA-256 hash of the file contents.
|
|
SHA256 string `json:"sha256"`
|
|
|
|
// SHA256InPrefix is the SHA-256 hash of the file after prefix replacement during installation.
|
|
SHA256InPrefix string `json:"sha256_in_prefix"`
|
|
|
|
// SizeInBytes is the file size in bytes.
|
|
SizeInBytes int64 `json:"size_in_bytes"`
|
|
}
|
|
|
|
// CondaPathsData represents the paths.json file structure from a Conda package containing file metadata.
|
|
type CondaPathsData struct {
|
|
// PathsVersion is the schema version of the paths data format.
|
|
PathsVersion int `json:"paths_version"`
|
|
|
|
// Paths is the list of file metadata entries for all files in the package.
|
|
Paths []CondaPathData `json:"paths"`
|
|
}
|
|
|
|
// CondaLink represents link metadata from a Conda package's link.json file describing package installation source.
|
|
type CondaLink struct {
|
|
// Source is the original path where the package was extracted from cache.
|
|
Source string `json:"source"`
|
|
|
|
// Type indicates the link type (1 for hard link, 2 for soft link, 3 for copy).
|
|
Type int `json:"type"`
|
|
}
|
|
|
|
// CondaMetaPackage represents metadata for a Conda package extracted from the conda-meta/*.json files.
|
|
type CondaMetaPackage struct {
|
|
// Arch is the target CPU architecture for the package (e.g., "arm64", "x86_64").
|
|
Arch string `json:"arch,omitempty"`
|
|
|
|
// Name is the package name as found in the conda-meta JSON file.
|
|
Name string `json:"name"`
|
|
|
|
// Version is the package version as found in the conda-meta JSON file.
|
|
Version string `json:"version"`
|
|
|
|
// Build is the build string identifier (e.g., "h90dfc92_1014").
|
|
Build string `json:"build"`
|
|
|
|
// BuildNumber is the sequential build number for this version.
|
|
BuildNumber int `json:"build_number"`
|
|
|
|
// Channel is the Conda channel URL where the package was retrieved from.
|
|
Channel string `json:"channel,omitempty"`
|
|
|
|
// Subdir is the subdirectory within the channel (e.g., "osx-arm64", "linux-64").
|
|
Subdir string `json:"subdir,omitempty"`
|
|
|
|
// Noarch indicates if the package is platform-independent (e.g., "python", "generic").
|
|
Noarch string `json:"noarch,omitempty"`
|
|
|
|
// License is the package license identifier.
|
|
License string `json:"license,omitempty"`
|
|
|
|
// LicenseFamily is the general license category (e.g., "MIT", "Apache", "GPL").
|
|
LicenseFamily string `json:"license_family,omitempty"`
|
|
|
|
// MD5 is the MD5 hash of the package archive.
|
|
MD5 string `json:"md5,omitempty"`
|
|
|
|
// SHA256 is the SHA-256 hash of the package archive.
|
|
SHA256 string `json:"sha256,omitempty"`
|
|
|
|
// Size is the package archive size in bytes.
|
|
Size int64 `json:"size,omitempty"`
|
|
|
|
// Timestamp is the Unix timestamp when the package was built.
|
|
Timestamp int64 `json:"timestamp,omitempty"`
|
|
|
|
// Filename is the original package archive filename (e.g., "zlib-1.2.11-h90dfc92_1014.tar.bz2").
|
|
Filename string `json:"fn,omitempty"`
|
|
|
|
// URL is the full download URL for the package archive.
|
|
URL string `json:"url,omitempty"`
|
|
|
|
// ExtractedPackageDir is the local cache directory where the package was extracted.
|
|
ExtractedPackageDir string `json:"extracted_package_dir,omitempty"`
|
|
|
|
// Depends is the list of runtime dependencies with version constraints.
|
|
Depends []string `json:"depends,omitempty"`
|
|
|
|
// Files is the list of files installed by this package.
|
|
Files []string `json:"files,omitempty"`
|
|
|
|
// PathsData contains detailed file metadata from the paths.json file.
|
|
PathsData *CondaPathsData `json:"paths_data,omitempty"`
|
|
|
|
// Link contains installation source metadata from the link.json file.
|
|
Link *CondaLink `json:"link,omitempty"`
|
|
}
|
|
|
|
func (m CondaMetaPackage) OwnedFiles() (result []string) {
|
|
s := strset.New()
|
|
for _, f := range m.Files {
|
|
if f != "" {
|
|
s.Add(f)
|
|
}
|
|
}
|
|
result = s.List()
|
|
sort.Strings(result)
|
|
return result
|
|
}
|