Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 3 additions & 3 deletions detector.go
Original file line number Diff line number Diff line change
Expand Up @@ -52,7 +52,7 @@ func (d *Detector) sortDefinitions() {

func (d *Detector) Detect(dir string, opts DetectOptions) (Manager, error) {
if opts.Manager != "" {
return d.detectExplicit(dir, opts.Manager)
return d.detectExplicit(dir, opts.Manager, opts.RequireCLI)
}

files, err := os.ReadDir(dir)
Expand Down Expand Up @@ -100,10 +100,10 @@ func (d *Detector) Detect(dir string, opts DetectOptions) (Manager, error) {
return nil, ErrNoManifest{Dir: dir}
}

func (d *Detector) detectExplicit(dir, managerName string) (Manager, error) {
func (d *Detector) detectExplicit(dir, managerName string, requireCLI bool) (Manager, error) {
for _, def := range d.definitions {
if def.Name == managerName {
return d.buildManager(def, dir, nil, true)
return d.buildManager(def, dir, nil, requireCLI)
}
}
return nil, ErrNoManifest{Dir: dir}
Expand Down
54 changes: 54 additions & 0 deletions detector_test.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,54 @@
package managers

import (
"testing"

"github.com/git-pkgs/managers/definitions"
)

func TestDetectExplicit_RequireCLI(t *testing.T) {
translator := NewTranslator()
runner := NewMockRunner()
detector := NewDetector(translator, runner)

def := &definitions.Definition{
Name: "fakepkg",
Binary: "binary-that-does-not-exist",
}
detector.Register(def)

t.Run("require CLI fails when binary missing", func(t *testing.T) {
_, err := detector.Detect("/tmp", DetectOptions{
Manager: "fakepkg",
RequireCLI: true,
})
if err == nil {
t.Fatal("expected error when binary not found")
}
var cliErr ErrCLINotFound
if !isErrCLINotFound(err, &cliErr) {
t.Fatalf("expected ErrCLINotFound, got: %v", err)
}
})

t.Run("no CLI required succeeds without binary", func(t *testing.T) {
mgr, err := detector.Detect("/tmp", DetectOptions{
Manager: "fakepkg",
RequireCLI: false,
})
if err != nil {
t.Fatalf("unexpected error: %v", err)
}
if mgr == nil {
t.Fatal("expected manager, got nil")
}
})
}

func isErrCLINotFound(err error, target *ErrCLINotFound) bool {
e, ok := err.(ErrCLINotFound)
if ok {
*target = e
}
return ok
}