cache

package
v0.8.0 Latest Latest
Warning

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

Go to latest
Published: Nov 20, 2022 License: GPL-3.0 Imports: 27 Imported by: 8

Documentation

Overview

Package cache contains a caching layer on top of the low-level bug and identity functions to provide efficient querying, filtering, sorting.

Index

Constants

This section is empty.

Variables

View Source
var ErrNoMatchingOp = fmt.Errorf("no matching operation found")

Functions

This section is empty.

Types

type BugCache

type BugCache struct {
	// contains filtered or unexported fields
}

BugCache is a wrapper around a Bug. It provides multiple functions:

1. Provide a higher level API to use than the raw API from Bug. 2. Maintain an up-to-date Snapshot available. 3. Deal with concurrency.

func NewBugCache

func NewBugCache(repoCache *RepoCache, b *bug.Bug) *BugCache

func (*BugCache) AddComment

func (c *BugCache) AddComment(message string) (entity.CombinedId, *bug.AddCommentOperation, error)

func (*BugCache) AddCommentRaw

func (c *BugCache) AddCommentRaw(author *IdentityCache, unixTime int64, message string, files []repository.Hash, metadata map[string]string) (entity.CombinedId, *bug.AddCommentOperation, error)

func (*BugCache) AddCommentWithFiles

func (c *BugCache) AddCommentWithFiles(message string, files []repository.Hash) (entity.CombinedId, *bug.AddCommentOperation, error)

func (*BugCache) ChangeLabels

func (c *BugCache) ChangeLabels(added []string, removed []string) ([]bug.LabelChangeResult, *bug.LabelChangeOperation, error)

func (*BugCache) ChangeLabelsRaw

func (c *BugCache) ChangeLabelsRaw(author *IdentityCache, unixTime int64, added []string, removed []string, metadata map[string]string) ([]bug.LabelChangeResult, *bug.LabelChangeOperation, error)

func (*BugCache) Close

func (c *BugCache) Close() (*bug.SetStatusOperation, error)

func (*BugCache) CloseRaw

func (c *BugCache) CloseRaw(author *IdentityCache, unixTime int64, metadata map[string]string) (*bug.SetStatusOperation, error)

func (*BugCache) Commit

func (c *BugCache) Commit() error

func (*BugCache) CommitAsNeeded

func (c *BugCache) CommitAsNeeded() error

func (*BugCache) EditComment

func (c *BugCache) EditComment(target entity.CombinedId, message string) (*bug.EditCommentOperation, error)

func (*BugCache) EditCommentRaw

func (c *BugCache) EditCommentRaw(author *IdentityCache, unixTime int64, target entity.CombinedId, message string, metadata map[string]string) (*bug.EditCommentOperation, error)

func (*BugCache) EditCreateComment

func (c *BugCache) EditCreateComment(body string) (entity.CombinedId, *bug.EditCommentOperation, error)

EditCreateComment is a convenience function to edit the body of a bug (the first comment)

func (*BugCache) EditCreateCommentRaw

func (c *BugCache) EditCreateCommentRaw(author *IdentityCache, unixTime int64, body string, metadata map[string]string) (entity.CombinedId, *bug.EditCommentOperation, error)

EditCreateCommentRaw is a convenience function to edit the body of a bug (the first comment)

func (*BugCache) ForceChangeLabels

func (c *BugCache) ForceChangeLabels(added []string, removed []string) (*bug.LabelChangeOperation, error)

func (*BugCache) ForceChangeLabelsRaw

func (c *BugCache) ForceChangeLabelsRaw(author *IdentityCache, unixTime int64, added []string, removed []string, metadata map[string]string) (*bug.LabelChangeOperation, error)

func (*BugCache) Id

func (c *BugCache) Id() entity.Id

func (*BugCache) NeedCommit

func (c *BugCache) NeedCommit() bool

func (*BugCache) Open

func (c *BugCache) Open() (*bug.SetStatusOperation, error)

func (*BugCache) OpenRaw

func (c *BugCache) OpenRaw(author *IdentityCache, unixTime int64, metadata map[string]string) (*bug.SetStatusOperation, error)

func (*BugCache) ResolveOperationWithMetadata

func (c *BugCache) ResolveOperationWithMetadata(key string, value string) (entity.Id, error)

ResolveOperationWithMetadata will find an operation that has the matching metadata

func (*BugCache) SetMetadata

func (c *BugCache) SetMetadata(target entity.Id, newMetadata map[string]string) (*dag.SetMetadataOperation[*bug.Snapshot], error)

func (*BugCache) SetMetadataRaw

func (c *BugCache) SetMetadataRaw(author *IdentityCache, unixTime int64, target entity.Id, newMetadata map[string]string) (*dag.SetMetadataOperation[*bug.Snapshot], error)

func (*BugCache) SetTitle

func (c *BugCache) SetTitle(title string) (*bug.SetTitleOperation, error)

func (*BugCache) SetTitleRaw

func (c *BugCache) SetTitleRaw(author *IdentityCache, unixTime int64, title string, metadata map[string]string) (*bug.SetTitleOperation, error)

func (*BugCache) Snapshot

func (c *BugCache) Snapshot() *bug.Snapshot

type BugExcerpt

type BugExcerpt struct {
	Id entity.Id

	CreateLamportTime lamport.Time
	EditLamportTime   lamport.Time
	CreateUnixTime    int64
	EditUnixTime      int64

	AuthorId     entity.Id
	Status       common.Status
	Labels       []bug.Label
	Title        string
	LenComments  int
	Actors       []entity.Id
	Participants []entity.Id

	CreateMetadata map[string]string
}

BugExcerpt hold a subset of the bug values to be able to sort and filter bugs efficiently without having to read and compile each raw bugs.

func NewBugExcerpt

func NewBugExcerpt(b bug.Interface, snap *bug.Snapshot) *BugExcerpt

func (*BugExcerpt) CreateTime added in v0.8.0

func (b *BugExcerpt) CreateTime() time.Time

func (*BugExcerpt) EditTime added in v0.8.0

func (b *BugExcerpt) EditTime() time.Time

type BugsByCreationTime

type BugsByCreationTime []*BugExcerpt

func (BugsByCreationTime) Len

func (b BugsByCreationTime) Len() int

func (BugsByCreationTime) Less

func (b BugsByCreationTime) Less(i, j int) bool

func (BugsByCreationTime) Swap

func (b BugsByCreationTime) Swap(i, j int)

type BugsByEditTime

type BugsByEditTime []*BugExcerpt

func (BugsByEditTime) Len

func (b BugsByEditTime) Len() int

func (BugsByEditTime) Less

func (b BugsByEditTime) Less(i, j int) bool

func (BugsByEditTime) Swap

func (b BugsByEditTime) Swap(i, j int)

type BugsById

type BugsById []*BugExcerpt

func (BugsById) Len

func (b BugsById) Len() int

func (BugsById) Less

func (b BugsById) Less(i, j int) bool

func (BugsById) Swap

func (b BugsById) Swap(i, j int)

type Filter

type Filter func(excerpt *BugExcerpt, resolver resolver) bool

Filter is a predicate that match a subset of bugs

func ActorFilter

func ActorFilter(query string) Filter

ActorFilter return a Filter that match a bug actor

func AuthorFilter

func AuthorFilter(query string) Filter

AuthorFilter return a Filter that match a bug author

func LabelFilter

func LabelFilter(label string) Filter

LabelFilter return a Filter that match a label

func MetadataFilter added in v0.8.0

func MetadataFilter(pair query.StringPair) Filter

MetadataFilter return a Filter that match a bug metadata at creation time

func NoLabelFilter

func NoLabelFilter() Filter

NoLabelFilter return a Filter that match the absence of labels

func ParticipantFilter

func ParticipantFilter(query string) Filter

ParticipantFilter return a Filter that match a bug participant

func StatusFilter

func StatusFilter(status common.Status) Filter

StatusFilter return a Filter that match a bug status

func TitleFilter

func TitleFilter(query string) Filter

TitleFilter return a Filter that match if the title contains the given query

type IdentityById

type IdentityById []*IdentityExcerpt

func (IdentityById) Len

func (b IdentityById) Len() int

func (IdentityById) Less

func (b IdentityById) Less(i, j int) bool

func (IdentityById) Swap

func (b IdentityById) Swap(i, j int)

type IdentityCache

type IdentityCache struct {
	*identity.Identity
	// contains filtered or unexported fields
}

IdentityCache is a wrapper around an Identity for caching.

func NewIdentityCache

func NewIdentityCache(repoCache *RepoCache, id *identity.Identity) *IdentityCache

func (*IdentityCache) Commit

func (i *IdentityCache) Commit() error

func (*IdentityCache) CommitAsNeeded

func (i *IdentityCache) CommitAsNeeded() error

func (*IdentityCache) Mutate

func (i *IdentityCache) Mutate(repo repository.RepoClock, f func(*identity.Mutator)) error

type IdentityExcerpt

type IdentityExcerpt struct {
	Id entity.Id

	Name              string
	Login             string
	ImmutableMetadata map[string]string
}

IdentityExcerpt hold a subset of the identity values to be able to sort and filter identities efficiently without having to read and compile each raw identity.

func NewIdentityExcerpt

func NewIdentityExcerpt(i *identity.Identity) *IdentityExcerpt

func (*IdentityExcerpt) DisplayName

func (i *IdentityExcerpt) DisplayName() string

DisplayName return a non-empty string to display, representing the identity, based on the non-empty values.

func (*IdentityExcerpt) Match

func (i *IdentityExcerpt) Match(query string) bool

Match matches a query with the identity name, login and ID prefixes

type LRUIdCache added in v0.8.0

type LRUIdCache struct {
	// contains filtered or unexported fields
}

func NewLRUIdCache added in v0.8.0

func NewLRUIdCache() *LRUIdCache

func (*LRUIdCache) Add added in v0.8.0

func (c *LRUIdCache) Add(id entity.Id) bool

func (*LRUIdCache) Contains added in v0.8.0

func (c *LRUIdCache) Contains(id entity.Id) bool

func (*LRUIdCache) Get added in v0.8.0

func (c *LRUIdCache) Get(id entity.Id) bool

func (*LRUIdCache) GetOldest added in v0.8.0

func (c *LRUIdCache) GetOldest() (entity.Id, bool)

func (*LRUIdCache) GetOldestToNewest added in v0.8.0

func (c *LRUIdCache) GetOldestToNewest() (ids []entity.Id)

func (*LRUIdCache) Len added in v0.8.0

func (c *LRUIdCache) Len() int

func (*LRUIdCache) Remove added in v0.8.0

func (c *LRUIdCache) Remove(id entity.Id) bool

type LegacyAuthorExcerpt

type LegacyAuthorExcerpt struct {
	Name  string
	Login string
}

identity.Bare data are directly embedded in the bug excerpt

func (LegacyAuthorExcerpt) DisplayName

func (l LegacyAuthorExcerpt) DisplayName() string

type Matcher

type Matcher struct {
	Status      []Filter
	Author      []Filter
	Metadata    []Filter
	Actor       []Filter
	Participant []Filter
	Label       []Filter
	Title       []Filter
	NoFilters   []Filter
}

Matcher is a collection of Filter that implement a complex filter

func (*Matcher) Match

func (f *Matcher) Match(excerpt *BugExcerpt, resolver resolver) bool

Match check if a bug match the set of filters

type MultiRepoCache

type MultiRepoCache struct {
	// contains filtered or unexported fields
}

MultiRepoCache is the root cache, holding multiple RepoCache.

func NewMultiRepoCache

func NewMultiRepoCache() *MultiRepoCache

func (*MultiRepoCache) Close

func (c *MultiRepoCache) Close() error

Close will do anything that is needed to close the cache properly

func (*MultiRepoCache) DefaultRepo

func (c *MultiRepoCache) DefaultRepo() (*RepoCache, error)

DefaultRepo retrieve the default repository

func (*MultiRepoCache) RegisterDefaultRepository

func (c *MultiRepoCache) RegisterDefaultRepository(repo repository.ClockedRepo) (*RepoCache, error)

RegisterDefaultRepository register a unnamed repository. Use this for mono-repo setup

func (*MultiRepoCache) RegisterRepository

func (c *MultiRepoCache) RegisterRepository(ref string, repo repository.ClockedRepo) (*RepoCache, error)

RegisterRepository register a named repository. Use this for multi-repo setup

func (*MultiRepoCache) ResolveRepo

func (c *MultiRepoCache) ResolveRepo(ref string) (*RepoCache, error)

ResolveRepo retrieve a repository with a reference

type RepoCache

type RepoCache struct {
	// contains filtered or unexported fields
}

RepoCache is a cache for a Repository. This cache has multiple functions:

  1. After being loaded, a Bug is kept in memory in the cache, allowing for fast access later.
  2. The cache maintain in memory and on disk a pre-digested excerpt for each bug, allowing for fast querying the whole set of bugs without having to load them individually.
  3. The cache guarantee that a single instance of a Bug is loaded at once, avoiding loss of data that we could have with multiple copies in the same process.
  4. The same way, the cache maintain in memory a single copy of the loaded identities.

The cache also protect the on-disk data by locking the git repository for its own usage, by writing a lock file. Of course, normal git operations are not affected, only git-bug related one.

func NewNamedRepoCache

func NewNamedRepoCache(r repository.ClockedRepo, name string) (*RepoCache, error)

func NewRepoCache

func NewRepoCache(r repository.ClockedRepo) (*RepoCache, error)

func (*RepoCache) AllBugsIds

func (c *RepoCache) AllBugsIds() []entity.Id

AllBugsIds return all known bug ids

func (*RepoCache) AllIdentityIds

func (c *RepoCache) AllIdentityIds() []entity.Id

AllIdentityIds return all known identity ids

func (*RepoCache) AnyConfig added in v0.8.0

func (c *RepoCache) AnyConfig() repository.ConfigRead

AnyConfig give access to a merged local/global configuration

func (*RepoCache) Close

func (c *RepoCache) Close() error

func (*RepoCache) Fetch

func (c *RepoCache) Fetch(remote string) (string, error)

Fetch retrieve updates from a remote This does not change the local bugs or identities state

func (*RepoCache) GetCoreEditor

func (c *RepoCache) GetCoreEditor() (string, error)

GetCoreEditor returns the name of the editor that the user has used to configure git.

func (*RepoCache) GetRemotes

func (c *RepoCache) GetRemotes() (map[string]string, error)

GetRemotes returns the configured remotes repositories.

func (*RepoCache) GetUserEmail

func (c *RepoCache) GetUserEmail() (string, error)

GetUserEmail returns the email address that the user has used to configure git.

func (*RepoCache) GetUserIdentity

func (c *RepoCache) GetUserIdentity() (*IdentityCache, error)

func (*RepoCache) GetUserIdentityExcerpt

func (c *RepoCache) GetUserIdentityExcerpt() (*IdentityExcerpt, error)

func (*RepoCache) GetUserName

func (c *RepoCache) GetUserName() (string, error)

GetUserName returns the name the user has used to configure git

func (*RepoCache) GlobalConfig

func (c *RepoCache) GlobalConfig() repository.Config

GlobalConfig give access to the global scoped configuration

func (*RepoCache) IsUserIdentitySet

func (c *RepoCache) IsUserIdentitySet() (bool, error)

func (*RepoCache) Keyring added in v0.8.0

func (c *RepoCache) Keyring() repository.Keyring

Keyring give access to a user-wide storage for secrets

func (*RepoCache) LocalConfig

func (c *RepoCache) LocalConfig() repository.Config

LocalConfig give access to the repository scoped configuration

func (*RepoCache) LocalStorage added in v0.8.0

func (c *RepoCache) LocalStorage() billy.Filesystem

LocalStorage return a billy.Filesystem giving access to $RepoPath/.git/git-bug

func (*RepoCache) MergeAll

func (c *RepoCache) MergeAll(remote string) <-chan entity.MergeResult

MergeAll will merge all the available remote bug and identities

func (*RepoCache) Name

func (c *RepoCache) Name() string

func (*RepoCache) NewBug

func (c *RepoCache) NewBug(title string, message string) (*BugCache, *bug.CreateOperation, error)

NewBug create a new bug The new bug is written in the repository (commit)

func (*RepoCache) NewBugRaw

func (c *RepoCache) NewBugRaw(author *IdentityCache, unixTime int64, title string, message string, files []repository.Hash, metadata map[string]string) (*BugCache, *bug.CreateOperation, error)

NewBugRaw create a new bug with attached files for the message, as well as metadata for the Create operation. The new bug is written in the repository (commit)

func (*RepoCache) NewBugWithFiles

func (c *RepoCache) NewBugWithFiles(title string, message string, files []repository.Hash) (*BugCache, *bug.CreateOperation, error)

NewBugWithFiles create a new bug with attached files for the message The new bug is written in the repository (commit)

func (*RepoCache) NewIdentity

func (c *RepoCache) NewIdentity(name string, email string) (*IdentityCache, error)

NewIdentity create a new identity The new identity is written in the repository (commit)

func (*RepoCache) NewIdentityFromGitUser

func (c *RepoCache) NewIdentityFromGitUser() (*IdentityCache, error)

func (*RepoCache) NewIdentityFromGitUserRaw

func (c *RepoCache) NewIdentityFromGitUserRaw(metadata map[string]string) (*IdentityCache, error)

func (*RepoCache) NewIdentityFull

func (c *RepoCache) NewIdentityFull(name string, email string, login string, avatarUrl string, keys []*identity.Key) (*IdentityCache, error)

NewIdentityFull create a new identity The new identity is written in the repository (commit)

func (*RepoCache) NewIdentityRaw

func (c *RepoCache) NewIdentityRaw(name string, email string, login string, avatarUrl string, keys []*identity.Key, metadata map[string]string) (*IdentityCache, error)

func (*RepoCache) Pull

func (c *RepoCache) Pull(remote string) error

Pull will do a Fetch + MergeAll This function will return an error if a merge fail

func (*RepoCache) Push

func (c *RepoCache) Push(remote string) (string, error)

Push update a remote with the local changes

func (*RepoCache) QueryBugs

func (c *RepoCache) QueryBugs(q *query.Query) ([]entity.Id, error)

QueryBugs return the id of all Bug matching the given Query

func (*RepoCache) ReadData added in v0.8.0

func (c *RepoCache) ReadData(hash repository.Hash) ([]byte, error)

ReadData will attempt to read arbitrary data from the given hash

func (*RepoCache) RemoveBug added in v0.8.0

func (c *RepoCache) RemoveBug(prefix string) error

RemoveBug removes a bug from the cache and repo given a bug id prefix

func (*RepoCache) ResolveBug

func (c *RepoCache) ResolveBug(id entity.Id) (*BugCache, error)

ResolveBug retrieve a bug matching the exact given id

func (*RepoCache) ResolveBugCreateMetadata

func (c *RepoCache) ResolveBugCreateMetadata(key string, value string) (*BugCache, error)

ResolveBugCreateMetadata retrieve a bug that has the exact given metadata on its Create operation, that is, the first operation. It fails if multiple bugs match.

func (*RepoCache) ResolveBugExcerpt

func (c *RepoCache) ResolveBugExcerpt(id entity.Id) (*BugExcerpt, error)

ResolveBugExcerpt retrieve a BugExcerpt matching the exact given id

func (*RepoCache) ResolveBugExcerptMatcher

func (c *RepoCache) ResolveBugExcerptMatcher(f func(*BugExcerpt) bool) (*BugExcerpt, error)

func (*RepoCache) ResolveBugExcerptPrefix

func (c *RepoCache) ResolveBugExcerptPrefix(prefix string) (*BugExcerpt, error)

ResolveBugExcerptPrefix retrieve a BugExcerpt matching an id prefix. It fails if multiple bugs match.

func (*RepoCache) ResolveBugMatcher

func (c *RepoCache) ResolveBugMatcher(f func(*BugExcerpt) bool) (*BugCache, error)

func (*RepoCache) ResolveBugPrefix

func (c *RepoCache) ResolveBugPrefix(prefix string) (*BugCache, error)

ResolveBugPrefix retrieve a bug matching an id prefix. It fails if multiple bugs match.

func (*RepoCache) ResolveComment added in v0.8.0

func (c *RepoCache) ResolveComment(prefix string) (*BugCache, entity.CombinedId, error)

ResolveComment search for a Bug/Comment combination matching the merged bug/comment Id prefix. Returns the Bug containing the Comment and the Comment's Id.

func (*RepoCache) ResolveIdentity

func (c *RepoCache) ResolveIdentity(id entity.Id) (*IdentityCache, error)

ResolveIdentity retrieve an identity matching the exact given id

func (*RepoCache) ResolveIdentityExcerpt

func (c *RepoCache) ResolveIdentityExcerpt(id entity.Id) (*IdentityExcerpt, error)

ResolveIdentityExcerpt retrieve a IdentityExcerpt matching the exact given id

func (*RepoCache) ResolveIdentityExcerptMatcher

func (c *RepoCache) ResolveIdentityExcerptMatcher(f func(*IdentityExcerpt) bool) (*IdentityExcerpt, error)

func (*RepoCache) ResolveIdentityExcerptPrefix

func (c *RepoCache) ResolveIdentityExcerptPrefix(prefix string) (*IdentityExcerpt, error)

ResolveIdentityExcerptPrefix retrieve a IdentityExcerpt matching an id prefix. It fails if multiple identities match.

func (*RepoCache) ResolveIdentityImmutableMetadata

func (c *RepoCache) ResolveIdentityImmutableMetadata(key string, value string) (*IdentityCache, error)

ResolveIdentityImmutableMetadata retrieve an Identity that has the exact given metadata on one of it's version. If multiple version have the same key, the first defined take precedence.

func (*RepoCache) ResolveIdentityMatcher

func (c *RepoCache) ResolveIdentityMatcher(f func(*IdentityExcerpt) bool) (*IdentityCache, error)

func (*RepoCache) ResolveIdentityPrefix

func (c *RepoCache) ResolveIdentityPrefix(prefix string) (*IdentityCache, error)

ResolveIdentityPrefix retrieve an Identity matching an id prefix. It fails if multiple identities match.

func (*RepoCache) SetUserIdentity

func (c *RepoCache) SetUserIdentity(i *IdentityCache) error

func (*RepoCache) StoreData added in v0.8.0

func (c *RepoCache) StoreData(data []byte) (repository.Hash, error)

StoreData will store arbitrary data and return the corresponding hash

func (*RepoCache) ValidLabels

func (c *RepoCache) ValidLabels() []bug.Label

ValidLabels list valid labels

Note: in the future, a proper label policy could be implemented where valid labels are defined in a configuration file. Until that, the default behavior is to return the list of labels already used.

Jump to

Keyboard shortcuts

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