mirror of
https://github.com/safedep/pmg.git
synced 2026-08-03 07:24:09 +02:00
fix: Synchronize common data update in dependency resolver
This commit is contained in:
@@ -4,6 +4,7 @@ import (
|
|||||||
"context"
|
"context"
|
||||||
"fmt"
|
"fmt"
|
||||||
"slices"
|
"slices"
|
||||||
|
"sync"
|
||||||
|
|
||||||
packagev1 "buf.build/gen/go/safedep/api/protocolbuffers/go/safedep/messages/package/v1"
|
packagev1 "buf.build/gen/go/safedep/api/protocolbuffers/go/safedep/messages/package/v1"
|
||||||
"github.com/safedep/dry/log"
|
"github.com/safedep/dry/log"
|
||||||
@@ -20,6 +21,7 @@ type dependencyResolverConfig struct {
|
|||||||
type dependencyResolver struct {
|
type dependencyResolver struct {
|
||||||
client packageregistry.Client
|
client packageregistry.Client
|
||||||
config dependencyResolverConfig
|
config dependencyResolverConfig
|
||||||
|
mutex sync.Mutex
|
||||||
}
|
}
|
||||||
|
|
||||||
func newDependencyResolver(client packageregistry.Client, config dependencyResolverConfig) *dependencyResolver {
|
func newDependencyResolver(client packageregistry.Client, config dependencyResolverConfig) *dependencyResolver {
|
||||||
@@ -88,7 +90,9 @@ func (r *dependencyResolver) resolvePackageDependenciesRecursive(
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Mark the current package as visited
|
// Mark the current package as visited
|
||||||
visitedPackages[packageKey] = true
|
r.synchronize(func() {
|
||||||
|
visitedPackages[packageKey] = true
|
||||||
|
})
|
||||||
|
|
||||||
log.Debugf("resolving dependencies for %s@%s", packageVersion.Package.Name, packageVersion.Version)
|
log.Debugf("resolving dependencies for %s@%s", packageVersion.Package.Name, packageVersion.Version)
|
||||||
|
|
||||||
@@ -129,7 +133,9 @@ func (r *dependencyResolver) resolvePackageDependenciesRecursive(
|
|||||||
// Finally add resolved dependencies to the result
|
// Finally add resolved dependencies to the result
|
||||||
for _, dependency := range resolvedDependencies {
|
for _, dependency := range resolvedDependencies {
|
||||||
if !slices.Contains(*result, dependency) {
|
if !slices.Contains(*result, dependency) {
|
||||||
*result = append(*result, dependency)
|
r.synchronize(func() {
|
||||||
|
*result = append(*result, dependency)
|
||||||
|
})
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -139,3 +145,9 @@ func (r *dependencyResolver) resolvePackageDependenciesRecursive(
|
|||||||
func (r *dependencyResolver) packageKey(pkg *packagev1.PackageVersion) string {
|
func (r *dependencyResolver) packageKey(pkg *packagev1.PackageVersion) string {
|
||||||
return fmt.Sprintf("%s@%s", pkg.Package.Name, pkg.Version)
|
return fmt.Sprintf("%s@%s", pkg.Package.Name, pkg.Version)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (r *dependencyResolver) synchronize(fn func()) {
|
||||||
|
r.mutex.Lock()
|
||||||
|
defer r.mutex.Unlock()
|
||||||
|
fn()
|
||||||
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user