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) }