88 lines
1.9 KiB
Go
88 lines
1.9 KiB
Go
package watch
|
|
|
|
import (
|
|
"fmt"
|
|
"math"
|
|
"time"
|
|
|
|
"github.com/onsi/ginkgo/ginkgo/testsuite"
|
|
)
|
|
|
|
type Suite struct {
|
|
Suite testsuite.TestSuite
|
|
RunTime time.Time
|
|
Dependencies Dependencies
|
|
|
|
sharedPackageHashes *PackageHashes
|
|
}
|
|
|
|
func NewSuite(suite testsuite.TestSuite, maxDepth int, sharedPackageHashes *PackageHashes) (*Suite, error) {
|
|
deps, err := NewDependencies(suite.Path, maxDepth)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
sharedPackageHashes.Add(suite.Path)
|
|
for dep := range deps.Dependencies() {
|
|
sharedPackageHashes.Add(dep)
|
|
}
|
|
|
|
return &Suite{
|
|
Suite: suite,
|
|
Dependencies: deps,
|
|
|
|
sharedPackageHashes: sharedPackageHashes,
|
|
}, nil
|
|
}
|
|
|
|
func (s *Suite) Delta() float64 {
|
|
delta := s.delta(s.Suite.Path, true, 0) * 1000
|
|
for dep, depth := range s.Dependencies.Dependencies() {
|
|
delta += s.delta(dep, false, depth)
|
|
}
|
|
return delta
|
|
}
|
|
|
|
func (s *Suite) MarkAsRunAndRecomputedDependencies(maxDepth int) error {
|
|
s.RunTime = time.Now()
|
|
|
|
deps, err := NewDependencies(s.Suite.Path, maxDepth)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
s.sharedPackageHashes.Add(s.Suite.Path)
|
|
for dep := range deps.Dependencies() {
|
|
s.sharedPackageHashes.Add(dep)
|
|
}
|
|
|
|
s.Dependencies = deps
|
|
|
|
return nil
|
|
}
|
|
|
|
func (s *Suite) Description() string {
|
|
numDeps := len(s.Dependencies.Dependencies())
|
|
pluralizer := "ies"
|
|
if numDeps == 1 {
|
|
pluralizer = "y"
|
|
}
|
|
return fmt.Sprintf("%s [%d dependenc%s]", s.Suite.Path, numDeps, pluralizer)
|
|
}
|
|
|
|
func (s *Suite) delta(packagePath string, includeTests bool, depth int) float64 {
|
|
return math.Max(float64(s.dt(packagePath, includeTests)), 0) / float64(depth+1)
|
|
}
|
|
|
|
func (s *Suite) dt(packagePath string, includeTests bool) time.Duration {
|
|
packageHash := s.sharedPackageHashes.Get(packagePath)
|
|
var modifiedTime time.Time
|
|
if includeTests {
|
|
modifiedTime = packageHash.TestModifiedTime
|
|
} else {
|
|
modifiedTime = packageHash.CodeModifiedTime
|
|
}
|
|
|
|
return modifiedTime.Sub(s.RunTime)
|
|
}
|