zsvo/pkg/resolver/global_resolver.go
2026-03-15 17:24:01 +03:00

48 lines
1.2 KiB
Go

package resolver
import (
"fmt"
"log"
"sync"
)
var (
globalResolver *FastResolver
resolverOnce sync.Once
resolverErr error
)
// GetResolver returns a process-wide singleton FastResolver instance.
// Package index loading (and thus Sources.xz parsing) will happen at most once per process.
func GetResolver(cacheDir, mirror, suite, component string) (*FastResolver, error) {
resolverOnce.Do(func() {
log.Println("[resolver] Initializing global resolver (loading package index)")
r := NewFastResolver(cacheDir)
if err := r.LoadIndex(mirror, suite, component); err != nil {
resolverErr = fmt.Errorf("failed to load package index: %w", err)
return
}
globalResolver = r
log.Println("[resolver] Global resolver initialized successfully")
})
if resolverErr != nil {
return nil, resolverErr
}
if globalResolver == nil {
return nil, fmt.Errorf("resolver initialization failed")
}
return globalResolver, nil
}
// GetGlobalResolver is kept for backward compatibility.
// New code should use GetResolver instead.
func GetGlobalResolver(cacheDir, mirror, suite, component string) (*FastResolver, error) {
return GetResolver(cacheDir, mirror, suite, component)
}