diff options
| author | Paul Buetow <paul@buetow.org> | 2025-06-24 01:21:35 +0300 |
|---|---|---|
| committer | Paul Buetow <paul@buetow.org> | 2025-06-24 01:21:35 +0300 |
| commit | bfc52a37f0650e0d8cf727f5998882a3bcebbe0c (patch) | |
| tree | 1e6d807f6aab2b491f0a4b1c705416b8242e87dd /internal/sync/sync.go | |
| parent | 8b007ab16b272a718f1cd04afcd5f4fab02714ce (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.go | 16 |
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 } |
