in pkg/updater/updater.go [916:998]
func groupColumns(tg *configpb.TestGroup, cols []InflatedColumn) []InflatedColumn {
groups := map[string][]InflatedColumn{}
var ids []string
for _, c := range cols {
id := c.Column.Name + columnIDSeparator + c.Column.Build
groups[id] = append(groups[id], c)
ids = append(ids, id)
}
if len(groups) == 0 {
return nil
}
out := make([]InflatedColumn, 0, len(groups))
seen := make(map[string]bool, len(groups))
for _, id := range ids {
if seen[id] {
continue // already merged this group.
}
seen[id] = true
var col InflatedColumn
groupedCells := groups[id]
if len(groupedCells) == 1 {
out = append(out, groupedCells[0])
continue
}
cells := map[string][]Cell{}
var count int
for i, c := range groupedCells {
if i == 0 {
col.Column = c.Column
} else {
if c.Column.Started < col.Column.Started {
col.Column.Started = c.Column.Started
}
if !sortorder.NaturalLess(c.Column.Hint, col.Column.Hint) {
col.Column.Hint = c.Column.Hint
}
for i, val := range c.Column.Extra {
if i == len(col.Column.Extra) {
col.Column.Extra = append(col.Column.Extra, val)
continue
}
if val == "" || val == col.Column.Extra[i] {
continue
}
if col.Column.Extra[i] == "" {
col.Column.Extra[i] = val
} else if i < len(tg.GetColumnHeader()) && tg.GetColumnHeader()[i].ListAllValues {
col.Column.Extra[i] = joinHeaders(col.Column.Extra[i], val)
} else {
col.Column.Extra[i] = "*" // values differ
}
}
}
for key, cell := range c.Cells {
cells[key] = append(cells[key], cell)
count++
}
}
if tg.IgnoreOldResults {
col.Cells = make(map[string]Cell, len(cells))
} else {
col.Cells = make(map[string]Cell, count)
}
for name, duplicateCells := range cells {
if tg.IgnoreOldResults {
col.Cells[name] = duplicateCells[0]
continue
}
for name, cell := range SplitCells(name, duplicateCells...) {
col.Cells[name] = cell
}
}
out = append(out, col)
}
return out
}