Handle Replacement hunks

andybalholm
Apr 3, 2023, 8:30 PM
YGCYIX6C7RUO57HT5F53FIGQYZGGFCFE6YCKC5EUWR2SMUASVKKQC

Dependencies

Change contents

  • edit in pristine.go at line 86
    [3.666]
    [3.666]
    g.splitBlock(blocks[i], pos)
  • replacement in pristine.go at line 89
    [3.667][3.667:732]()
    // Split the block.
    oldBlock := blocks[i]
    newBlock := &Block{
    [3.667]
    [3.732]
    return blocks[i]
    }
    func (g *Graph) splitBlock(oldBlock *Block, pos ChangePosition) (newBlock *Block) {
    change := oldBlock.Change
    newBlock = &Block{
  • edit in pristine.go at line 101
    [3.872]
    [3.872]
    for _, e := range newBlock.Edges {
    e.From = newBlock
    }
  • replacement in pristine.go at line 110
    [3.1028][3.1028:1063]()
    blocks = append(blocks, newBlock)
    [3.1028]
    [3.1063]
    blocks := append(g.Index[change], newBlock)
  • replacement in pristine.go at line 114
    [3.1120][3.1120:1137]()
    return oldBlock
    [3.1120]
    [3.1297]
    return newBlock
  • edit in pristine.go at line 135
    [3.1837]
    [3.1837]
    var deletions []NewEdge
  • replacement in pristine.go at line 168
    [3.2934][3.2934:2998]()
    default:
    return fmt.Errorf("not implemented yet: %T", a)
    [3.2934]
    [3.2998]
    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
    [3.3011]
    [3.3011]
    for _, e := range deletions {
    err := g.putNewEdge(h, e)
    if err != nil {
    return err
    }
    }
  • edit in pristine.go at line 193
    [3.3026]
    [3.3026]
    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
    [3.1351]
    [2.0]
    case 7:
    return replacement(data)
  • edit in hunk.go at line 301
    [3.1804]
    type Replacement struct {
    Change Atom
    Replacement Atom
    Local Local
    Encoding string
    }
    func (r Replacement) atoms() []Atom {
    return []Atom{r.Change, r.Replacement}
    }
    func replacement(data []byte) ([]byte, Replacement, error) {
    var r Replacement
    data, _, 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
    [3.15663][3.15663:15683]()
    stroke := "black"
    [3.15663]
    [3.15683]
    style := "stroke: black"
  • replacement in cmd/tijo-graph/main.go at line 148
    [3.15712][3.15712:15736]()
    stroke = "royalblue"
    [3.15712]
    [2.393]
    style = "stroke: royalblue"
  • replacement in cmd/tijo-graph/main.go at line 150
    [2.406][3.15746:15772](),[3.15746][3.15746:15772]()
    stroke = "forestgreen"
    [2.406]
    [3.15772]
    style = "stroke: forestgreen"
    case 128, 129:
    style = "stroke: forestgreen; stroke-dash: 3"
  • replacement in cmd/tijo-graph/main.go at line 154
    [3.15776][3.15776:15866]()
    fmt.Fprintf(b, "%q -> %q {style.stroke: %s}\n", blockID(e.From), blockID(e.To), stroke)
    [3.15776]
    [3.15866]
    fmt.Fprintf(b, "%q -> %q {style: {%s}}\n", blockID(e.From), blockID(e.To), style)