summaryrefslogtreecommitdiff
path: root/internal/cli/showcase_only_handler.go
diff options
context:
space:
mode:
Diffstat (limited to 'internal/cli/showcase_only_handler.go')
-rw-r--r--internal/cli/showcase_only_handler.go152
1 files changed, 76 insertions, 76 deletions
diff --git a/internal/cli/showcase_only_handler.go b/internal/cli/showcase_only_handler.go
index 2055612..1a2a835 100644
--- a/internal/cli/showcase_only_handler.go
+++ b/internal/cli/showcase_only_handler.go
@@ -14,90 +14,90 @@ import (
// HandleShowcaseOnly handles showcase generation without syncing
// It will clone repositories if they don't exist locally, but won't sync changes
func HandleShowcaseOnly(cfg *config.Config, flags *Flags) int {
- // If a specific repo is requested, only generate for that repo
- if flags.SyncRepo != "" {
- repo := flags.SyncRepo
-
- // Ensure the repository is cloned
- syncer := sync.New(cfg, flags.WorkDir)
- syncer.SetBackupEnabled(false)
- if err := syncer.EnsureRepositoryCloned(repo); err != nil {
- fmt.Printf("ERROR: Failed to clone %s: %v\n", repo, err)
- return 1
- }
-
- // Generate showcase for just this repository
- fmt.Printf("\nGenerating showcase for repository: %s...\n", repo)
- generator := showcase.New(cfg, flags.WorkDir)
- if flags.AITool != "" {
- generator.SetAITool(flags.AITool)
- }
- if err := generator.GenerateShowcase([]string{repo}, flags.Force); err != nil {
- log.Printf("ERROR: Failed to generate showcase for %s: %v\n", repo, err)
- return 1
- }
- fmt.Println("Showcase generation completed!")
- return 0
- }
-
- // Otherwise, process all repositories
- allRepos, err := getAllRepositories(cfg)
- if err != nil {
- log.Printf("ERROR: Failed to get repositories: %v\n", err)
- return 1
- }
- if len(allRepos) == 0 {
- fmt.Println("No repositories found")
- return 1
- }
- fmt.Printf("Found %d repositories total\n", len(allRepos))
-
- // Create a minimal syncer just for cloning
- syncer := sync.New(cfg, flags.WorkDir)
- syncer.SetBackupEnabled(false) // Never use backup in showcase-only mode
-
- // Ensure repositories are cloned (but not synced)
- fmt.Println("\nEnsuring repositories are cloned locally...")
- for _, repo := range allRepos {
- if err := syncer.EnsureRepositoryCloned(repo); err != nil {
- fmt.Printf("WARNING: Failed to clone %s: %v\n", repo, err)
- // Continue with other repos
- }
- }
-
- // Generate showcase for all repositories
- fmt.Println("\nGenerating showcase for all repositories...")
- generator := showcase.New(cfg, flags.WorkDir)
-
- // Set AI tool if specified
- if flags.AITool != "" {
- generator.SetAITool(flags.AITool)
- }
-
- // Pass empty filter to process all repos
- if err := generator.GenerateShowcase(nil, flags.Force); err != nil {
- log.Printf("ERROR: Failed to generate showcase: %v\n", err)
- return 1
- }
-
- fmt.Println("Showcase generation completed!")
- return 0
+ // If a specific repo is requested, only generate for that repo
+ if flags.SyncRepo != "" {
+ repo := flags.SyncRepo
+
+ // Ensure the repository is cloned
+ syncer := sync.New(cfg, flags.WorkDir)
+ syncer.SetBackupEnabled(false)
+ if err := syncer.EnsureRepositoryCloned(repo); err != nil {
+ fmt.Printf("ERROR: Failed to clone %s: %v\n", repo, err)
+ return 1
+ }
+
+ // Generate showcase for just this repository
+ fmt.Printf("\nGenerating showcase for repository: %s...\n", repo)
+ generator := showcase.New(cfg, flags.WorkDir)
+ if flags.AITool != "" {
+ generator.SetAITool(flags.AITool)
+ }
+ if err := generator.GenerateShowcase([]string{repo}, flags.Force); err != nil {
+ log.Printf("ERROR: Failed to generate showcase for %s: %v\n", repo, err)
+ return 1
+ }
+ fmt.Println("Showcase generation completed!")
+ return 0
+ }
+
+ // Otherwise, process all repositories
+ allRepos, err := getAllRepositories(cfg)
+ if err != nil {
+ log.Printf("ERROR: Failed to get repositories: %v\n", err)
+ return 1
+ }
+ if len(allRepos) == 0 {
+ fmt.Println("No repositories found")
+ return 1
+ }
+ fmt.Printf("Found %d repositories total\n", len(allRepos))
+
+ // Create a minimal syncer just for cloning
+ syncer := sync.New(cfg, flags.WorkDir)
+ syncer.SetBackupEnabled(false) // Never use backup in showcase-only mode
+
+ // Ensure repositories are cloned (but not synced)
+ fmt.Println("\nEnsuring repositories are cloned locally...")
+ for _, repo := range allRepos {
+ if err := syncer.EnsureRepositoryCloned(repo); err != nil {
+ fmt.Printf("WARNING: Failed to clone %s: %v\n", repo, err)
+ // Continue with other repos
+ }
+ }
+
+ // Generate showcase for all repositories
+ fmt.Println("\nGenerating showcase for all repositories...")
+ generator := showcase.New(cfg, flags.WorkDir)
+
+ // Set AI tool if specified
+ if flags.AITool != "" {
+ generator.SetAITool(flags.AITool)
+ }
+
+ // Pass empty filter to process all repos
+ if err := generator.GenerateShowcase(nil, flags.Force); err != nil {
+ log.Printf("ERROR: Failed to generate showcase: %v\n", err)
+ return 1
+ }
+
+ fmt.Println("Showcase generation completed!")
+ return 0
}
// getAllRepositories collects all unique repository names from all sources
func getAllRepositories(cfg *config.Config) ([]string, error) {
repoMap := make(map[string]bool)
-
+
// Add configured repositories
for _, repo := range cfg.Repositories {
repoMap[repo] = true
}
-
+
// Add Codeberg public repos if configured
if codebergOrg := cfg.FindCodebergOrg(); codebergOrg != nil {
fmt.Printf("Fetching public repositories from Codeberg user/org: %s...\n", codebergOrg.Name)
client := codeberg.NewClient(codebergOrg.Name, codebergOrg.CodebergToken)
-
+
repos, err := client.ListPublicRepos()
if err != nil {
// Try as user
@@ -106,17 +106,17 @@ func getAllRepositories(cfg *config.Config) ([]string, error) {
fmt.Printf("Warning: Failed to fetch Codeberg repos: %v\n", err)
}
}
-
+
for _, repo := range repos {
repoMap[repo.Name] = true
}
}
-
+
// Add GitHub public repos if configured
if githubOrg := cfg.FindGitHubOrg(); githubOrg != nil {
fmt.Printf("Fetching public repositories from GitHub user/org: %s...\n", githubOrg.Name)
client := github.NewClient(githubOrg.GitHubToken, githubOrg.Name)
-
+
if client.HasToken() {
repos, err := client.ListPublicRepos()
if err != nil {
@@ -130,12 +130,12 @@ func getAllRepositories(cfg *config.Config) ([]string, error) {
fmt.Println("Warning: No GitHub token found, skipping GitHub repos")
}
}
-
+
// Convert map to slice
var allRepos []string
for repo := range repoMap {
allRepos = append(allRepos, repo)
}
-
+
return allRepos, nil
}