package resolver import ( "fmt" "log" "sync" ) var ( globalResolver *FastResolver resolverOnce sync.Once resolverErr error ) // GetGlobalResolver returns a singleton FastResolver instance. // Sources.xz will only be parsed once per process. func GetGlobalResolver(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 }