feat(merge): Export Merge3WayWithTTL for configurable tombstone TTL (bd-6rl)

This commit is contained in:
Steve Yegge
2025-12-25 22:45:32 -08:00
parent 19a182a26a
commit f6c739f75e
2 changed files with 7 additions and 5 deletions

View File

@@ -292,12 +292,14 @@ func IsExpiredTombstone(issue Issue, ttl time.Duration) bool {
}
func merge3Way(base, left, right []Issue) ([]Issue, []string) {
return merge3WayWithTTL(base, left, right, DefaultTombstoneTTL)
return Merge3WayWithTTL(base, left, right, DefaultTombstoneTTL)
}
// merge3WayWithTTL performs a 3-way merge with configurable tombstone TTL.
// Merge3WayWithTTL performs a 3-way merge with configurable tombstone TTL.
// This is the core merge function that handles tombstone semantics.
func merge3WayWithTTL(base, left, right []Issue, ttl time.Duration) ([]Issue, []string) {
// Use this when you need to configure TTL for testing, debugging, or
// per-repository configuration. For default TTL behavior, use merge3Way.
func Merge3WayWithTTL(base, left, right []Issue, ttl time.Duration) ([]Issue, []string) {
// Build maps for quick lookup by IssueKey
baseMap := make(map[IssueKey]Issue)
for _, issue := range base {

View File

@@ -1648,7 +1648,7 @@ func TestMerge3WayWithTTL(t *testing.T) {
left := []Issue{tombstone}
right := []Issue{liveIssue}
result, _ := merge3WayWithTTL(base, left, right, shortTTL)
result, _ := Merge3WayWithTTL(base, left, right, shortTTL)
if len(result) != 1 {
t.Fatalf("expected 1 issue, got %d", len(result))
}
@@ -1665,7 +1665,7 @@ func TestMerge3WayWithTTL(t *testing.T) {
left := []Issue{tombstone}
right := []Issue{liveIssue}
result, _ := merge3WayWithTTL(base, left, right, longTTL)
result, _ := Merge3WayWithTTL(base, left, right, longTTL)
if len(result) != 1 {
t.Fatalf("expected 1 issue, got %d", len(result))
}