gitdomain

package
v12.1.0 Latest Latest
Warning

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

Go to latest
Published: Feb 29, 2024 License: MIT Imports: 6 Imported by: 0

Documentation

Overview

Package gitdomain defines basic concepts from the domain of Git: branches, remotes, commit SHAs, etc.

Index

Constants

This section is empty.

Variables

View Source
var (
	NoRemote       = NewRemote("")         //nolint:gochecknoglobals
	OriginRemote   = NewRemote("origin")   //nolint:gochecknoglobals
	UpstreamRemote = NewRemote("upstream") //nolint:gochecknoglobals
)

Functions

This section is empty.

Types

type BranchInfo

type BranchInfo struct {
	// LocalName contains the local name of the branch.
	LocalName LocalBranchName

	// LocalSHA contains the SHA that this branch had locally before Git Town ran.
	LocalSHA SHA

	// RemoteName contains the fully qualified name of the tracking branch, i.e. "origin/foo".
	RemoteName RemoteBranchName

	// RemoteSHA contains the SHA of the tracking branch before Git Town ran.
	RemoteSHA SHA

	// SyncStatus of the branch
	SyncStatus SyncStatus
}

BranchInfo describes the sync status of a branch in relation to its tracking branch.

func EmptyBranchInfo

func EmptyBranchInfo() BranchInfo

func (BranchInfo) HasLocalBranch

func (self BranchInfo) HasLocalBranch() bool

func (BranchInfo) HasOnlyLocalBranch

func (self BranchInfo) HasOnlyLocalBranch() bool

func (BranchInfo) HasOnlyRemoteBranch

func (self BranchInfo) HasOnlyRemoteBranch() bool

func (BranchInfo) HasRemoteBranch

func (self BranchInfo) HasRemoteBranch() bool

func (BranchInfo) HasTrackingBranch

func (self BranchInfo) HasTrackingBranch() bool

func (BranchInfo) IsEmpty

func (self BranchInfo) IsEmpty() bool

IsEmpty indicates whether this BranchInfo is completely empty, i.e. not a single branch contains something.

func (BranchInfo) IsLocal

func (self BranchInfo) IsLocal() bool

IsLocalBranch indicates whether this branch exists in the local repo that Git Town is running in.

func (BranchInfo) IsOmniBranch

func (self BranchInfo) IsOmniBranch() bool

IsOmniBranch indicates whether the local and remote branch are in sync.

type BranchInfos

type BranchInfos []BranchInfo

BranchInfos contains the BranchInfos for all branches in a repo. Tracking branches on the origin remote don't get their own entry, they are listed in the `TrackingBranch` property of the local branch they track.

func (BranchInfos) FindByLocalName

func (self BranchInfos) FindByLocalName(branchName LocalBranchName) *BranchInfo

FindByLocalName provides the branch with the given name if one exists.

func (BranchInfos) FindByRemoteName

func (self BranchInfos) FindByRemoteName(remoteBranch RemoteBranchName) *BranchInfo

FindByRemoteName provides the local branch that has the given remote branch as its tracking branch or nil if no such branch exists.

func (BranchInfos) FindMatchingRecord

func (self BranchInfos) FindMatchingRecord(other BranchInfo) BranchInfo

func (BranchInfos) HasLocalBranch

func (self BranchInfos) HasLocalBranch(branch LocalBranchName) bool

HasLocalBranch indicates whether the given local branch is already known to this BranchInfos instance.

func (BranchInfos) HasLocalBranches added in v12.1.0

func (self BranchInfos) HasLocalBranches(branches LocalBranchNames) bool

HasLocalBranches indicates whether this BranchInfos instance contains all the given branches.

func (BranchInfos) HasMatchingTrackingBranchFor

func (self BranchInfos) HasMatchingTrackingBranchFor(localBranch LocalBranchName) bool

HasMatchingRemoteBranchFor indicates whether there is already a remote branch matching the given local branch.

func (BranchInfos) LocalBranches

func (self BranchInfos) LocalBranches() BranchInfos

LocalBranches provides only the branches that exist on the local machine.

func (BranchInfos) LocalBranchesWithDeletedTrackingBranches

func (self BranchInfos) LocalBranchesWithDeletedTrackingBranches() BranchInfos

LocalBranchesWithDeletedTrackingBranches provides only the branches that exist locally and have a deleted tracking branch.

func (BranchInfos) Names

func (self BranchInfos) Names() LocalBranchNames

Names provides the names of all local branches in this BranchesSyncStatus instance.

func (BranchInfos) Remove

func (self BranchInfos) Remove(branchName LocalBranchName) BranchInfos

func (BranchInfos) Select

func (self BranchInfos) Select(names []LocalBranchName) (BranchInfos, error)

Select provides the BranchSyncStatus elements with the given names. TODO: make argument variadic

func (BranchInfos) UpdateLocalSHA

func (self BranchInfos) UpdateLocalSHA(branch LocalBranchName, sha SHA) error

type BranchName

type BranchName string

BranchName is the name of a local or remote Git branch.

func NewBranchName

func NewBranchName(id string) BranchName

func (BranchName) IsLocal

func (self BranchName) IsLocal() bool

IsLocal indicates whether the branch with this BranchName exists locally.

func (BranchName) LocalName

func (self BranchName) LocalName() LocalBranchName

LocalName provides the local version of this branch name.

func (BranchName) RemoteName

func (self BranchName) RemoteName() RemoteBranchName

RemoteName provides the remote version of this branch name.

func (BranchName) String

func (self BranchName) String() string

Implementation of the fmt.Stringer interface.

type BranchesSnapshot added in v12.0.1

type BranchesSnapshot struct {
	// the branch that was checked out at the time the snapshot was taken
	Active LocalBranchName

	// Branches is a read-only copy of the branches that exist in this repo at the time the snapshot was taken.
	// Don't use these branches for business logic since businss logic might want to modify its in-memory cache of branches
	// as it adds or removes branches.
	Branches BranchInfos
}

BranchesSnapshot is a snapshot of the Git branches at a particular point in time.

func EmptyBranchesSnapshot

func EmptyBranchesSnapshot() BranchesSnapshot

func (BranchesSnapshot) IsEmpty added in v12.0.1

func (self BranchesSnapshot) IsEmpty() bool

type LocalBranchName

type LocalBranchName string

LocalBranchName is the name of a local Git branch. The zero value is an empty local branch name, i.e. a local branch name that is unknown or not configured.

func EmptyLocalBranchName

func EmptyLocalBranchName() LocalBranchName

func NewLocalBranchName

func NewLocalBranchName(id string) LocalBranchName

func NewLocalBranchNameRef

func NewLocalBranchNameRef(id string) *LocalBranchName

func NewLocalBranchNameRefAllowEmpty

func NewLocalBranchNameRefAllowEmpty(id string) *LocalBranchName

NewLocalBranchNameRefAllowEmpty constructs a new LocalBranchName instance and provides a reference to it. It does not verify the branch name.

func (LocalBranchName) AtRemote

func (self LocalBranchName) AtRemote(remote Remote) RemoteBranchName

AtRemote provides the RemoteBranchName of this branch at the given remote.

func (LocalBranchName) BranchName

func (self LocalBranchName) BranchName() BranchName

BranchName widens the type of this LocalBranchName to a more generic BranchName.

func (LocalBranchName) IsEmpty

func (self LocalBranchName) IsEmpty() bool

IsEmpty indicates whether this branch name is not set.

func (LocalBranchName) Location

func (self LocalBranchName) Location() Location

Location widens the type of this LocalBranchName to a more generic Location.

func (LocalBranchName) String

func (self LocalBranchName) String() string

Implementation of the fmt.Stringer interface.

func (LocalBranchName) TrackingBranch

func (self LocalBranchName) TrackingBranch() RemoteBranchName

TrackingBranch provides the name of the tracking branch for this local branch.

type LocalBranchNames

type LocalBranchNames []LocalBranchName

func NewLocalBranchNames

func NewLocalBranchNames(names ...string) LocalBranchNames

func NewLocalBranchNamesRef

func NewLocalBranchNamesRef(names ...string) *LocalBranchNames

func ParseLocalBranchNamesRef

func ParseLocalBranchNamesRef(names string) *LocalBranchNames

ParseLocalBranchNamesRef constructs a LocalBranchNames instance containing the branches listed in the given space-separated string.

func (LocalBranchNames) AppendAllMissing

func (self LocalBranchNames) AppendAllMissing(others ...LocalBranchName) LocalBranchNames

AppendAllMissing provides a LocalBranchNames list consisting of the sum of this and elements of other list that aren't in this list.

func (LocalBranchNames) Contains

func (self LocalBranchNames) Contains(branch LocalBranchName) bool

Contains indicates whether this collection contains the given branch.

func (LocalBranchNames) Hoist

Hoist moves the given needle to the front of the list.

func (LocalBranchNames) Join

func (self LocalBranchNames) Join(sep string) string

Join provides the names of all branches in this collection connected by the given separator.

func (LocalBranchNames) Remove

func (self LocalBranchNames) Remove(toRemove ...LocalBranchName) LocalBranchNames

Remove removes the given branch names from this collection.

func (LocalBranchNames) RemoveWorkspaceMarkers

func (self LocalBranchNames) RemoveWorkspaceMarkers() LocalBranchNames

RemoveWorkspaceMarkers removes the workspace markers from the branch names in this list.

func (LocalBranchNames) Sort

func (self LocalBranchNames) Sort()

Sort orders the branches in this collection alphabetically.

func (LocalBranchNames) String

func (self LocalBranchNames) String() string

func (LocalBranchNames) Strings

func (self LocalBranchNames) Strings() []string

Strings provides the names of all branches in this collection as strings.

type Location

type Location string

Location is a location within a Git repo. Examples for locations are SHA addresses of commits or branch names.

func NewLocation

func NewLocation(id string) Location

func (Location) String

func (self Location) String() string

Implementation of the fmt.Stringer interface.

type Remote

type Remote string

Remote represents a Git remote.

func NewRemote

func NewRemote(id string) Remote

func (Remote) IsEmpty

func (self Remote) IsEmpty() bool

func (Remote) String

func (self Remote) String() string

Implementation of the fmt.Stringer interface.

type RemoteBranchName

type RemoteBranchName string

RemoteBranchName is the name of a remote branch, e.g. "origin/foo".

func EmptyRemoteBranchName

func EmptyRemoteBranchName() RemoteBranchName

func NewRemoteBranchName

func NewRemoteBranchName(id string) RemoteBranchName

func (RemoteBranchName) BranchName

func (self RemoteBranchName) BranchName() BranchName

BranchName widens the type of this RemoteBranchName to a more generic BranchName.

func (RemoteBranchName) IsEmpty

func (self RemoteBranchName) IsEmpty() bool

func (RemoteBranchName) LocalBranchName

func (self RemoteBranchName) LocalBranchName() LocalBranchName

LocalBranchName provides the name of the local branch that this remote branch tracks.

func (RemoteBranchName) Parts

func (self RemoteBranchName) Parts() (Remote, LocalBranchName)

func (RemoteBranchName) Remote

func (self RemoteBranchName) Remote() Remote

func (RemoteBranchName) String

func (self RemoteBranchName) String() string

Implementation of the fmt.Stringer interface.

type RemoteBranchNames

type RemoteBranchNames []RemoteBranchName

func (RemoteBranchNames) Sort

func (self RemoteBranchNames) Sort()

Sort orders the branches in this collection alphabetically.

func (RemoteBranchNames) Strings

func (self RemoteBranchNames) Strings() []string

Strings provides these remote branch names as strings.

type Remotes

type Remotes []Remote

Remotes answers questions which Git remotes a repo has.

func NewRemotes

func NewRemotes(remotes ...string) Remotes

func (Remotes) HasOrigin

func (self Remotes) HasOrigin() bool

func (Remotes) HasUpstream

func (self Remotes) HasUpstream() bool

type RepoRootDir

type RepoRootDir string

RepoRootDir represents the root directory of a Git repository.

func EmptyRepoRootDir

func EmptyRepoRootDir() RepoRootDir

func NewRepoRootDir

func NewRepoRootDir(dir string) RepoRootDir

func (RepoRootDir) IsEmpty

func (self RepoRootDir) IsEmpty() bool

func (RepoRootDir) String

func (self RepoRootDir) String() string

type RepoStatus

type RepoStatus struct {
	Conflicts        bool // the repo contains merge conflicts
	OpenChanges      bool // there are uncommitted changes
	RebaseInProgress bool // a rebase is in progress
	UntrackedChanges bool // the repo contains files that aren't tracked by Git
}

type SHA

type SHA string

SHA represents a Git SHA as a dedicated data type. This helps avoid stringly-typed code.

func EmptySHA

func EmptySHA() SHA

func NewSHA

func NewSHA(id string) SHA

NewSHA creates a new SHA instance with the given value. The value is verified for correctness.

func (SHA) IsEmpty

func (self SHA) IsEmpty() bool

func (SHA) Location

func (self SHA) Location() Location

Location widens the type of this SHA to a more generic Location.

func (SHA) String

func (self SHA) String() string

Implementation of the fmt.Stringer interface.

func (SHA) TruncateTo

func (self SHA) TruncateTo(newLength int) SHA

TruncateTo provides a new SHA instance that contains a shorter checksum.

type SHAs

type SHAs []SHA

func (SHAs) Join

func (self SHAs) Join(sep string) string

func (SHAs) Strings

func (self SHAs) Strings() []string

type StashSize

type StashSize int

StashSize contains the number of Git stashes.

type SyncStatus

type SyncStatus string

SyncStatus encodes the places a branch can exist at. This is a type-safe enum, see https://npf.io/2022/05/safer-enums.

const (
	SyncStatusUpToDate        SyncStatus = "up to date"                 // the branch exists locally and remotely, the local branch is up to date
	SyncStatusNotInSync       SyncStatus = "not in sync"                // the branch exists locally and remotely, the local branch is behind the remote tracking branch
	SyncStatusLocalOnly       SyncStatus = "local only"                 // the branch was created locally and hasn't been pushed to the remote yet
	SyncStatusRemoteOnly      SyncStatus = "remote only"                // the branch exists only at the remote
	SyncStatusDeletedAtRemote SyncStatus = "deleted at remote"          // the branch was deleted on the remote
	SyncStatusOtherWorktree   SyncStatus = "active in another worktree" // the branch is active in another worktree and should not be synced
)

func (SyncStatus) String

func (self SyncStatus) String() string

Jump to

Keyboard shortcuts

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