Browse Source

Warn about weird dates

Signed-off-by: Vadim Markovtsev <vadim@sourced.tech>
Vadim Markovtsev 6 years ago
parent
commit
c199aae2c2
3 changed files with 45 additions and 5 deletions
  1. 11 2
      internal/plumbing/day.go
  2. 31 0
      internal/plumbing/day_test.go
  3. 3 3
      internal/test/repository.go

+ 11 - 2
internal/plumbing/day.go

@@ -1,6 +1,7 @@
 package plumbing
 
 import (
+	"log"
 	"time"
 
 	"gopkg.in/src-d/go-git.v4"
@@ -13,6 +14,7 @@ import (
 // It is a PipelineItem.
 type DaysSinceStart struct {
 	core.NoopMerger
+	remote      string
 	day0        *time.Time
 	previousDay int
 	commits     map[int][]plumbing.Hash
@@ -75,6 +77,9 @@ func (days *DaysSinceStart) Initialize(repository *git.Repository) error {
 			delete(days.commits, key)
 		}
 	}
+	if r, err := repository.Remotes(); err == nil && len(r) > 0 {
+		days.remote = r[0].Config().URLs[0]
+	}
 	return nil
 }
 
@@ -88,9 +93,13 @@ func (days *DaysSinceStart) Consume(deps map[string]interface{}) (map[string]int
 	index := deps[core.DependencyIndex].(int)
 	if index == 0 {
 		// first iteration - initialize the file objects from the tree
-		*days.day0 = commit.Committer.When
 		// our precision is 1 day
-		*days.day0 = days.day0.Truncate(24 * time.Hour)
+		*days.day0 = commit.Committer.When.Truncate(24 * time.Hour)
+		if days.day0.Unix() < 631152000 { // 01.01.1990, that was 30 years ago
+			log.Println()
+			log.Printf("Warning: suspicious committer timestamp in %s > %s",
+				days.remote, commit.Hash.String())
+		}
 	}
 	day := int(commit.Committer.When.Sub(*days.day0).Hours() / 24)
 	if day < days.previousDay {

+ 31 - 0
internal/plumbing/day_test.go

@@ -1,7 +1,11 @@
 package plumbing
 
 import (
+	"bytes"
+	"log"
+	"os"
 	"testing"
+	"time"
 
 	"github.com/stretchr/testify/assert"
 	"gopkg.in/src-d/go-git.v4/plumbing"
@@ -123,3 +127,30 @@ func TestDaysSinceStartFork(t *testing.T) {
 	// just for the sake of it
 	dss1.Merge([]core.PipelineItem{dss2})
 }
+
+func TestDaysSinceStartConsumeZero(t *testing.T) {
+	dss := fixtureDaysSinceStart()
+	deps := map[string]interface{}{}
+	commit, _ := test.Repository.CommitObject(plumbing.NewHash(
+		"cce947b98a050c6d356bc6ba95030254914027b1"))
+	commit.Committer.When = time.Unix(0, 0)
+	deps[core.DependencyCommit] = commit
+	deps[core.DependencyIndex] = 0
+	// print warning to log
+	myOutput := &bytes.Buffer{}
+	log.SetOutput(myOutput)
+	defer func() {
+		log.SetOutput(os.Stderr)
+	}()
+	res, err := dss.Consume(deps)
+	assert.Nil(t, err)
+	assert.Contains(t, myOutput.String(), "Warning")
+	assert.Contains(t, myOutput.String(), "cce947b98a050c6d356bc6ba95030254914027b1")
+	assert.Contains(t, myOutput.String(), "hercules")
+	assert.Contains(t, myOutput.String(), "github.com")
+	assert.Equal(t, res[DependencyDay].(int), 0)
+	assert.Equal(t, dss.previousDay, 0)
+	assert.Equal(t, dss.day0.Year(), 1970)
+	assert.Equal(t, dss.day0.Minute(), 0)
+	assert.Equal(t, dss.day0.Second(), 0)
+}

+ 3 - 3
internal/test/repository.go

@@ -2,14 +2,14 @@ package test
 
 import (
 	"io"
+	"io/ioutil"
 	"os"
+	"path"
 
-	git "gopkg.in/src-d/go-git.v4"
+	"gopkg.in/src-d/go-git.v4"
 	"gopkg.in/src-d/go-git.v4/plumbing"
 	"gopkg.in/src-d/go-git.v4/plumbing/object"
 	"gopkg.in/src-d/go-git.v4/storage/memory"
-	"io/ioutil"
-	"path"
 )
 
 // Repository is a boilerplate sample repository (Hercules itself).