github.com/fluffynuts/lazygit@v0.8.1/pkg/git/patch_parser.go (about)

     1  package git
     2  
     3  import (
     4  	"strings"
     5  
     6  	"github.com/sirupsen/logrus"
     7  )
     8  
     9  type PatchParser struct {
    10  	Log *logrus.Entry
    11  }
    12  
    13  // NewPatchParser builds a new branch list builder
    14  func NewPatchParser(log *logrus.Entry) (*PatchParser, error) {
    15  	return &PatchParser{
    16  		Log: log,
    17  	}, nil
    18  }
    19  
    20  func (p *PatchParser) ParsePatch(patch string) ([]int, []int, error) {
    21  	lines := strings.Split(patch, "\n")
    22  	hunkStarts := []int{}
    23  	stageableLines := []int{}
    24  	pastHeader := false
    25  	for index, line := range lines {
    26  		if strings.HasPrefix(line, "@@") {
    27  			pastHeader = true
    28  			hunkStarts = append(hunkStarts, index)
    29  		}
    30  		if pastHeader && (strings.HasPrefix(line, "-") || strings.HasPrefix(line, "+")) {
    31  			stageableLines = append(stageableLines, index)
    32  		}
    33  	}
    34  	p.Log.WithField("staging", "staging").Info(stageableLines)
    35  	return hunkStarts, stageableLines, nil
    36  }