Handle Replacement hunks
Dependencies
- [2]
A7XMU2A6Handle SolveOrderConflict hunks - [3]
EYPCPIP7Apply changes and build a graph - [4]
OYWKC4LZtijo-graph: direct SVG output - [5]
7D7CMNN3Handle Edit hunks - [*]
EVHNGDT7parse FileAdd hunk
Change contents
- edit in pristine.go at line 86
g.splitBlock(blocks[i], pos) - replacement in pristine.go at line 89
// Split the block.oldBlock := blocks[i]newBlock := &Block{return blocks[i]}func (g *Graph) splitBlock(oldBlock *Block, pos ChangePosition) (newBlock *Block) {change := oldBlock.ChangenewBlock = &Block{ - edit in pristine.go at line 101
for _, e := range newBlock.Edges {e.From = newBlock} - replacement in pristine.go at line 110
blocks = append(blocks, newBlock)blocks := append(g.Index[change], newBlock) - replacement in pristine.go at line 114
return oldBlockreturn newBlock - edit in pristine.go at line 135
var deletions []NewEdge - replacement in pristine.go at line 168
default:return fmt.Errorf("not implemented yet: %T", a)case EdgeMap:for _, e := range a.Edges {if e.Flag&EdgeFlagsDeleted == EdgeFlagsDeleted {deletions = append(deletions, e)} else {err := g.putNewEdge(h, e)if err != nil {return err}}} - edit in pristine.go at line 183
for _, e := range deletions {err := g.putNewEdge(h, e)if err != nil {return err}} - edit in pristine.go at line 193
func (g *Graph) putNewEdge(change Hash, ne NewEdge) error {source := g.blockEnding(coalesceHash(ne.From.Change, change), ne.From.Pos)if source == nil {return fmt.Errorf("not found: block ending at %v:%d", coalesceHash(ne.From.Change, change), ne.From.Pos)}target := g.blockStarting(coalesceHash(ne.To.Change, change), ne.To.Start)if target == nil {return fmt.Errorf("not found: block starting at %v:%d", coalesceHash(ne.To.Change, change), ne.To.Start)}if target.End > ne.To.End {g.splitBlock(target, ne.To.End)}introducedBy := coalesceHash(ne.IntroducedBy, change)// Delete old edges from source to target.for i, e := range source.Edges {if e.Change == introducedBy && e.From == source && e.To == target {source.Edges = append(source.Edges[:i], source.Edges[i+1:]...)break}}for i, e := range target.ReverseEdges {if e.Change == introducedBy && e.From == source && e.To == target {target.ReverseEdges = append(target.ReverseEdges[:i], target.ReverseEdges[i+1:]...)break}}makeEdge(change, ne.Flag, source, target)return nil} - edit in hunk.go at line 193
case 7:return replacement(data) - edit in hunk.go at line 301[3.1804]
type Replacement struct {Change AtomReplacement AtomLocal LocalEncoding string}func (r Replacement) atoms() []Atom {return []Atom{r.Change, r.Replacement}}func replacement(data []byte) ([]byte, Replacement, error) {var r Replacementdata, _, err := tuple(assign(&r.Change, atom),assign(&r.Replacement, atom),assign(&r.Local, local),assign(&r.Encoding, mapValue(option(toString(lengthData(uint64LE))), func(p *string) string {if p == nil {return ""}return *p})),)(data)return data, r, err} - replacement in cmd/tijo-graph/main.go at line 145
stroke := "black"style := "stroke: black" - replacement in cmd/tijo-graph/main.go at line 148
stroke = "royalblue"style = "stroke: royalblue" - replacement in cmd/tijo-graph/main.go at line 150
stroke = "forestgreen"style = "stroke: forestgreen"case 128, 129:style = "stroke: forestgreen; stroke-dash: 3" - replacement in cmd/tijo-graph/main.go at line 154
fmt.Fprintf(b, "%q -> %q {style.stroke: %s}\n", blockID(e.From), blockID(e.To), stroke)fmt.Fprintf(b, "%q -> %q {style: {%s}}\n", blockID(e.From), blockID(e.To), style)