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") fmt.Printf("🚀 Initializing fast dependency resolver...\n")
// Initialize global resolver (singleton) // 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 { if err != nil {
fmt.Printf("⚠️ Failed to initialize global resolver: %v (will use fallback)\n", err) fmt.Printf("⚠️ Failed to initialize global resolver: %v (will use fallback)\n", err)
// Continue with fallback resolver // Continue with fallback resolver

View file

@ -111,6 +111,9 @@ func (idx *PackageIndex) AddPackage(entry *PackageEntry) {
defer idx.mu.Unlock() defer idx.mu.Unlock()
idx.packages[entry.Package] = entry 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 // Index binaries for fast lookup
for _, binary := range entry.Binaries { 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) fmt.Printf("✅ Using fresh cache: %d packages, %d binaries\n", pkgCount, binCount)
// Load into global resolver (singleton) // 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) 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) fmt.Printf("✅ Loaded %d packages, %d binaries\n", pkgCount, binCount)
// Load into global resolver (singleton) // 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) return fmt.Errorf("failed to load global resolver: %w", err)
} }

View file

@ -12,12 +12,10 @@ var (
resolverErr error resolverErr error
) )
// GetGlobalResolver returns a singleton FastResolver instance. // GetResolver returns a process-wide singleton FastResolver instance.
// Sources.xz will only be parsed once per process. // Package index loading (and thus Sources.xz parsing) will happen at most once per process.
func GetGlobalResolver(cacheDir, mirror, suite, component string) (*FastResolver, error) { func GetResolver(cacheDir, mirror, suite, component string) (*FastResolver, error) {
resolverOnce.Do(func() { resolverOnce.Do(func() {
log.Println("[resolver] Initializing global resolver (loading package index)") log.Println("[resolver] Initializing global resolver (loading package index)")
r := NewFastResolver(cacheDir) r := NewFastResolver(cacheDir)
@ -42,3 +40,9 @@ func GetGlobalResolver(cacheDir, mirror, suite, component string) (*FastResolver
return globalResolver, nil 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 // Remove any existing cache
os.RemoveAll(cacheDir) os.RemoveAll(cacheDir)
// Test 1: Multiple GetGlobalResolver calls should only parse once // Test 1: Multiple GetResolver calls should only parse once
fmt.Printf("\n📦 Test 1: Multiple GetGlobalResolver calls...\n") fmt.Printf("\n📦 Test 1: Multiple GetResolver calls...\n")
start := time.Now() start := time.Now()
// First call - should parse Sources.xz // First call - should parse Sources.xz or load JSON cache
fmt.Printf("Call 1: ") fmt.Printf("Call 1: ")
r1, err := resolver.GetGlobalResolver(cacheDir, mirror, suite, component) r1, err := resolver.GetResolver(cacheDir, mirror, suite, component)
if err != nil { if err != nil {
fmt.Printf("❌ Error: %v\n", err) fmt.Printf("❌ Error: %v\n", err)
return return
@ -38,7 +38,7 @@ func main() {
// Second call - should be instant // Second call - should be instant
start = time.Now() start = time.Now()
fmt.Printf("Call 2: ") fmt.Printf("Call 2: ")
r2, err := resolver.GetGlobalResolver(cacheDir, mirror, suite, component) r2, err := resolver.GetResolver(cacheDir, mirror, suite, component)
if err != nil { if err != nil {
fmt.Printf("❌ Error: %v\n", err) fmt.Printf("❌ Error: %v\n", err)
return return
@ -49,7 +49,7 @@ func main() {
// Third call - should also be instant // Third call - should also be instant
start = time.Now() start = time.Now()
fmt.Printf("Call 3: ") fmt.Printf("Call 3: ")
r3, err := resolver.GetGlobalResolver(cacheDir, mirror, suite, component) r3, err := resolver.GetResolver(cacheDir, mirror, suite, component)
if err != nil { if err != nil {
fmt.Printf("❌ Error: %v\n", err) fmt.Printf("❌ Error: %v\n", err)
return return
@ -116,6 +116,6 @@ func main() {
fmt.Printf("\n📋 Expected behavior:\n") fmt.Printf("\n📋 Expected behavior:\n")
fmt.Printf("• LoadIndex() should execute only once inside sync.Once\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") fmt.Printf("• Dependency resolutions should not trigger re-parsing\n")
} }