Skip to content

Commit

Permalink
Fix indirect git resource cycle detection
Browse files Browse the repository at this point in the history
  • Loading branch information
richardmarshall committed Aug 15, 2019
1 parent c464fb0 commit 44b62a8
Show file tree
Hide file tree
Showing 2 changed files with 65 additions and 1 deletion.
2 changes: 1 addition & 1 deletion pkg/loader/fileloader.go
Original file line number Diff line number Diff line change
Expand Up @@ -179,7 +179,7 @@ func (fl *fileLoader) New(path string) (ifc.Loader, error) {
return nil, err
}
return newLoaderAtGitClone(
repoSpec, fl.validator, fl.fSys, fl.referrer, fl.cloner)
repoSpec, fl.validator, fl.fSys, fl, fl.cloner)
}
if filepath.IsAbs(path) {
return nil, fmt.Errorf("new root '%s' cannot be absolute", path)
Expand Down
64 changes: 64 additions & 0 deletions pkg/loader/fileloader_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -530,3 +530,67 @@ func TestLocalLoaderReferencingGitBase(t *testing.T) {
t.Fatalf("unexpected root %s", l2.Root())
}
}

func TestRepoDirectCycleDetection(t *testing.T) {
topDir := "/cycles"
cloneRoot := topDir + "/someClone"
fSys := fs.MakeFakeFS()
fSys.MkdirAll(topDir)
fSys.MkdirAll(cloneRoot)

root, err := demandDirectoryRoot(fSys, topDir)
if err != nil {
t.Fatalf("unexpected err: %v\n", err)
}
l1 := newLoaderAtConfirmedDir(
RestrictionRootOnly, validators.MakeFakeValidator(), root, fSys, nil,
git.DoNothingCloner(fs.ConfirmedDir(cloneRoot)))
p1 := "github.com/someOrg/someRepo/foo"
rs1, err := git.NewRepoSpecFromUrl(p1)
if err != nil {
t.Fatalf("unexpected err: %v", err)
}
l1.repoSpec = rs1
_, err = l1.New(p1)
if err == nil {
t.Fatalf("expected error")
}
if !strings.Contains(err.Error(), "cycle detected") {
t.Fatalf("unexpected err: %v", err)
}
}

func TestRepoIndirectCycleDetection(t *testing.T) {
topDir := "/cycles"
cloneRoot := topDir + "/someClone"
fSys := fs.MakeFakeFS()
fSys.MkdirAll(topDir)
fSys.MkdirAll(cloneRoot)

root, err := demandDirectoryRoot(fSys, topDir)
if err != nil {
t.Fatalf("unexpected err: %v", err)
}
l0 := newLoaderAtConfirmedDir(
RestrictionRootOnly, validators.MakeFakeValidator(), root, fSys, nil,
git.DoNothingCloner(fs.ConfirmedDir(cloneRoot)))

p1 := "github.com/someOrg/someRepo1"
p2 := "github.com/someOrg/someRepo2"

l1, err := l0.New(p1)
if err != nil {
t.Fatalf("unexpected err: %v", err)
}
l2, err := l1.New(p2)
if err != nil {
t.Fatalf("unexpected err: %v", err)
}
_, err = l2.New(p1)
if err == nil {
t.Fatalf("expected error")
}
if !strings.Contains(err.Error(), "cycle detected") {
t.Fatalf("unexpected err: %v", err)
}
}

0 comments on commit 44b62a8

Please sign in to comment.