72 lines
1.6 KiB
Go
72 lines
1.6 KiB
Go
package controllers
|
|
|
|
import (
|
|
"fmt"
|
|
"log"
|
|
"os"
|
|
"path/filepath"
|
|
|
|
ent "repodiff/entities"
|
|
"repodiff/mappers"
|
|
"repodiff/persistence/filesystem"
|
|
"repodiff/repositories"
|
|
"repodiff/utils"
|
|
)
|
|
|
|
func GenerateCommitReport(appConfig ent.ApplicationConfig) error {
|
|
for _, target := range appConfig.DiffTargets {
|
|
if err := generateCommitReport(appConfig, target); err != nil {
|
|
return err
|
|
}
|
|
}
|
|
return nil
|
|
}
|
|
|
|
func generateCommitReport(appConfig ent.ApplicationConfig, target ent.DiffTarget) error {
|
|
log.Printf("Generating commit report for (upstream) %s vs (downstream) %s\n", target.Upstream.Branch, target.Downstream.Branch)
|
|
sourceRepo, err := repositories.NewSourceRepository()
|
|
if err != nil {
|
|
return err
|
|
}
|
|
mappedTarget, err := sourceRepo.DiffTargetToMapped(target)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
// TODO export the commitRepository type in order to add the possibility of helpers
|
|
commitRepo, err := repositories.NewCommitRepository(mappedTarget)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
commitRows, err := commitRepo.GetMostRecentCommits()
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
dir := filepath.Join(appConfig.OutputDirectory, "reports")
|
|
fname := filepath.Join(dir, filenameForTarget(target))
|
|
os.MkdirAll(dir, os.ModePerm)
|
|
log.Printf("Writing to file %s\n", fname)
|
|
|
|
if err := filesystem.WriteCSVToFile(
|
|
mappers.CommitCSVHeader(),
|
|
mappers.CommitEntitiesToCSVRows(commitRows),
|
|
fname,
|
|
); err != nil {
|
|
return err
|
|
}
|
|
return nil
|
|
}
|
|
|
|
func filenameForTarget(target ent.DiffTarget) string {
|
|
return fmt.Sprintf(
|
|
"%s_upstream-%s_vs_downstream-%s.csv",
|
|
utils.TimestampToDate(
|
|
utils.TimestampSeconds(),
|
|
),
|
|
target.Upstream.Branch,
|
|
target.Downstream.Branch,
|
|
)
|
|
|
|
}
|