code: func (b *blame) assignOrigin(c, p int) {
  	// assign origin based on diff info
  	hunks := diff.Do(b.data[p], b.data[c])
  	sl := -1 // source line
  	dl := -1 // destination line
  	for h := range hunks {
  		hLines := countLines(hunks[h].Text)
  		for hl := 0; hl < hLines; hl++ {
  			switch {
  			case hunks[h].Type == 0:
  				sl++
  				dl++
  				b.graph[c][dl] = b.graph[p][sl]
  			case hunks[h].Type == 1:
  				dl++
  				b.graph[c][dl] = (*object.Commit)(b.revs[c])
  			case hunks[h].Type == -1:
  				sl++
  			default:
  				panic("unreachable")
  			}
  		}
  	}
  }
docs: // Assigns origin to vertexes in current (c) rev from data in its previous (p)
  // revision