diff --git a/cli/generate.go b/cli/generate.go index 497dba0..c24f074 100644 --- a/cli/generate.go +++ b/cli/generate.go @@ -40,25 +40,16 @@ func Generate(force bool, debug bool, repoKey string) bson.M { log.Panic(err) } repositories = []repoHelper.Repository{repository} + } else if force { + repositories = database.GetRepositories() } else { - repositories = database.GetValidRepositories() + repositories = database.GetRepositoriesToGenerate() } log.Printf("Generating vim preview for %d repositories", len(repositories)) - var generateCount int - - for _, repository := range repositories { - fmt.Println() - - log.Print("Generating vim previews for ", repository.Owner.Name, "/", repository.Name) - - if !force && repository.GeneratedAt.After(repository.GithubUpdatedAt) { - log.Print("Repository is not due for a generate") - continue - } - - generateCount++ + for index, repository := range repositories { + log.Print("\nGenerating vim previews for ", repository.Owner.Name, "/", repository.Name, " (", index+1, "/", len(repositories), ")") key := fmt.Sprintf("%s__%s", repository.Owner.Name, repository.Name) err := installPlugin(repository.GithubURL, key) @@ -112,7 +103,7 @@ func Generate(force bool, debug bool, repoKey string) bson.M { cleanUp() - return bson.M{"repositoryCount": generateCount} + return bson.M{"repositoryCount": len(repositories)} } func updateRepositoryAfterGenerate(repository repoHelper.Repository) { diff --git a/cli/import.go b/cli/import.go index db46d7d..fbcfad6 100644 --- a/cli/import.go +++ b/cli/import.go @@ -78,5 +78,6 @@ func getImportRepositoryObject(repository *gogithub.Repository) bson.M { "description": repository.GetDescription(), "githubURL": repository.GetHTMLURL(), "githubCreatedAt": repository.GetCreatedAt().Time, + "pushedAt": repository.GetPushedAt().Time, } } diff --git a/cli/update.go b/cli/update.go index 62a8e78..3ca0789 100644 --- a/cli/update.go +++ b/cli/update.go @@ -50,7 +50,7 @@ func updateRepository(repository repoHelper.Repository) repoHelper.Repository { return repository } - repository.GithubUpdatedAt = githubRepository.UpdatedAt.Time + repository.PushedAt = githubRepository.PushedAt.Time log.Print("Gathering basic infos") repository.StargazersCount = *githubRepository.StargazersCount @@ -70,7 +70,7 @@ func updateRepository(repository repoHelper.Repository) repoHelper.Repository { func getUpdateRepositoryObject(repository repoHelper.Repository) bson.M { return bson.M{ - "githubUpdatedAt": repository.GithubUpdatedAt, + "pushedAt": repository.PushedAt, "stargazersCount": repository.StargazersCount, "stargazersCountHistory": repository.StargazersCountHistory, "weekStargazersCount": repository.WeekStargazersCount, diff --git a/internal/database/database.go b/internal/database/database.go index 8255d24..1a12b54 100644 --- a/internal/database/database.go +++ b/internal/database/database.go @@ -85,9 +85,10 @@ func GetRepository(repoKey string) (repository.Repository, error) { return repo, nil } -// GetValidRepositories gets repositories stored in the database that are marked as valid -func GetValidRepositories() []repository.Repository { - return getRepositories(bson.M{"updateValid": true}) +// GetRepositoriesToGenerate gets all repositories that are due for a preview +// generate. +func GetRepositoriesToGenerate() []repository.Repository { + return getRepositories(bson.M{"updateValid": true, "$expr": bson.M{"$gt": []string{"$pushedAt", "$generatedAt"}}}) } func getRepositories(filter bson.M) []repository.Repository { diff --git a/internal/repository/repository.go b/internal/repository/repository.go index 6e1bdc1..1dd44bc 100644 --- a/internal/repository/repository.go +++ b/internal/repository/repository.go @@ -20,7 +20,7 @@ type Repository struct { StargazersCountHistory []StargazersCountHistoryItem `bson:"stargazersCountHistory"` WeekStargazersCount int `bson:"weekStargazersCount"` GithubCreatedAt time.Time `bson:"githubCreatedAt"` - GithubUpdatedAt time.Time `bson:"githubUpdatedAt"` + PushedAt time.Time `bson:"pushedAt"` VimColorSchemes []VimColorScheme `bson:"vimColorSchemes,omitempty"` UpdateValid bool `bson:"updateValid"` UpdatedAt time.Time `bson:"updatedAt"` @@ -152,8 +152,8 @@ func (repository Repository) ComputeTrendingStargazersCount(dayCount int) int { // valid from our standards after an update job func (repository Repository) IsValidAfterUpdate() bool { var defaultTime time.Time - if repository.GithubUpdatedAt == defaultTime { - log.Print("Repository last commit at is not valid") + if repository.PushedAt == defaultTime { + log.Print("Repository last commit date is not valid") return false } diff --git a/internal/repository/repository_test.go b/internal/repository/repository_test.go index cc11447..3ffbfb3 100644 --- a/internal/repository/repository_test.go +++ b/internal/repository/repository_test.go @@ -316,7 +316,7 @@ func TestComputeTrendingStargazersCount(t *testing.T) { func TestComputeRepositoryValidityAfterUpdate(t *testing.T) { t.Run("should return valid for a repository that checks all boxes", func(t *testing.T) { var repository Repository - repository.GithubUpdatedAt = time.Now() + repository.PushedAt = time.Now() repository.StargazersCount = 1 repository.StargazersCountHistory = []StargazersCountHistoryItem{{Date: dateUtil.Today(), StargazersCount: 1}} @@ -340,7 +340,7 @@ func TestComputeRepositoryValidityAfterUpdate(t *testing.T) { t.Run("should return invalid for a repository with a non strictly positive stargazers count", func(t *testing.T) { var repository Repository - repository.GithubUpdatedAt = time.Now() + repository.PushedAt = time.Now() repository.StargazersCount = 0 repository.StargazersCountHistory = []StargazersCountHistoryItem{{Date: dateUtil.Today(), StargazersCount: 1}} repository.VimColorSchemes = []VimColorScheme{{Name: "test"}} @@ -353,7 +353,7 @@ func TestComputeRepositoryValidityAfterUpdate(t *testing.T) { t.Run("should return invalid for a repository with an empty stargazers count history", func(t *testing.T) { var repository Repository - repository.GithubUpdatedAt = time.Now() + repository.PushedAt = time.Now() repository.StargazersCount = 1 repository.StargazersCountHistory = []StargazersCountHistoryItem{} repository.VimColorSchemes = []VimColorScheme{{Name: "test"}} @@ -366,7 +366,7 @@ func TestComputeRepositoryValidityAfterUpdate(t *testing.T) { t.Run("should return invalid for a repository with an outdated stargazers count history", func(t *testing.T) { var repository Repository - repository.GithubUpdatedAt = time.Now() + repository.PushedAt = time.Now() repository.StargazersCount = 1 date := time.Date(1990, time.November, 01, 0, 0, 0, 0, time.UTC) repository.StargazersCountHistory = []StargazersCountHistoryItem{{Date: date, StargazersCount: 1}}