refactor: Inject CommandExecutor into guard to fix dependency direction

guard depended on internal/runner, which inverted the intended layer
hierarchy. Now guard defines a CommandExecutor function type and accepts
it as a constructor argument. internal/flows (the composition root)
creates the executor closure wrapping runner.Execute and injects it,
keeping guard free of internal/ dependencies.
This commit is contained in:
Sahilb315
2026-04-14 20:34:33 +05:30
parent da098a51a8
commit 1089d4b3cd
3 changed files with 27 additions and 12 deletions
+7 -1
View File
@@ -10,6 +10,7 @@ import (
"github.com/safedep/pmg/config"
"github.com/safedep/pmg/guard"
"github.com/safedep/pmg/internal/audit"
"github.com/safedep/pmg/internal/runner"
"github.com/safedep/pmg/internal/ui"
"github.com/safedep/pmg/packagemanager"
)
@@ -77,7 +78,12 @@ func (f *commonFlow) Run(ctx context.Context, args []string, parsedCmd *packagem
guardConfig.DryRun = cfg.DryRun
guardConfig.InsecureInstallation = cfg.InsecureInstallation
guardManager, err := guard.NewPackageManagerGuard(guardConfig, f.pm, f.packageResolver, analyzers, interaction)
pmName := f.pm.Name()
executor := func(ctx context.Context, pc *packagemanager.ParsedCommand) error {
return runner.Execute(ctx, pc, pmName, cfg.DryRun)
}
guardManager, err := guard.NewPackageManagerGuard(guardConfig, f.pm, f.packageResolver, analyzers, interaction, executor)
if err != nil {
return fmt.Errorf("failed to create package manager guard: %s", err)
}