zaebalsaаа

This commit is contained in:
itexpert228 2026-03-15 17:24:01 +03:00
parent 1f9699ecc4
commit aa1c40a148
No known key found for this signature in database
5 changed files with 22 additions and 15 deletions

View file

@ -100,7 +100,7 @@ func (s *OptimizedAutoBuildSession) initialize() error {
fmt.Printf("🚀 Initializing fast dependency resolver...\n")
// Initialize global resolver (singleton)
r, err := resolver.GetGlobalResolver(s.cacheDir, "https://deb.debian.org/debian", "stable", "main")
r, err := resolver.GetResolver(s.cacheDir, "https://deb.debian.org/debian", "stable", "main")
if err != nil {
fmt.Printf("⚠️ Failed to initialize global resolver: %v (will use fallback)\n", err)
// Continue with fallback resolver

View file

@ -111,6 +111,9 @@ func (idx *PackageIndex) AddPackage(entry *PackageEntry) {
defer idx.mu.Unlock()
idx.packages[entry.Package] = entry
// Mark index as updated so IsExpired() works correctly and
// we don't re-parse Sources.xz on every program run.
idx.lastUpdate = time.Now()
// Index binaries for fast lookup
for _, binary := range entry.Binaries {

View file

@ -52,7 +52,7 @@ func (l *PackageLoader) LoadSources(mirror, suite, component string) error {
fmt.Printf("✅ Using fresh cache: %d packages, %d binaries\n", pkgCount, binCount)
// Load into global resolver (singleton)
if _, err := resolver.GetGlobalResolver(l.cacheDir, mirror, suite, component); err != nil {
if _, err := resolver.GetResolver(l.cacheDir, mirror, suite, component); err != nil {
return fmt.Errorf("failed to load global resolver: %w", err)
}
@ -76,7 +76,7 @@ func (l *PackageLoader) LoadSources(mirror, suite, component string) error {
fmt.Printf("✅ Loaded %d packages, %d binaries\n", pkgCount, binCount)
// Load into global resolver (singleton)
if _, err := resolver.GetGlobalResolver(l.cacheDir, mirror, suite, component); err != nil {
if _, err := resolver.GetResolver(l.cacheDir, mirror, suite, component); err != nil {
return fmt.Errorf("failed to load global resolver: %w", err)
}

View file

@ -12,12 +12,10 @@ var (
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) {
// 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)
@ -42,3 +40,9 @@ func GetGlobalResolver(cacheDir, mirror, suite, component string) (*FastResolver
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)
}

View file

@ -20,14 +20,14 @@ func main() {
// Remove any existing cache
os.RemoveAll(cacheDir)
// Test 1: Multiple GetGlobalResolver calls should only parse once
fmt.Printf("\n📦 Test 1: Multiple GetGlobalResolver calls...\n")
// Test 1: Multiple GetResolver calls should only parse once
fmt.Printf("\n📦 Test 1: Multiple GetResolver calls...\n")
start := time.Now()
// First call - should parse Sources.xz
// First call - should parse Sources.xz or load JSON cache
fmt.Printf("Call 1: ")
r1, err := resolver.GetGlobalResolver(cacheDir, mirror, suite, component)
r1, err := resolver.GetResolver(cacheDir, mirror, suite, component)
if err != nil {
fmt.Printf("❌ Error: %v\n", err)
return
@ -38,7 +38,7 @@ func main() {
// Second call - should be instant
start = time.Now()
fmt.Printf("Call 2: ")
r2, err := resolver.GetGlobalResolver(cacheDir, mirror, suite, component)
r2, err := resolver.GetResolver(cacheDir, mirror, suite, component)
if err != nil {
fmt.Printf("❌ Error: %v\n", err)
return
@ -49,7 +49,7 @@ func main() {
// Third call - should also be instant
start = time.Now()
fmt.Printf("Call 3: ")
r3, err := resolver.GetGlobalResolver(cacheDir, mirror, suite, component)
r3, err := resolver.GetResolver(cacheDir, mirror, suite, component)
if err != nil {
fmt.Printf("❌ Error: %v\n", err)
return
@ -116,6 +116,6 @@ func main() {
fmt.Printf("\n📋 Expected behavior:\n")
fmt.Printf("• LoadIndex() should execute only once inside sync.Once\n")
fmt.Printf("• Subsequent GetGlobalResolver() calls should be <1ms\n")
fmt.Printf("• Subsequent GetResolver() calls should be <1ms\n")
fmt.Printf("• Dependency resolutions should not trigger re-parsing\n")
}