diff options
| author | Taras Madan <tarasmadan@google.com> | 2024-08-14 16:13:58 +0200 |
|---|---|---|
| committer | Taras Madan <tarasmadan@google.com> | 2024-08-16 09:17:58 +0000 |
| commit | 2a55e7869e9d5b27438a7494a42ce7dc93a16cc1 (patch) | |
| tree | 44480343b063c9df827fb9f2a584be7ff0cae41a /pkg | |
| parent | e1c76ab230ba9925a55290523b8ec832399f9ba3 (diff) | |
pkg/covermerger: refactor FileRecord, move parsing to makeRecord
Diffstat (limited to 'pkg')
| -rw-r--r-- | pkg/covermerger/covermerger.go | 102 | ||||
| -rw-r--r-- | pkg/covermerger/deleted_file_merger.go | 2 | ||||
| -rw-r--r-- | pkg/covermerger/file_line_merger.go | 12 |
3 files changed, 50 insertions, 66 deletions
diff --git a/pkg/covermerger/covermerger.go b/pkg/covermerger/covermerger.go index da4baef8f..4c9bdfd8b 100644 --- a/pkg/covermerger/covermerger.go +++ b/pkg/covermerger/covermerger.go @@ -25,60 +25,34 @@ const ( KeyHitCount = "hit_count" ) -type FileRecord map[string]string +type FileRecord struct { + FilePath string + RepoBranchCommit + StartLine int + HitCount int +} + type RepoBranchCommit struct { Repo string Branch string Commit string } -func (fr FileRecord) RepoBranchCommit() RepoBranchCommit { - return RepoBranchCommit{ - fr[KeyKernelRepo], - fr[KeyKernelBranch], - fr[KeyKernelCommit], - } -} - -type Frame struct { - StartLine int - StartCol int - EndLine int - EndCol int -} - -func (fr FileRecord) Frame() (*Frame, error) { - f := &Frame{} - var err error - if f.StartLine, err = strconv.Atoi(fr[KeyStartLine]); err != nil { - return nil, fmt.Errorf("failed to Atoi(%s): %w", fr[KeyStartLine], err) - } - return f, nil -} - -func (fr FileRecord) HitCount() (int, error) { - if hitCount, err := strconv.Atoi(fr[KeyHitCount]); err != nil { - return 0, fmt.Errorf("failed to Atoi(%s): %w", fr[KeyHitCount], err) - } else { - return hitCount, nil - } -} - type MergeResult struct { HitCounts map[int]int FileExists bool } type FileCoverageMerger interface { - AddRecord(rbc RepoBranchCommit, f *Frame, hitCount int) + Add(record *FileRecord) Result() *MergeResult } -func batchFileData(c *Config, targetFilePath string, records []FileRecord) (*MergeResult, error) { +func batchFileData(c *Config, targetFilePath string, records []*FileRecord) (*MergeResult, error) { log.Logf(1, "processing %d records for %s", len(records), targetFilePath) repoBranchCommitsMap := make(map[RepoBranchCommit]bool) for _, record := range records { - repoBranchCommitsMap[record.RepoBranchCommit()] = true + repoBranchCommitsMap[record.RepoBranchCommit] = true } repoBranchCommitsMap[c.Base] = true repoBranchCommits := maps.Keys(repoBranchCommitsMap) @@ -88,34 +62,44 @@ func batchFileData(c *Config, targetFilePath string, records []FileRecord) (*Mer } merger := makeFileLineCoverMerger(fvs, c.Base) for _, record := range records { - var f *Frame - if f, err = record.Frame(); err != nil { - return nil, fmt.Errorf("error parsing records: %w", err) - } - var hitCount int - if hitCount, err = record.HitCount(); err != nil { - return nil, fmt.Errorf("error parsing records: %w", err) - } - merger.AddRecord( - record.RepoBranchCommit(), - f, - hitCount) + merger.Add(record) } return merger.Result(), nil } -func makeRecord(fields, schema []string) FileRecord { - record := make(FileRecord) +func makeRecord(fields, schema []string) *FileRecord { if len(fields) != len(schema) { panic("fields size and schema size are not equal") } - for i, v := range fields { - k := schema[i] - record[k] = v + record := &FileRecord{} + for i, val := range fields { + key := schema[i] + switch key { + case KeyFilePath: + record.FilePath = val + case KeyKernelRepo: + record.Repo = val + case KeyKernelBranch: + record.Branch = val + case KeyKernelCommit: + record.Commit = val + case KeyStartLine: + record.StartLine = readIntField(key, val) + case KeyHitCount: + record.HitCount = readIntField(key, val) + } } return record } +func readIntField(field, val string) int { + res, err := strconv.Atoi(val) + if err != nil { + panic(fmt.Errorf("failed to Atoi(%s) %s: %w", val, field, err)) + } + return res +} + type Config struct { Jobs int Workdir string @@ -145,7 +129,7 @@ func MergeCSVData(config *Config, reader io.Reader) (map[string]*MergeResult, er schema = fields } errStdinReadChan := make(chan error, 1) - recordsChan := make(chan FileRecord) + recordsChan := make(chan *FileRecord) go func() { defer close(recordsChan) for { @@ -176,10 +160,10 @@ func MergeCSVData(config *Config, reader io.Reader) (map[string]*MergeResult, er type FileRecords struct { fileName string - records []FileRecord + records []*FileRecord } -func mergeChanData(c *Config, recordChan <-chan FileRecord) (map[string]*MergeResult, error) { +func mergeChanData(c *Config, recordChan <-chan *FileRecord) (map[string]*MergeResult, error) { g, ctx := errgroup.WithContext(context.Background()) frecordChan := groupFileRecords(recordChan, ctx) stat := make(map[string]*MergeResult) @@ -208,19 +192,19 @@ func mergeChanData(c *Config, recordChan <-chan FileRecord) (map[string]*MergeRe return stat, nil } -func groupFileRecords(recordChan <-chan FileRecord, ctx context.Context) chan FileRecords { +func groupFileRecords(recordChan <-chan *FileRecord, ctx context.Context) chan FileRecords { frecordChan := make(chan FileRecords) go func() { defer close(frecordChan) targetFile := "" - var records []FileRecord + var records []*FileRecord for record := range recordChan { select { case <-ctx.Done(): return default: } - curTargetFile := record[KeyFilePath] + curTargetFile := record.FilePath if targetFile == "" { targetFile = curTargetFile } diff --git a/pkg/covermerger/deleted_file_merger.go b/pkg/covermerger/deleted_file_merger.go index 32513ecb1..a2bfb4989 100644 --- a/pkg/covermerger/deleted_file_merger.go +++ b/pkg/covermerger/deleted_file_merger.go @@ -6,7 +6,7 @@ package covermerger type DeletedFileLineMerger struct { } -func (a *DeletedFileLineMerger) AddRecord(RepoBranchCommit, *Frame, int) { +func (a *DeletedFileLineMerger) Add(*FileRecord) { } func (a *DeletedFileLineMerger) Result() *MergeResult { diff --git a/pkg/covermerger/file_line_merger.go b/pkg/covermerger/file_line_merger.go index 5e04a76da..4cfeef2d9 100644 --- a/pkg/covermerger/file_line_merger.go +++ b/pkg/covermerger/file_line_merger.go @@ -40,15 +40,15 @@ type FileLineCoverMerger struct { lostFrames map[RepoBranchCommit]int64 } -func (a *FileLineCoverMerger) AddRecord(rbc RepoBranchCommit, f *Frame, hitCount int) { - if a.matchers[rbc] == nil { - if hitCount > 0 { - a.lostFrames[rbc]++ +func (a *FileLineCoverMerger) Add(record *FileRecord) { + if a.matchers[record.RepoBranchCommit] == nil { + if record.HitCount > 0 { + a.lostFrames[record.RepoBranchCommit]++ } return } - if targetLine := a.matchers[rbc].SameLinePos(f.StartLine); targetLine != -1 { - a.hitCounts[targetLine] += hitCount + if targetLine := a.matchers[record.RepoBranchCommit].SameLinePos(record.StartLine); targetLine != -1 { + a.hitCounts[targetLine] += record.HitCount } } |
