initial support for staging individual lines

This commit is contained in:
Jesse Duffield 2018-12-02 19:57:01 +11:00
parent 99824c8a7b
commit 658e5a9faf
12 changed files with 339 additions and 9 deletions

35
pkg/git/patch_parser.go Normal file
View file

@ -0,0 +1,35 @@
package git
import (
"strings"
"github.com/sirupsen/logrus"
)
type PatchParser struct {
Log *logrus.Entry
}
// NewPatchParser builds a new branch list builder
func NewPatchParser(log *logrus.Entry) (*PatchParser, error) {
return &PatchParser{
Log: log,
}, nil
}
func (p *PatchParser) ParsePatch(patch string) ([]int, []int, error) {
lines := strings.Split(patch, "\n")
hunkStarts := []int{}
stageableLines := []int{}
headerLength := 4
for offsetIndex, line := range lines[headerLength:] {
index := offsetIndex + headerLength
if strings.HasPrefix(line, "@@") {
hunkStarts = append(hunkStarts, index)
}
if strings.HasPrefix(line, "-") || strings.HasPrefix(line, "+") {
stageableLines = append(stageableLines, index)
}
}
return hunkStarts, stageableLines, nil
}