helpers

package module
v1.1.1 Latest Latest
Warning

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

Go to latest
Published: Apr 22, 2024 License: Apache-2.0 Imports: 26 Imported by: 53

Documentation

Overview

Package helpers provides generic helper functions

Index

Constants

View Source
const (
	// ReadUser is used for any internal file to be read only
	ReadUser = 0400
	// ReadWriteUser is used for any internal file not normally used by the end user or containing sensitive data
	ReadWriteUser = 0600
	// ReadAllWriteUser is used for any non sensitive file intended to be consumed by the end user
	ReadAllWriteUser = 0644
	// ReadWriteExecuteUser is used for any directory or executable not normally used by the end user or containing sensitive data
	ReadWriteExecuteUser = 0700
	// ReadExecuteAllWriteUser is used for any non sensitive directory or executable intended to be consumed by the end user
	ReadExecuteAllWriteUser = 0755
)
View Source
const (
	OCIURLPrefix = "oci://"

	SGETURLPrefix = "sget://"
	SGETURLScheme = "sget"

	IPV4Localhost = "127.0.0.1"
)

Nonstandard URL schemes or prefixes

Variables

This section is empty.

Functions

func BoolPtr

func BoolPtr(b bool) *bool

BoolPtr returns a pointer to a bool.

func CreateDirectory

func CreateDirectory(path string, mode os.FileMode) error

CreateDirectory creates a directory for the given path and file mode.

func CreateFile

func CreateFile(filepath string) error

CreateFile creates an empty file at the given path.

func CreateParentDirectory

func CreateParentDirectory(destination string) error

CreateParentDirectory creates the parent directory for the given file path.

func CreatePathAndCopy

func CreatePathAndCopy(source string, destination string) error

CreatePathAndCopy creates the parent directory for the given file path and copies the source file to the destination.

func CreateReproducibleTarballFromDir

func CreateReproducibleTarballFromDir(dirPath, dirPrefix, tarballPath string) error

CreateReproducibleTarballFromDir creates a tarball from a directory with stripped headers

func DoHostnamesMatch

func DoHostnamesMatch(url1 string, url2 string) (bool, error)

DoHostnamesMatch returns a boolean indicating if the hostname of two different URLs are the same.

func ExtractBasePathFromURL

func ExtractBasePathFromURL(urlStr string) (string, error)

ExtractBasePathFromURL returns filename from URL string

func Filter

func Filter[T any](ss []T, test func(T) bool) (r []T)

Filter returns a new slice with only the elements that pass the test.

func Find

func Find[T any](ss []T, test func(T) bool) (r T)

Find returns the first element that passes the test.

func First30Last30 added in v1.0.0

func First30Last30(s string) string

First30Last30 returns the source string that has been trimmed to 30 characters at the beginning and end.

func First30last30 deprecated

func First30last30(s string) string

First30last30 returns the source string that has been trimmed to 30 characters at the beginning and end.

Deprecated: Use First30Last30 instead.

func GetAvailablePort

func GetAvailablePort() (int, error)

GetAvailablePort retrieves an available port on the host machine. This delegates the port selection to the golang net library by starting a server and then checking the port that the server is using.

func GetCRCHash

func GetCRCHash(text string) uint32

GetCRCHash returns the computed CRC32 Sum of a given string

func GetCryptoHash

func GetCryptoHash(data io.ReadCloser, hashName crypto.Hash) (string, error)

GetCryptoHash returns the computed SHA256 Sum of a given file

func GetDirSize

func GetDirSize(path string) (int64, error)

GetDirSize walks through all files and directories in the provided path and returns the total size in bytes.

func GetSHA256Hash

func GetSHA256Hash(data io.ReadCloser) (string, error)

GetSHA256Hash returns the computed SHA256 Sum of a given file

func GetSHA256OfFile

func GetSHA256OfFile(filePath string) (string, error)

GetSHA256OfFile returns the SHA256 hash of the provided file.

func InvalidPath

func InvalidPath(path string) bool

InvalidPath checks if the given path is valid (if it is a permissions error it is there we just don't have access)

func IsDir

func IsDir(path string) bool

IsDir returns true if the given path is a directory.

func IsHidden

func IsHidden(name string) bool

IsHidden returns true if the given file name starts with a dot.

func IsNotZeroAndNotEqual

func IsNotZeroAndNotEqual[T any](given T, equal T) bool

IsNotZeroAndNotEqual is used to test if a struct has zero values or is equal values with another struct

func IsOCIURL

func IsOCIURL(source string) bool

IsOCIURL returns true if the given URL is an OCI URL.

func IsTextFile

func IsTextFile(path string) (bool, error)

IsTextFile returns true if the given file is a text file.

func IsTrashBin

func IsTrashBin(dirPath string) bool

IsTrashBin checks if the given directory path corresponds to an operating system's trash bin.

func IsURL

func IsURL(source string) bool

IsURL is a helper function to check if a URL is valid.

func IsValidHostName

func IsValidHostName() bool

IsValidHostName returns a boolean indicating if the hostname of the host machine is valid according to https://www.ietf.org/rfc/rfc1123.txt.

func ListDirectories

func ListDirectories(directory string) ([]string, error)

ListDirectories returns a list of directories in the given directory.

func MatchRegex

func MatchRegex(regex *regexp.Regexp, str string) (func(string) string, error)

MatchRegex wraps a get function around a substring match.

func MergeMapRecursive

func MergeMapRecursive(m1, m2 map[string]interface{}) (r map[string]interface{})

MergeMapRecursive recursively (nestedly) merges map m2 with m1 overwriting common values with m2's values.

func MergeNonZero

func MergeNonZero[T any](original T, overrides T) T

MergeNonZero is used to merge non-zero overrides from one struct into another of the same type

func MergePathAndValueIntoMap added in v1.0.0

func MergePathAndValueIntoMap(m map[string]any, path string, value any) error

MergePathAndValueIntoMap takes a path in dot notation as a string and a value (also as a string for simplicity), then merges this into the provided map. The value can be any type.

func MergeSlices

func MergeSlices[T any](s1, s2 []T, equals EqualFunc[T]) []T

MergeSlices merges two slices, s1 and s2, and returns a new slice containing all elements from s1 and only those elements from s2 that do not exist in s1 based on the provided equal function.

func RandomString

func RandomString(length int) (string, error)

RandomString generates a secure random string of the specified length.

func ReadFileByChunks

func ReadFileByChunks(path string, chunkSizeBytes int) (chunks [][]byte, sha256sum string, err error)

ReadFileByChunks reads a file into multiple chunks by the given size.

func RecursiveFileList

func RecursiveFileList(dir string, pattern *regexp.Regexp, skipHidden bool) (files []string, err error)

RecursiveFileList walks a path with an optional regex pattern and returns a slice of file paths. If skipHidden is true, hidden directories will be skipped.

func RemoveMatches

func RemoveMatches[T any](ss []T, test func(T) bool) (r []T)

RemoveMatches removes the given element from the slice that matches the test.

func Retry

func Retry(fn func() error, attempts int, delay time.Duration, logger func(format string, args ...any)) error

Retry retries a function until it succeeds, the timeout is reached, or the context is done. The delay between attempts increases exponentially as (2^(attempt-1)) * delay. For example, with a delay of one second and three attempts, the timing would be: - First attempt: immediate - Second attempt: after one second - Third attempt: after two seconds

func RetryWithContext added in v1.1.0

func RetryWithContext(ctx context.Context, fn func() error, attempts int, delay time.Duration, logger func(format string, args ...any)) error

RetryWithContext retries a function until it succeeds, the timeout is reached, or the context is done. The delay between attempts increases exponentially as (2^(attempt-1)) * delay. For example, with a delay of one second and three attempts, the timing would be: - First attempt: immediate - Second attempt: after one second - Third attempt: after two seconds

func Reverse

func Reverse[T any](s []T) (r []T)

Reverse returns a new slice with the elements in reverse order.

func SHAsMatch

func SHAsMatch(path, expected string) error

SHAsMatch returns an error if the SHA256 hash of the provided file does not match the expected hash.

func StringToSlice

func StringToSlice(s string) []string

StringToSlice converts a comma-separated string to a slice of lowercase strings.

func TransformAndMergeMap

func TransformAndMergeMap[T any](m1, m2 map[string]T, transform func(string) string) (r map[string]T)

TransformAndMergeMap transforms keys in both maps then merges map m2 with m1 overwriting common values with m2's values.

func TransformMapKeys

func TransformMapKeys[T any](m map[string]T, transform func(string) string) (r map[string]T)

TransformMapKeys takes a map and transforms its keys using the provided function.

func Truncate

func Truncate(text string, length int, invert bool) string

Truncate truncates provided text to the requested length

func Unique

func Unique[T comparable](s []T) (r []T)

Unique returns a new slice with only unique elements.

Types

type ConcurrencyTools

type ConcurrencyTools[P any, E any] struct {
	ProgressChan chan P
	ErrorChan    chan E

	Cancel context.CancelFunc
	// contains filtered or unexported fields
}

ConcurrencyTools is a struct that contains channels and a context for use in concurrent routines

func NewConcurrencyTools

func NewConcurrencyTools[P any, E any](length int) *ConcurrencyTools[P, E]

NewConcurrencyTools creates a new ConcurrencyTools struct

Length is the number of iterations that will be performed concurrently

func (*ConcurrencyTools[P, E]) IsDone

func (ct *ConcurrencyTools[P, E]) IsDone() bool

IsDone returns true if the context is done.

func (*ConcurrencyTools[P, E]) WaitWithProgress

func (ct *ConcurrencyTools[P, E]) WaitWithProgress(onProgress func(P, int), onError func(E) error) error

WaitWithProgress waits for all routines to finish

onProgress is a callback function that is called when a routine sends a progress update

onError is a callback function that is called when a routine sends an error

func (*ConcurrencyTools[P, E]) WaitWithoutProgress

func (ct *ConcurrencyTools[P, E]) WaitWithoutProgress(onError func(E) error) error

WaitWithoutProgress waits for all routines to finish without a progress callback

onError is a callback function that is called when a routine sends an error

type DiscardProgressWriter

type DiscardProgressWriter struct{}

DiscardProgressWriter is a ProgressWriter in which all calls succeed without doing anything Use this or nil or if you don't care about writing progress

func (DiscardProgressWriter) UpdateTitle

func (DiscardProgressWriter) UpdateTitle(_ string)

UpdateTitle doesn't do anything but satisfy implementation

func (DiscardProgressWriter) Write

func (DiscardProgressWriter) Write(p []byte) (int, error)

Write doesn't do anything but satisfy implementation

type EqualFunc

type EqualFunc[T any] func(a, b T) bool

EqualFunc defines a type for a function that determines equality between two elements of type T.

type ProgressWriter

type ProgressWriter interface {
	UpdateTitle(string)
	io.Writer
}

ProgressWriter wraps io.Writer, but also includes an updateTitle function to give the user additional context on what's going on. Useful in OCI for tracking layers

type Transport

type Transport struct {
	Base        http.RoundTripper
	ProgressBar ProgressWriter
}

Transport is an http.RoundTripper that keeps track of the in-flight request and add hooks to report upload progress.

func NewTransport

func NewTransport(base http.RoundTripper, bar ProgressWriter) *Transport

NewTransport returns a custom transport that tracks an http.RoundTripper and a message.ProgressBar.

func (*Transport) RoundTrip

func (t *Transport) RoundTrip(req *http.Request) (*http.Response, error)

RoundTrip is mirrored from retry, but instead of calling retry's private t.roundTrip(), this uses our own which has interactions w/ message.ProgressBar

https://github.com/oras-project/oras-go/blob/main/registry/remote/retry/client.go

Jump to

Keyboard shortcuts

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