Documentation ¶
Overview ¶
Package tools contains other helper functions too small to justify their own package NOTE: Subject to change, do not rely on this package from outside git-lfs source
Set is a modification of https://github.com/deckarep/golang-set The MIT License (MIT) Copyright (c) 2013 Ralph Caraveo (deckarep@gmail.com)
Index ¶
- Constants
- func ClampInt(n, min, max int) int
- func CleanPaths(paths, delim string) (cleaned []string)
- func CloneFile(writer io.Writer, reader io.Reader) (bool, error)
- func CopyWithCallback(writer io.Writer, reader io.Reader, totalSize int64, cb CopyCallback) (int64, error)
- func DirExists(path string) bool
- func FastWalkGitRepo(rootDir string, cb FastWalkCallback)
- func FileExists(path string) bool
- func FileExistsOfSize(path string, sz int64) bool
- func FileOrDirExists(path string) (exists bool, isDir bool)
- func Getwd() (dir string, err error)
- func Indent(str string) string
- func IsExpiredAtOrIn(from time.Time, until time.Duration, at time.Time, in time.Duration) (time.Time, bool)
- func Ljust(strs []string) []string
- func Longest(strs []string) string
- func MaxInt(a, b int) int
- func MaxInt64(a, b int64) int64
- func MinInt(a, b int) int
- func MinInt64(a, b int64) int64
- func NewLfsContentHash() hash.Hash
- func NewRetriableReader(r io.Reader) io.Reader
- func QuotedFields(s string) []string
- func RenameFileCopyPermissions(srcfile, destfile string) error
- func ResolveSymlinks(path string) string
- func Rjust(strs []string) []string
- func SetFileWriteFlag(path string, writeEnabled bool) error
- func Spool(to io.Writer, from io.Reader, dir string) (n int64, err error)
- func TimeAtOrIn(from, at time.Time, in time.Duration) time.Time
- func TranslateCygwinPath(path string) (string, error)
- func Undent(str string) string
- func VerifyFileHash(oid, path string) error
- type BaseChannelWrapper
- type BodyWithCallback
- type CallbackReader
- type ChannelWrapper
- type CopyCallback
- type FastWalkCallback
- type HashingReader
- type OrderedSet
- func (s *OrderedSet) Add(i string) bool
- func (s *OrderedSet) Cardinality() int
- func (s *OrderedSet) Clear()
- func (s *OrderedSet) Clone() *OrderedSet
- func (s *OrderedSet) Contains(i string) bool
- func (s *OrderedSet) ContainsAll(i ...string) bool
- func (s *OrderedSet) Difference(other *OrderedSet) *OrderedSet
- func (s *OrderedSet) Equal(other *OrderedSet) bool
- func (s *OrderedSet) Intersect(other *OrderedSet) *OrderedSet
- func (s *OrderedSet) IsSubset(other *OrderedSet) bool
- func (s *OrderedSet) IsSuperset(other *OrderedSet) bool
- func (s *OrderedSet) Iter() <-chan string
- func (s *OrderedSet) Remove(i string)
- func (s *OrderedSet) SymmetricDifference(other *OrderedSet) *OrderedSet
- func (s *OrderedSet) Union(other *OrderedSet) *OrderedSet
- type ReadSeekCloser
- type RetriableReader
- type StringSet
- func (set StringSet) Add(i string) bool
- func (set StringSet) Cardinality() int
- func (set *StringSet) Clear()
- func (set StringSet) Clone() StringSet
- func (set StringSet) Contains(i string) bool
- func (set StringSet) ContainsAll(i ...string) bool
- func (set StringSet) Difference(other StringSet) StringSet
- func (set StringSet) Equal(other StringSet) bool
- func (set StringSet) Intersect(other StringSet) StringSet
- func (set StringSet) IsSubset(other StringSet) bool
- func (set StringSet) IsSuperset(other StringSet) bool
- func (set StringSet) Iter() <-chan string
- func (set StringSet) Remove(i string)
- func (set StringSet) SymmetricDifference(other StringSet) StringSet
- func (set StringSet) Union(other StringSet) StringSet
- type SyncWriter
Constants ¶
const (
BtrfsIocClone = C.BTRFS_IOC_CLONE
)
Variables ¶
This section is empty.
Functions ¶
func CleanPaths ¶
CleanPaths splits the given `paths` argument by the delimiter argument, and then "cleans" that path according to the path.Clean function (see https://golang.org/pkg/path#Clean). Note always cleans to '/' path separators regardless of platform (git friendly)
func CopyWithCallback ¶
func CopyWithCallback(writer io.Writer, reader io.Reader, totalSize int64, cb CopyCallback) (int64, error)
CopyWithCallback copies reader to writer while performing a progress callback
func FastWalkGitRepo ¶
func FastWalkGitRepo(rootDir string, cb FastWalkCallback)
FastWalkGitRepo is a more optimal implementation of filepath.Walk for a Git repo. The callback guaranteed to be called sequentially. The function returns once all files and errors have triggered callbacks. It differs in the following ways:
- Uses goroutines to parallelise large dirs and descent into subdirs
- Does not provide sorted output; parents will always be before children but there are no other guarantees. Use parentDir argument in the callback to determine absolute path rather than tracking it yourself
- Automatically ignores any .git directories
- Respects .gitignore contents and skips ignored files/dirs
rootDir - Absolute path to the top of the repository working directory
func FileExists ¶
FileExists determines if a file (NOT dir) exists.
func FileExistsOfSize ¶
FileExistsOfSize determines if a file exists and is of a specific size.
func FileOrDirExists ¶
FileOrDirExists determines if a file/dir exists, returns IsDir() results too.
func Indent ¶
Indent returns a string which prepends "\t" TAB characters to the beginning of each line in the given string "str".
func IsExpiredAtOrIn ¶
func IsExpiredAtOrIn(from time.Time, until time.Duration, at time.Time, in time.Duration) (time.Time, bool)
IsExpiredAtOrIn returns whether or not the result of calling TimeAtOrIn is "expired" within "until" units of time from now.
func Ljust ¶
Ljust returns a copied string slice where each element is left justified to match the width of the longest element in the set.
func Longest ¶
Longest returns the longest element in the string slice in O(n) time and O(1) space. If strs is empty or nil, an empty string will be returned.
func NewLfsContentHash ¶
Get a new Hash instance of the type used to hash LFS content
func QuotedFields ¶
QuotedFields is an alternative to strings.Fields (see: https://golang.org/pkg/strings#Fields) that respects spaces between matching pairs of quotation delimeters.
For instance, the quoted fields of the string "foo bar 'baz etc'" would be:
[]string{"foo", "bar", "baz etc"}
Whereas the same argument given to strings.Fields, would return:
[]string{"foo", "bar", "'baz", "etc'"}
func RenameFileCopyPermissions ¶
RenameFileCopyPermissions moves srcfile to destfile, replacing destfile if necessary and also copying the permissions of destfile if it already exists
func ResolveSymlinks ¶
ResolveSymlinks ensures that if the path supplied is a symlink, it is resolved to the actual concrete path
func Rjust ¶
Rjust returns a copied string slice where each element is right justified to match the width of the longest element in the set.
func SetFileWriteFlag ¶
SetFileWriteFlag changes write permissions on a file Used to make a file read-only or not. When writeEnabled = false, the write bit is removed for all roles. When writeEnabled = true, the behaviour is different per platform: On Mac & Linux, the write bit is set only on the owner as per default umask. All other bits are unaffected. On Windows, all the write bits are set since Windows doesn't support Unix permissions.
func Spool ¶
Spool spools the contents from 'from' to 'to' by buffering the entire contents of 'from' into a temprorary file created in the directory "dir". That buffer is held in memory until the file grows to larger than 'memoryBufferLimit`, then the remaining contents are spooled to disk.
The temporary file is cleaned up after the copy is complete.
The number of bytes written to "to", as well as any error encountered are returned.
func TimeAtOrIn ¶
TimeAtOrIn returns either "at", or the "in" duration added to the current time. TimeAtOrIn prefers to add a duration rather than return the "at" parameter.
func TranslateCygwinPath ¶
func VerifyFileHash ¶
VerifyFileHash reads a file and verifies whether the SHA is correct Returns an error if there is a problem
Types ¶
type BaseChannelWrapper ¶
type BaseChannelWrapper struct {
// contains filtered or unexported fields
}
Base implementation of channel wrapper to just deal with errors
func NewBaseChannelWrapper ¶
func NewBaseChannelWrapper(errChan <-chan error) *BaseChannelWrapper
func (*BaseChannelWrapper) Wait ¶
func (w *BaseChannelWrapper) Wait() error
type BodyWithCallback ¶
type BodyWithCallback struct { ReadSeekCloser // contains filtered or unexported fields }
func NewBodyWithCallback ¶
func NewBodyWithCallback(body ReadSeekCloser, totalSize int64, cb CopyCallback) *BodyWithCallback
func NewByteBodyWithCallback ¶
func NewByteBodyWithCallback(by []byte, totalSize int64, cb CopyCallback) *BodyWithCallback
func (*BodyWithCallback) Read ¶
func (r *BodyWithCallback) Read(p []byte) (int, error)
Read wraps the underlying Reader's "Read" method. It also captures the number of bytes read, and calls the callback.
func (*BodyWithCallback) ResetProgress ¶
func (r *BodyWithCallback) ResetProgress() error
ResetProgress calls the callback with a negative read size equal to the total number of bytes read so far, effectively "resetting" the progress.
type CallbackReader ¶
type CallbackReader struct { C CopyCallback TotalSize int64 ReadSize int64 io.Reader }
type ChannelWrapper ¶
type ChannelWrapper interface { // Call this after processing results channel to check for async errors Wait() error }
Interface for all types of wrapper around a channel of results and an error channel Implementors will expose a type-specific channel for results Call the Wait() function after processing the results channel to catch any errors that occurred during the async processing
type CopyCallback ¶
type FastWalkCallback ¶
FastWalkCallback is the signature for the callback given to FastWalkGitRepo()
type HashingReader ¶
type HashingReader struct {
// contains filtered or unexported fields
}
HashingReader wraps a reader and calculates the hash of the data as it is read
func NewHashingReader ¶
func NewHashingReader(r io.Reader) *HashingReader
func NewHashingReaderPreloadHash ¶
func NewHashingReaderPreloadHash(r io.Reader, hash hash.Hash) *HashingReader
func (*HashingReader) Hash ¶
func (r *HashingReader) Hash() string
type OrderedSet ¶
type OrderedSet struct {
// contains filtered or unexported fields
}
OrderedSet is a unique set of strings that maintains insertion order.
func NewOrderedSet ¶
func NewOrderedSet() *OrderedSet
NewOrderedSet creates an ordered set with no values.
func NewOrderedSetFromSlice ¶
func NewOrderedSetFromSlice(s []string) *OrderedSet
NewOrderedSetFromSlice returns a new ordered set with the elements given in the slice "s".
func NewOrderedSetWithCapacity ¶
func NewOrderedSetWithCapacity(capacity int) *OrderedSet
NewOrderedSetWithCapacity creates a new ordered set with no values. The returned ordered set can be appended to "capacity" number of times before it grows internally.
func (*OrderedSet) Add ¶
func (s *OrderedSet) Add(i string) bool
Add adds the given element "i" to the ordered set, unless the element is already present. It returns whether or not the element was added.
func (*OrderedSet) Cardinality ¶
func (s *OrderedSet) Cardinality() int
Cardinality returns the cardinality of this set.
func (*OrderedSet) Clone ¶
func (s *OrderedSet) Clone() *OrderedSet
Clone returns a deep copy of this set.
func (*OrderedSet) Contains ¶
func (s *OrderedSet) Contains(i string) bool
Contains returns whether or not the given "i" is contained in this ordered set. It is a constant-time operation.
func (*OrderedSet) ContainsAll ¶
func (s *OrderedSet) ContainsAll(i ...string) bool
ContainsAll returns whether or not all of the given items in "i" are present in the ordered set.
func (*OrderedSet) Difference ¶
func (s *OrderedSet) Difference(other *OrderedSet) *OrderedSet
Difference returns the elements that are in this set, but not included in other.
func (*OrderedSet) Equal ¶
func (s *OrderedSet) Equal(other *OrderedSet) bool
Equal returns whether this element has the same number, identity and ordering elements as given in "other".
func (*OrderedSet) Intersect ¶
func (s *OrderedSet) Intersect(other *OrderedSet) *OrderedSet
Intersect returns the elements that are in both this set and then given "ordered" set. It is an O(min(n, m)) (in other words, O(n)) operation.
func (*OrderedSet) IsSubset ¶
func (s *OrderedSet) IsSubset(other *OrderedSet) bool
IsSubset returns whether other is a subset of this ordered set. In other words, it returns whether or not all of the elements in "other" are also present in this set.
func (*OrderedSet) IsSuperset ¶
func (s *OrderedSet) IsSuperset(other *OrderedSet) bool
IsSuperset returns whether or not this set is a superset of "other". In other words, it returns whether or not all of the elements in this set are also in the set "other".
func (*OrderedSet) Iter ¶
func (s *OrderedSet) Iter() <-chan string
Iter returns a channel which yields the elements in this set in insertion order.
func (*OrderedSet) Remove ¶
func (s *OrderedSet) Remove(i string)
Remove removes the given element "i" from this set.
func (*OrderedSet) SymmetricDifference ¶
func (s *OrderedSet) SymmetricDifference(other *OrderedSet) *OrderedSet
SymmetricDifference returns the elements that are not present in both sets.
func (*OrderedSet) Union ¶
func (s *OrderedSet) Union(other *OrderedSet) *OrderedSet
Union returns a union of this set with the given set "other". It returns the items that are in either set while maintaining uniqueness constraints. It preserves ordered within each set, and orders the elements in this set before the elements in "other".
It is an O(n+m) operation.
type ReadSeekCloser ¶
type ReadSeekCloser interface { io.Seeker io.ReadCloser }
prevent import cycle
func NewByteBody ¶
func NewByteBody(by []byte) ReadSeekCloser
type RetriableReader ¶
type RetriableReader struct {
// contains filtered or unexported fields
}
RetriableReader wraps a error response of reader as RetriableError()
type StringSet ¶
type StringSet map[string]struct{}
The primary type that represents a set
func NewStringSetFromSlice ¶
Creates and returns a reference to a set from an existing slice
func NewStringSetWithCapacity ¶
Creates and returns a reference to an empty set with a capacity.
func (StringSet) Cardinality ¶
Cardinality returns how many items are currently in the set.
func (StringSet) ContainsAll ¶
Determines if the given items are all in the set
func (StringSet) Difference ¶
Returns a new set with items in the current set but not in the other set
func (StringSet) Equal ¶
Equal determines if two sets are equal to each other. If they both are the same size and have the same items they are considered equal. Order of items is not relevent for sets to be equal.
func (StringSet) IsSuperset ¶
Determines if every item of this set is in the other set.
func (StringSet) SymmetricDifference ¶
Returns a new set with items in the current set or the other set but not in both.
type SyncWriter ¶
type SyncWriter struct {
// contains filtered or unexported fields
}
SyncWriter provides a wrapper around an io.Writer that synchronizes all write after they occur, if the underlying writer supports synchronization.
func NewSyncWriter ¶
func NewSyncWriter(w io.Writer) *SyncWriter
NewSyncWriter returns a new instance of the *SyncWriter that sends all writes to the given io.Writer.
func (*SyncWriter) Close ¶
func (w *SyncWriter) Close() error
Close will call Close() on the underlying file
func (*SyncWriter) Write ¶
func (w *SyncWriter) Write(b []byte) error
Write will write to the file and perform a Sync() if writing succeeds.