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, ) }