g2

package module
v0.0.13 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Mar 5, 2026 License: GPL-2.0 Imports: 25 Imported by: 0

README

g2

Some Gentoo CLI tools I wrote for myself.

Manifest Tools

g2 includes a set of tools for working with Gentoo Manifest files.

manifest

The manifest command group handles operations related to Manifest files.

upsert-from-url

Updates or inserts a Manifest entry for a file downloaded from a URL. This command streams the file, calculates the specified checksums, and updates the Manifest file in the specified directory (or specific file path).

Usage:

g2 manifest [flags] upsert-from-url <url> <filename> <manifestFileOrDir>

Arguments:

  • <url>: The HTTP/HTTPS URL of the file to download.
  • <filename>: The filename to record in the Manifest (typically the distfile name).
  • <manifestFileOrDir>: The path to the Manifest file or the directory containing it (e.g., the ebuild directory).

Flags:

The following flags control which checksums are calculated. Note that BLAKE2B and SHA512 are enabled by default.

  • -blake2b (default: true): Calculate BLAKE2B checksum.
  • -blake2s (default: false): Calculate BLAKE2S checksum.
  • -md5 (default: false): Calculate MD5 checksum.
  • -rmd160 (default: false): Calculate RMD160 checksum.
  • -sha1 (default: false): Calculate SHA1 checksum.
  • -sha256 (default: false): Calculate SHA256 checksum.
  • -sha3_256 (default: false): Calculate SHA3-256 checksum.
  • -sha3_512 (default: false): Calculate SHA3-512 checksum.
  • -sha512 (default: true): Calculate SHA512 checksum.

Example:

To download a package, calculate SHA256 in addition to defaults, and update the Manifest in the current directory:

g2 manifest -sha256=true upsert-from-url https://example.com/software-1.0.tar.gz software-1.0.tar.gz .

Documentation

Index

Constants

View Source
const (
	HashBlake2b  = "BLAKE2B"
	HashBlake2s  = "BLAKE2S"
	HashMd5      = "MD5"
	HashRmd160   = "RMD160"
	HashSha1     = "SHA1"
	HashSha256   = "SHA256"
	HashSha3_256 = "SHA3_256"
	HashSha3_512 = "SHA3_512"
	HashSha512   = "SHA512"
)

Variables

Functions

func ParseEbuildVariables

func ParseEbuildVariables(filename string) map[string]string

ParseEbuildVariables extracts PN, PV, P from the ebuild filename.

func ParseMetadata

func ParseMetadata(path string) (interface{}, error)

ParseMetadata parses a metadata.xml file and returns either a PkgMetadata or CatMetadata pointer (as interface{}), or an error.

func ParseMetadataBytes

func ParseMetadataBytes(data []byte) (interface{}, error)

ParseMetadataBytes parses metadata from a byte slice.

func ParseMetadataFromReader

func ParseMetadataFromReader(r io.Reader) (interface{}, error)

ParseMetadataFromReader parses metadata from an io.Reader.

func ResolveVariables

func ResolveVariables(text string, variables map[string]string) string

ResolveVariables replaces ${VAR} and $VAR in the text with values from variables map.

func UpsertManifest

func UpsertManifest(manifestPath string, newEntry *ManifestEntry) error

UpsertManifest updates or inserts a manifest entry.

func WriteMetadata

func WriteMetadata(path string, data interface{}) error

WriteMetadata writes the metadata to a file with proper headers.

Types

type Cat

type Cat struct {
	// Text of the category.
	Text string `xml:",chardata"`
}

Cat represents a cross-linking category. Note: This struct is not directly used in LongDescription to preserve mixed content via InnerXML, but is provided as part of the model definition.

type CatMetadata

type CatMetadata struct {
	XMLName         xml.Name          `xml:"catmetadata"`
	LongDescription []LongDescription `xml:"longdescription"`
}

CatMetadata represents metadata for a category.

func (*CatMetadata) String

func (c *CatMetadata) String() string

type Checksums

type Checksums struct {
	Size   int64
	Hashes map[string]string
}

func DownloadAndChecksum

func DownloadAndChecksum(url string, hashes []string) (*Checksums, error)

type Description

type Description struct {
	// Text of the description.
	Text string `xml:",chardata"`
}

Description represents a description of a maintainer or change.

type Doc

type Doc struct {
	// URL of the documentation.
	URL string `xml:",chardata"`
	// Lang specifies the language of the documentation.
	Lang string `xml:"lang,attr,omitempty"`
}

Doc represents a documentation URL.

type DownloadProgress

type DownloadProgress struct {
	Resp      *http.Response
	TotalSize *int64
	Size      int
	Tick      time.Time
	Start     time.Time
}

func (*DownloadProgress) Write

func (d *DownloadProgress) Write(p []byte) (n int, err error)

type Ebuild

type Ebuild struct {
	Path   string
	Vars   map[string]string
	SrcUri []URIEntry
	Mode   ParsingMode
}

func ParseEbuild

func ParseEbuild(fsys fs.FS, path string, mode ParsingMode) (*Ebuild, error)

ParseEbuild parses an ebuild file with the specified mode.

func (*Ebuild) String

func (e *Ebuild) String() string

type Email

type Email struct {
	// Text of the email address.
	Text string `xml:",chardata"`
}

Email represents an email address.

type Flag

type Flag struct {
	// Name of the USE flag.
	Name string `xml:"name,attr"`
	// Text of the flag.
	Text string `xml:",chardata"`
	// Restrict specifies restrictions on the applicability of the flag.
	Restrict string `xml:"restrict,attr,omitempty"`
}

Flag represents a USE flag.

type Hash

type Hash struct {
	Type  string
	Value string
}

type LongDescription

type LongDescription struct {
	// Body contains the inner XML of the long description.
	// We use InnerXML to preserve mixed content (text + <pkg>/<cat> tags) and ensure circularity.
	Body string `xml:",innerxml"`
	// Lang specifies the language of the description.
	Lang string `xml:"lang,attr,omitempty"`
	// Restrict specifies restrictions on the applicability of the description.
	Restrict string `xml:"restrict,attr,omitempty"`
}

LongDescription represents a long description of a package or category.

type Maintainer

type Maintainer struct {
	// Email of the maintainer.
	Email string `xml:"email"`
	// Name of the maintainer.
	Name string `xml:"name,omitempty"`
	// Description of the maintainer.
	Description string `xml:"description,omitempty"`
	// Type of the maintainer: person, project, or unknown.
	Type string `xml:"type,attr,omitempty"`
	// Proxied indicates whether the maintainer is proxied: yes, no, or proxy.
	Proxied string `xml:"proxied,attr,omitempty"`
	// Status of the upstream maintainer: active, inactive, or unknown.
	Status string `xml:"status,attr,omitempty"`
	// Restrict specifies restrictions on the applicability of the maintainer.
	Restrict string `xml:"restrict,attr,omitempty"`
}

Maintainer represents a maintainer of a package.

type Manifest

type Manifest struct {
	Entries []*ManifestEntry
}

func ParseManifest

func ParseManifest(path string) (*Manifest, error)

func ParseManifestContent

func ParseManifestContent(content string) (*Manifest, error)

func (*Manifest) AddOrReplace

func (m *Manifest) AddOrReplace(entry *ManifestEntry)

func (*Manifest) GetEntry

func (m *Manifest) GetEntry(filename string) *ManifestEntry

GetEntry returns the entry for a filename if it exists

func (*Manifest) Remove

func (m *Manifest) Remove(filename string)

func (*Manifest) Sort

func (m *Manifest) Sort()

Sort sorts the manifest entries by type then filename

func (*Manifest) String

func (m *Manifest) String() string

type ManifestEntry

type ManifestEntry struct {
	Type     string
	Filename string
	Size     int64
	Hashes   []Hash
}

func NewManifestEntry

func NewManifestEntry(typeStr, filename string, size int64, hashes ...Hash) *ManifestEntry

func ParseManifestEntry

func ParseManifestEntry(line string) (*ManifestEntry, error)

func (*ManifestEntry) AddHash

func (e *ManifestEntry) AddHash(hType, hValue string)

func (*ManifestEntry) GetHash

func (e *ManifestEntry) GetHash(hType string) string

func (*ManifestEntry) String

func (e *ManifestEntry) String() string

type Name

type Name struct {
	// Text of the name.
	Text string `xml:",chardata"`
}

Name represents a name of a person or maintainer.

type ParsingMode

type ParsingMode uint
const (
	ParseMetadataOnly ParsingMode = iota + 1 // Parse only filename-based metadata (PN, PV, etc.)
	ParseVariables                           // Parse variable definitions in the file
	ParseFull                                // Parse everything (e.g. SRC_URI)
)

func (ParsingMode) String

func (m ParsingMode) String() string

type Pkg

type Pkg struct {
	// Text of the package.
	Text string `xml:",chardata"`
}

Pkg represents a cross-linking package. Note: This struct is not directly used in LongDescription to preserve mixed content via InnerXML, but is provided as part of the model definition.

type PkgMetadata

type PkgMetadata struct {
	XMLName            xml.Name          `xml:"pkgmetadata"`
	Maintainers        []Maintainer      `xml:"maintainer"`
	LongDescription    []LongDescription `xml:"longdescription"`
	Slots              *Slots            `xml:"slots"`
	StabilizeAllArches bool              `xml:"stabilize-allarches,omitempty"`
	Use                []Use             `xml:"use"`
	Upstream           *Upstream         `xml:"upstream"`
}

PkgMetadata represents metadata for a package.

func (*PkgMetadata) String

func (p *PkgMetadata) String() string

type RemoteID

type RemoteID struct {
	// Text of the remote identifier.
	Text string `xml:",chardata"`
	// Type of the remote identifier.
	Type string `xml:"type,attr"`
}

RemoteID represents a remote identifier for a package.

type Slot

type Slot struct {
	// Name of the SLOT.
	Name string `xml:"name,attr"`
	// Text of the slot.
	Text string `xml:",chardata"`
}

Slot represents a particular SLOT.

type Slots

type Slots struct {
	// Slot elements.
	Slot []Slot `xml:"slot"`
	// Subslots of the package.
	Subslots string `xml:"subslots,omitempty"`
	// Lang specifies the language of the slots.
	Lang string `xml:"lang,attr,omitempty"`
}

Slots represents the description of a package's SLOTs.

type URIEntry

type URIEntry struct {
	URL      string
	Filename string
}

func ExtractURIs

func ExtractURIs(content string, variables map[string]string) ([]URIEntry, error)

ExtractURIs parses the ebuild content and extracts SRC_URI entries.

type Upstream

type Upstream struct {
	// Maintainers of the upstream.
	Maintainers []Maintainer `xml:"maintainer"`
	// URL of the upstream changelog.
	Changelog string `xml:"changelog,omitempty"`
	// Documentation URL of the upstream.
	Doc []Doc `xml:"doc"`
	// URL or email address to report bugs.
	BugsTo string `xml:"bugs-to,omitempty"`
	// Remote identifiers for the package.
	RemoteID []RemoteID `xml:"remote-id"`
}

Upstream represents upstream metadata information.

type Use

type Use struct {
	// Flags representing the USE flags.
	Flags []Flag `xml:"flag"`
	// Lang specifies the language of the USE description.
	Lang string `xml:"lang,attr,omitempty"`
}

Use represents the description of USE flags for a package.

Directories

Path Synopsis
cmd
g2 command

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL