domain

package
v11.1.0 Latest Latest
Warning

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

Go to latest
Published: Dec 12, 2023 License: MIT Imports: 6 Imported by: 0

Documentation

Overview

Package domain provides strong type support for modeling the domain of Git Town. This helps lean on the typesystem to prevent bugs, stringly-typed code, and primitive obsession and improve maintainability.

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

	// SyncStatus of the branch
	SyncStatus SyncStatus

	// 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
}

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(localBranch LocalBranchName) bool

IsKnown indicates whether the given local branch is already known to this BranchesSyncStatus instance.

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.

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 BranchTypes

type BranchTypes struct {
	MainBranch        LocalBranchName
	PerennialBranches LocalBranchNames
}

BranchTypes answers questions about whether branches are long-lived or not.

func EmptyBranchTypes

func EmptyBranchTypes() BranchTypes

func (BranchTypes) IsFeatureBranch

func (self BranchTypes) IsFeatureBranch(branch LocalBranchName) bool

func (BranchTypes) IsMainBranch

func (self BranchTypes) IsMainBranch(branch LocalBranchName) bool

func (BranchTypes) IsPerennialBranch

func (self BranchTypes) IsPerennialBranch(branch LocalBranchName) bool

func (BranchTypes) MainAndPerennials added in v11.1.0

func (self BranchTypes) MainAndPerennials() LocalBranchNames

type Branches

type Branches struct {
	All     BranchInfos
	Types   BranchTypes
	Initial LocalBranchName
}

func EmptyBranches

func EmptyBranches() Branches

EmptyBranches provides the zero value for Branches.

type BranchesSnapshot

type BranchesSnapshot struct {
	// 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

	// the branch that was checked out at the time the snapshot was taken
	Active LocalBranchName
}

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

func EmptyBranchesSnapshot

func EmptyBranchesSnapshot() BranchesSnapshot

func (BranchesSnapshot) IsEmpty

func (self BranchesSnapshot) IsEmpty() bool

type Change

type Change[T any] struct {
	Before T
	After  T
}

type InconsistentChange

type InconsistentChange struct {
	Before BranchInfo
	After  BranchInfo
}

InconsistentChange describes a change where both local and remote branch exist before and after, but it's not an OmniChange, i.e. the SHA are different.

type InconsistentChanges

type InconsistentChanges []InconsistentChange

func (InconsistentChanges) BranchNames

func (self InconsistentChanges) BranchNames() LocalBranchNames

func (InconsistentChanges) Categorize

func (self InconsistentChanges) Categorize(branchTypes BranchTypes) (perennials, features InconsistentChanges)

type LocalBranchChange

type LocalBranchChange map[LocalBranchName]Change[SHA]

func (LocalBranchChange) BranchNames

func (self LocalBranchChange) BranchNames() LocalBranchNames

func (LocalBranchChange) Categorize

func (self LocalBranchChange) Categorize(branchTypes BranchTypes) (changedPerennials, changedFeatures LocalBranchChange)

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 (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 (LocalBranchNames) Categorize

func (self LocalBranchNames) Categorize(branchTypes BranchTypes) (perennials, features LocalBranchNames)

func (LocalBranchNames) Hoist added in v11.1.0

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 added in v11.1.0

func (self LocalBranchNames) Remove(toRemove LocalBranchName) LocalBranchNames

Remove removes the given branch name from this collection.

func (LocalBranchNames) RemoveWorkspaceMarkers added in v11.1.0

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) Strings

func (self LocalBranchNames) Strings() []string

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

type LocalBranchesSHAs

type LocalBranchesSHAs map[LocalBranchName]SHA

func (LocalBranchesSHAs) BranchNames

func (self LocalBranchesSHAs) BranchNames() LocalBranchNames

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 EmptyLocation

func EmptyLocation() Location

func NewLocation

func NewLocation(id string) Location

func (Location) String

func (self Location) String() string

Implementation of the fmt.Stringer interface.

type Proposal

type Proposal struct {
	// whether this proposal can be merged via the API
	MergeWithAPI bool

	// the number used to identify the proposal on the hosting platform
	Number int

	// name of the target branch ("base") of this proposal
	Target LocalBranchName

	// textual title of the proposal
	Title string
}

Proposal contains information about a change request on a code hosting platform. Alternative names are "pull request" or "merge request".

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 RemoteBranchChange

type RemoteBranchChange map[RemoteBranchName]Change[SHA]

func (RemoteBranchChange) BranchNames

func (self RemoteBranchChange) BranchNames() RemoteBranchNames

func (RemoteBranchChange) Categorize

func (self RemoteBranchChange) Categorize(branchTypes BranchTypes) (perennialChanges, featureChanges RemoteBranchChange)

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 RemoteBranchesSHAs

type RemoteBranchesSHAs map[RemoteBranchName]SHA

func (RemoteBranchesSHAs) BranchNames

func (self RemoteBranchesSHAs) BranchNames() RemoteBranchNames

BranchNames provides the names of the involved branches as strings.

func (RemoteBranchesSHAs) Categorize

func (self RemoteBranchesSHAs) Categorize(branchTypes BranchTypes) (perennials, features RemoteBranchesSHAs)

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 StashSnapshot

type StashSnapshot int

StashSnapshot is a snapshot of the state of Git stash at a given point in time.

func EmptyStashSnapshot

func EmptyStashSnapshot() StashSnapshot

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