// profileToReport is a helper function that converts the merged coverage // report to the Report JSON format expected by the coverage server. func profileToReport(profiles []*cover.Profile) *client.Report { report := client.Report{} report.Files = make([]*client.File, len(profiles), len(profiles)) for i, profile := range profiles { file := client.File{ Mode: profile.Mode, FileName: profile.FileName, } file.Blocks = make([]*client.Block, len(profile.Blocks), len(profile.Blocks)) for ii, block := range profile.Blocks { file.Blocks[ii] = &client.Block{ StartLine: block.StartLine, StartCol: block.StartCol, EndLine: block.EndLine, EndCol: block.EndCol, NumStmt: block.NumStmt, Count: block.Count, } } covered, total, percent := percentCovered(profile) file.Lines = total file.Covered = covered file.Coverage = percent report.Files[i] = &file report.Lines += file.Lines report.Covered += file.Covered } if report.Lines != 0 { report.Coverage = float64(report.Covered) / float64(report.Lines) * float64(100) } return &report }
func findFileReferences(report *client.Report, base string) { var files []*client.File // normalize the file path based on the working directory // also ignore any files outside of the directory for _, file := range report.Files { fileName := file.FileName var prefix string if path.IsAbs(fileName) { if !strings.HasPrefix(fileName, base) { logrus.Warningf("File referenced in coverage not found at %s", fileName) continue } prefix = base } else if _, err := os.Stat(fileName); err == nil { logrus.Debugf("File found at relative path %s", fileName) prefix = "" } else { var err error prefix, err = coverage.PathPrefix(fileName, base) if err != nil { // See if file is on disk logrus.Warningf("File referenced in coverage not found at %s", fileName) continue } logrus.Debugf("Found common path at %s", prefix) } // Add the file to the report file.FileName = strings.TrimPrefix(fileName, prefix) files = append(files, file) } report.Files = files }