patch

package
v0.42.0 Latest Latest
Warning

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

Go to latest
Published: May 19, 2024 License: MIT Imports: 11 Imported by: 0

Documentation

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

func ExpandRange added in v0.38.0

func ExpandRange(start int, end int) []int

helper function that takes a start and end index and returns a slice of all indexes inbetween (inclusive)

Types

type FormatViewOpts added in v0.38.0

type FormatViewOpts struct {
	// line indices for tagged lines (e.g. lines added to a custom patch)
	IncLineIndices *set.Set[int]
}

type Hunk added in v0.38.0

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

type Patch added in v0.38.0

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

func Parse added in v0.38.0

func Parse(patchStr string) *Patch

func (*Patch) ContainsChanges added in v0.38.0

func (self *Patch) ContainsChanges() bool

func (*Patch) FormatPlain added in v0.38.0

func (self *Patch) FormatPlain() string

Returns the patch as a plain string

func (*Patch) FormatRangePlain added in v0.38.0

func (self *Patch) FormatRangePlain(startIdx int, endIdx int) string

Returns a range of lines from the patch as a plain string (range is inclusive)

func (*Patch) FormatView added in v0.38.0

func (self *Patch) FormatView(opts FormatViewOpts) string

Returns the patch as a string with ANSI color codes for displaying in a view

func (*Patch) GetNextChangeIdx added in v0.38.0

func (self *Patch) GetNextChangeIdx(idx int) int

Returns the patch line index of the next change (i.e. addition or deletion).

func (*Patch) HunkContainingLine added in v0.38.0

func (self *Patch) HunkContainingLine(idx int) int

Returns hunk index containing the line at the given patch line index

func (*Patch) HunkCount added in v0.41.0

func (self *Patch) HunkCount() int

Returns the number of hunks of the patch

func (*Patch) HunkEndIdx added in v0.38.0

func (self *Patch) HunkEndIdx(hunkIndex int) int

Returns the patch line index of the last line in the given hunk

func (*Patch) HunkStartIdx added in v0.38.0

func (self *Patch) HunkStartIdx(hunkIndex int) int

Returns the patch line index of the first line in the given hunk

func (*Patch) LineCount added in v0.38.0

func (self *Patch) LineCount() int

Returns the length of the patch in lines

func (*Patch) LineNumberOfLine added in v0.38.0

func (self *Patch) LineNumberOfLine(idx int) int

Takes a line index in the patch and returns the line number in the new file. If the line is a header line, returns 1. If the line is a hunk header line, returns the first file line number in that hunk. If the line is out of range below, returns the last file line number in the last hunk.

func (*Patch) Lines added in v0.38.0

func (self *Patch) Lines() []*PatchLine

Returns the lines of the patch

func (*Patch) Transform added in v0.38.0

func (self *Patch) Transform(opts TransformOpts) *Patch

Returns a new patch with the specified transformation applied (e.g. only selecting a subset of changes). Leaves the original patch unchanged.

type PatchBuilder added in v0.38.0

type PatchBuilder struct {
	// To is the commit hash if we're dealing with files of a commit, or a stash ref for a stash
	To   string
	From string

	// CanRebase tells us whether we're allowed to modify our commits. CanRebase should be true for commits of the currently checked out branch and false for everything else
	// TODO: move this out into a proper mode struct in the gui package: it doesn't really belong here
	CanRebase bool

	Log *logrus.Entry
	// contains filtered or unexported fields
}

PatchBuilder manages the building of a patch for a commit to be applied to another commit (or the working tree, or removed from the current commit). We also support building patches from things like stashes, for which there is less flexibility

func NewPatchBuilder added in v0.38.0

func NewPatchBuilder(log *logrus.Entry, loadFileDiff loadFileDiffFunc) *PatchBuilder

func (*PatchBuilder) Active added in v0.38.0

func (p *PatchBuilder) Active() bool

func (*PatchBuilder) AddFileLineRange added in v0.38.0

func (p *PatchBuilder) AddFileLineRange(filename string, firstLineIdx, lastLineIdx int) error

func (*PatchBuilder) AddFileWhole added in v0.38.0

func (p *PatchBuilder) AddFileWhole(filename string) error

func (*PatchBuilder) AllFilesInPatch added in v0.38.0

func (p *PatchBuilder) AllFilesInPatch() []string

func (*PatchBuilder) GetFileIncLineIndices added in v0.38.0

func (p *PatchBuilder) GetFileIncLineIndices(filename string) ([]int, error)

func (*PatchBuilder) GetFileStatus added in v0.38.0

func (p *PatchBuilder) GetFileStatus(filename string, parent string) PatchStatus

func (*PatchBuilder) IsEmpty added in v0.38.0

func (p *PatchBuilder) IsEmpty() bool

func (*PatchBuilder) NewPatchRequired added in v0.38.0

func (p *PatchBuilder) NewPatchRequired(from string, to string, reverse bool) bool

if any of these things change we'll need to reset and start a new patch

func (*PatchBuilder) PatchToApply added in v0.39.0

func (p *PatchBuilder) PatchToApply(reverse bool) string

func (*PatchBuilder) RemoveFile added in v0.38.0

func (p *PatchBuilder) RemoveFile(filename string) error

func (*PatchBuilder) RemoveFileLineRange added in v0.38.0

func (p *PatchBuilder) RemoveFileLineRange(filename string, firstLineIdx, lastLineIdx int) error

func (*PatchBuilder) RenderAggregatedPatch added in v0.38.0

func (p *PatchBuilder) RenderAggregatedPatch(plain bool) string

func (*PatchBuilder) RenderPatchForFile added in v0.38.0

func (p *PatchBuilder) RenderPatchForFile(filename string, plain bool, reverse bool) string

func (*PatchBuilder) Reset added in v0.38.0

func (p *PatchBuilder) Reset()

clears the patch

func (*PatchBuilder) Start added in v0.38.0

func (p *PatchBuilder) Start(from, to string, reverse bool, canRebase bool)

type PatchLine

type PatchLine struct {
	Kind    PatchLineKind
	Content string // something like '+ hello' (note the first character is not removed)
}

type PatchLineKind added in v0.27.1

type PatchLineKind int
const (
	PATCH_HEADER PatchLineKind = iota
	HUNK_HEADER
	ADDITION
	DELETION
	CONTEXT
	NEWLINE_MESSAGE
)

type PatchStatus added in v0.27.1

type PatchStatus int
const (
	// UNSELECTED is for when the commit file has not been added to the patch in any way
	UNSELECTED PatchStatus = iota
	// WHOLE is for when you want to add the whole diff of a file to the patch,
	// including e.g. if it was deleted
	WHOLE
	// PART is for when you're only talking about specific lines that have been modified
	PART
)

type TransformOpts added in v0.38.0

type TransformOpts struct {
	// Create a patch that will applied in reverse with `git apply --reverse`.
	// This affects how unselected lines are treated when only parts of a hunk
	// are selected: usually, for unselected lines we change '-' lines to
	// context lines and remove '+' lines, but when Reverse is true we need to
	// turn '+' lines into context lines and remove '-' lines.
	Reverse bool

	// If set, we will replace the original header with one referring to this file name.
	// For staging/unstaging lines we don't want the original header because
	// it makes git confused e.g. when dealing with deleted/added files
	// but with building and applying patches the original header gives git
	// information it needs to cleanly apply patches
	FileNameOverride string

	// The indices of lines that should be included in the patch.
	IncludedLineIndices []int
}

Jump to

Keyboard shortcuts

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