Files
Gitea/modules/structs/package.go
T
b0b31bc593 feat(packages): expose package file properties in the package files API (#40066)
Package files carry type specific properties like `debian.distribution`,
`debian.component`, `rpm.group` or `alpine.branch` that decide where a
file lives in a registry, but the API never returned them. A client
listing `GET /packages/{owner}/{type}/{name}/{version}/files` could not
tell which distribution or component a file belongs to, or tell apart
same-named files in different ones. Tools copying packages between
instances, like https://gitea.com/gitea/importer, need them to re-upload
a file to the same place.

This adds a `properties` map to `PackageFile`, limited to the properties
that locate a file. Internal ones like the rpm, alpine, arch and conda
metadata or the Debian control file stay hidden, as they can be many MiB
per file.

Co-authored-by: silverwind <me@silverwind.io>
Co-authored-by: wxiaoguang <wxiaoguang@gmail.com>
2026-10-29 18:10:36 +00:00

52 lines
1.5 KiB
Go

// Copyright 2021 The Gitea Authors. All rights reserved.
// SPDX-License-Identifier: MIT
package structs
import (
"time"
)
// Package represents a package
type Package struct {
// The unique identifier of the package
ID int64 `json:"id"`
// The owner of the package
Owner *User `json:"owner"`
// The repository that contains this package
Repository *Repository `json:"repository"`
// The user who created this package
Creator *User `json:"creator"`
// The type of the package (e.g., npm, maven, docker)
Type string `json:"type"`
// The name of the package
Name string `json:"name"`
// The version of the package
Version string `json:"version"`
// The HTML URL to view the package
HTMLURL string `json:"html_url"`
// swagger:strfmt date-time
// The date and time when the package was created
CreatedAt time.Time `json:"created_at"`
}
// PackageFile represents a package file
type PackageFile struct {
// The unique identifier of the package file
ID int64 `json:"id"`
// The size of the package file in bytes
Size int64 `json:"size"`
// The name of the package file
Name string `json:"name"`
// The MD5 hash of the package file
HashMD5 string `json:"md5"`
// The SHA1 hash of the package file
HashSHA1 string `json:"sha1"`
// The SHA256 hash of the package file
HashSHA256 string `json:"sha256"`
// The SHA512 hash of the package file
HashSHA512 string `json:"sha512"`
// The type specific properties locating the package file, e.g. the distribution and component of a Debian package
Properties map[string]string `json:"properties,omitempty"`
}