Skip to content
Open
Show file tree
Hide file tree
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion cmd/main.go
Original file line number Diff line number Diff line change
Expand Up @@ -51,7 +51,7 @@ func gcovmain() int {
defer outfile.Close()
}

var pathResolverFunc func(string) string
var pathResolverFunc gcov2lcov.PathResolver
if *useAbsoluteSourcePath {
pathResolverFunc = gcov2lcov.AbsolutePathResolver
} else {
Expand Down
25 changes: 15 additions & 10 deletions gcov2kov.go → gcov2lcov.go
Original file line number Diff line number Diff line change
Expand Up @@ -40,24 +40,31 @@ type cacheEntry struct {

var pkgCache = map[string]cacheEntry{}

func ConvertCoverage(in io.Reader, out io.Writer, pathResolverFunc func(string) string) error {
type PathResolver func(name string) (string, error)

func ConvertCoverage(in io.Reader, out io.Writer, pathResolverFunc PathResolver) error {
blocks, err := parseCoverage(in, pathResolverFunc)
if err != nil {
return err
}
return writeLcov(blocks, out)
}

func AbsolutePathResolver(name string) string {
return name
func AbsolutePathResolver(name string) (string, error) {
Copy link
Owner

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think the name is a little bit misleading and should have been named something like IdentityPathResolver since the function does not actually change or make a path absolute (as can be seen in the test)

return name, nil
}

func RelativePathResolver(name string) string {
func RelativePathResolver(name string) (string, error) {
name, err := findFile(name)
if err != nil {
return "", err
}

if dir, ok := findRepositoryRoot(name); ok {
filename := strings.TrimPrefix(name, dir+string(os.PathSeparator))
return filename
return filename, nil
}
return name
return name, nil
}

// given a module+file spec (e.g. github.com/jandelgado/gcov2lcov/main.go),
Expand Down Expand Up @@ -210,7 +217,7 @@ func parseCoverageLine(line string) (string, *block, error) {
return path[0], b, err
}

func parseCoverage(coverage io.Reader, pathResolverFunc func(string) string) (map[string][]*block, error) {
func parseCoverage(coverage io.Reader, pathResolverFunc PathResolver) (map[string][]*block, error) {
scanner := bufio.NewScanner(coverage)
blocks := map[string][]*block{}
for scanner.Scan() {
Expand All @@ -219,14 +226,12 @@ func parseCoverage(coverage io.Reader, pathResolverFunc func(string) string) (ma
continue
}
if f, b, err := parseCoverageLine(line); err == nil {
f, err := findFile(f)
f, err = pathResolverFunc(f)
if err != nil {
log.Printf("warn: %v", err)
continue
}

f = pathResolverFunc(f)

// Make sure the filePath is a key in the map.
if _, found := blocks[f]; !found {
blocks[f] = []*block{}
Expand Down
10 changes: 4 additions & 6 deletions gcov2lcov_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,6 @@ package gcov2lcov
import (
"bytes"
"github.com/stretchr/testify/assert"
"os"
"strings"
"testing"
)
Expand Down Expand Up @@ -100,12 +99,11 @@ end_of_record
}

func TestPathResolverFunc(t *testing.T) {
pwd, err := os.Getwd()
name, err := RelativePathResolver("github.com/jandelgado/gcov2lcov/cmd/main.go")
assert.NoError(t, err)

name := RelativePathResolver(pwd + "/cmd/main.go")
assert.Equal(t, "cmd/main.go", name)

name = AbsolutePathResolver(pwd + "/cmd/main.go")
assert.Equal(t, pwd+"/cmd/main.go", name)
name, err = AbsolutePathResolver("github.com/jandelgado/gcov2lcov/cmd/main.go")
assert.NoError(t, err)
assert.Equal(t, "github.com/jandelgado/gcov2lcov/cmd/main.go", name)
}