Consolidate duplicate item registry records
This commit is contained in:
@@ -212,13 +212,16 @@ func preprocessRecords(input dnd.ItemRegistry, order shared.SourceRefOrder) ([]n
|
||||
warnings = append(warnings, contracts.Warning{Scope: itemScope(index), ReasonCode: ReasonCodeItemIDRecomputed, Message: fmt.Sprintf("input index %d: item ID recomputed from %s", index, diagnostics.Quote(item.Name))})
|
||||
}
|
||||
}
|
||||
groups := exactDuplicateGroups(records)
|
||||
groups := comparisonNameGroups(records)
|
||||
output := make([]normalizedRecord, 0, len(groups))
|
||||
for _, members := range groups {
|
||||
retained := cloneRecord(records[members[0]])
|
||||
for _, member := range members[1:] {
|
||||
retained.item.SourceRefs = append(retained.item.SourceRefs, records[member].item.SourceRefs...)
|
||||
retained.inputIndexes = append(retained.inputIndexes, records[member].inputIndexes...)
|
||||
}
|
||||
retained.item.SourceRefs = order.Canonicalize(retained.item.SourceRefs)
|
||||
retained.item.ID = identity.DeriveID(retained.item.Name)
|
||||
retained.inputIndexes = sortedUniqueIndexes(retained.inputIndexes)
|
||||
output = append(output, retained)
|
||||
if len(members) > 1 {
|
||||
@@ -236,14 +239,14 @@ func normalizeRecord(input dnd.Item, order shared.SourceRefOrder) (dnd.Item, boo
|
||||
return output, input.Name != output.Name, !reflect.DeepEqual(input.SourceRefs, output.SourceRefs)
|
||||
}
|
||||
|
||||
func exactDuplicateGroups(records []normalizedRecord) [][]int {
|
||||
func comparisonNameGroups(records []normalizedRecord) [][]int {
|
||||
groups := make([][]int, 0, len(records))
|
||||
for index, record := range records {
|
||||
key := identity.ComparisonKey(record.item.Name)
|
||||
found := false
|
||||
for groupIndex, members := range groups {
|
||||
first := records[members[0]]
|
||||
if identity.ComparisonKey(first.item.Name) == key && reflect.DeepEqual(first.item.SourceRefs, record.item.SourceRefs) {
|
||||
if identity.ComparisonKey(first.item.Name) == key {
|
||||
groups[groupIndex] = append(groups[groupIndex], index)
|
||||
found = true
|
||||
break
|
||||
|
||||
Reference in New Issue
Block a user