refactor(idlewatcher): replace map with ordered.Map for deduplicating dependencies

This commit is contained in:
yusing
2025-09-05 14:32:42 +08:00
parent d83c367e7f
commit b43274e9e6

View File

@@ -10,6 +10,7 @@ import (
"github.com/rs/zerolog" "github.com/rs/zerolog"
"github.com/rs/zerolog/log" "github.com/rs/zerolog/log"
"github.com/yusing/ds/ordered"
"github.com/yusing/go-proxy/internal/docker" "github.com/yusing/go-proxy/internal/docker"
"github.com/yusing/go-proxy/internal/gperr" "github.com/yusing/go-proxy/internal/gperr"
"github.com/yusing/go-proxy/internal/idlewatcher/provider" "github.com/yusing/go-proxy/internal/idlewatcher/provider"
@@ -545,13 +546,13 @@ func (w *Watcher) dedupDependencies() {
deps := w.dependencies() deps := w.dependencies()
for _, dep := range w.dependsOn { for _, dep := range w.dependsOn {
depdeps := dep.dependencies() depdeps := dep.dependencies()
for depdep := range depdeps { for depdep := range depdeps.Iter {
delete(deps, depdep) deps.Del(depdep)
} }
} }
newDepOn := make([]string, 0, len(deps)) newDepOn := make([]string, 0, deps.Len())
newDeps := make([]*dependency, 0, len(deps)) newDeps := make([]*dependency, 0, deps.Len())
for _, dep := range deps { for _, dep := range deps.Iter {
newDepOn = append(newDepOn, dep.cfg.ContainerName()) newDepOn = append(newDepOn, dep.cfg.ContainerName())
newDeps = append(newDeps, dep) newDeps = append(newDeps, dep)
} }
@@ -559,11 +560,13 @@ func (w *Watcher) dedupDependencies() {
w.dependsOn = newDeps w.dependsOn = newDeps
} }
func (w *Watcher) dependencies() map[string]*dependency { func (w *Watcher) dependencies() *ordered.Map[string, *dependency] {
deps := make(map[string]*dependency) deps := ordered.NewMap[string, *dependency]()
for _, dep := range w.dependsOn { for _, dep := range w.dependsOn {
deps[dep.Key()] = dep deps.Set(dep.Key(), dep)
maps.Copy(deps, dep.dependencies()) for _, depdep := range dep.dependencies().Iter {
deps.Set(depdep.Key(), depdep)
}
} }
return deps return deps
} }