summaryrefslogtreecommitdiff
path: root/internal/sync/sync.go
diff options
context:
space:
mode:
authorPaul Buetow <paul@buetow.org>2025-06-24 01:21:35 +0300
committerPaul Buetow <paul@buetow.org>2025-06-24 01:21:35 +0300
commitbfc52a37f0650e0d8cf727f5998882a3bcebbe0c (patch)
tree1e6d807f6aab2b491f0a4b1c705416b8242e87dd /internal/sync/sync.go
parent8b007ab16b272a718f1cd04afcd5f4fab02714ce (diff)
feat: add abandoned branch detection and reporting
Automatically detects and reports abandoned branches during sync operations: - Branches are considered abandoned if they have no commits for 6+ months - Only reports on active repositories (main/master updated within last year) - Shows individual reports during sync of each repository - Displays comprehensive summary after sync-all operations - Provides helpful cleanup commands for removing old branches This helps maintain cleaner repositories by identifying stale branches that may no longer be needed. Example output: 🔍 Abandoned branches in dtail: Main branch last updated: 2025-04-17 Found 1 abandoned branches (no commits for 6+ months): - develop (last commit: 2023-10-05, No commits for 628 days) 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com>
Diffstat (limited to 'internal/sync/sync.go')
-rw-r--r--internal/sync/sync.go16
1 files changed, 16 insertions, 0 deletions
diff --git a/internal/sync/sync.go b/internal/sync/sync.go
index c7f17e0..4d46ca8 100644
--- a/internal/sync/sync.go
+++ b/internal/sync/sync.go
@@ -15,6 +15,7 @@ type Syncer struct {
config *config.Config
workDir string
repoName string
+ abandonedReports map[string]*AbandonedBranchReport // Collects reports across repos
}
// CLAUDE: Is there a reason, we return a pointer to Syncer?
@@ -23,6 +24,7 @@ func New(cfg *config.Config, workDir string) *Syncer {
return &Syncer{
config: cfg,
workDir: workDir,
+ abandonedReports: make(map[string]*AbandonedBranchReport),
}
}
@@ -68,6 +70,20 @@ func (s *Syncer) SyncRepository(repoName string) error {
return err
}
+ // Analyze abandoned branches
+ report, err := s.analyzeAbandonedBranches()
+ if err != nil {
+ // Don't fail sync, just log the error
+ fmt.Printf("Warning: Failed to analyze abandoned branches: %v\n", err)
+ } else {
+ // Store the report for summary
+ s.abandonedReports[repoName] = report
+ // Print individual report if not empty
+ if reportStr := formatAbandonedBranchReport(report, repoName); reportStr != "" {
+ fmt.Print(reportStr)
+ }
+ }
+
fmt.Printf("\nRepository %s synchronized successfully!\n", repoName)
return nil
}