Skip to content

Commit 45494a8

Browse files
authored
Merge pull request #443 from glours/remove-dependencies-disabled-services
remove potential dependencies to disabled services in ForServices
2 parents acec34a + 2037d3f commit 45494a8

File tree

2 files changed

+36
-7
lines changed

2 files changed

+36
-7
lines changed

types/project.go

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -423,13 +423,24 @@ func (p *Project) ForServices(names []string, options ...DependencyOption) error
423423
}
424424
enabled = append(enabled, s)
425425
} else {
426-
p.DisabledServices = append(p.DisabledServices, s)
426+
p.DisableService(s)
427427
}
428428
}
429429
p.Services = enabled
430430
return nil
431431
}
432432

433+
func (p *Project) DisableService(service ServiceConfig) {
434+
// We should remove all dependencies which reference the disabled service
435+
for i, s := range p.Services {
436+
if _, ok := s.DependsOn[service.Name]; ok {
437+
delete(s.DependsOn, service.Name)
438+
p.Services[i] = s
439+
}
440+
}
441+
p.DisabledServices = append(p.DisabledServices, service)
442+
}
443+
433444
// ResolveImages updates services images to include digest computed by a resolver function
434445
func (p *Project) ResolveImages(resolver func(named reference.Named) (godigest.Digest, error)) error {
435446
eg := errgroup.Group{}

types/project_test.go

Lines changed: 24 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -29,9 +29,10 @@ import (
2929
func Test_ApplyProfiles(t *testing.T) {
3030
p := makeProject()
3131
p.ApplyProfiles([]string{"foo"})
32-
assert.Equal(t, len(p.Services), 2)
32+
assert.Equal(t, len(p.Services), 3)
3333
assert.Equal(t, p.Services[0].Name, "service_1")
3434
assert.Equal(t, p.Services[1].Name, "service_2")
35+
assert.Equal(t, p.Services[2].Name, "service_6")
3536
assert.Equal(t, len(p.DisabledServices), 3)
3637
assert.Equal(t, p.DisabledServices[0].Name, "service_3")
3738
assert.Equal(t, p.DisabledServices[1].Name, "service_4")
@@ -40,11 +41,12 @@ func Test_ApplyProfiles(t *testing.T) {
4041
err := p.EnableServices("service_4")
4142
assert.NilError(t, err)
4243

43-
assert.Equal(t, len(p.Services), 4)
44+
assert.Equal(t, len(p.Services), 5)
4445
assert.Equal(t, p.Services[0].Name, "service_1")
4546
assert.Equal(t, p.Services[1].Name, "service_2")
46-
assert.Equal(t, p.Services[2].Name, "service_4")
47-
assert.Equal(t, p.Services[3].Name, "service_5")
47+
assert.Equal(t, p.Services[2].Name, "service_6")
48+
assert.Equal(t, p.Services[3].Name, "service_4")
49+
assert.Equal(t, p.Services[4].Name, "service_5")
4850
assert.Equal(t, len(p.DisabledServices), 1)
4951
assert.Equal(t, p.DisabledServices[0].Name, "service_3")
5052

@@ -74,9 +76,10 @@ func Test_WithoutUnnecessaryResources(t *testing.T) {
7476
func Test_NoProfiles(t *testing.T) {
7577
p := makeProject()
7678
p.ApplyProfiles(nil)
77-
assert.Equal(t, len(p.Services), 1)
79+
assert.Equal(t, len(p.Services), 2)
7880
assert.Equal(t, len(p.DisabledServices), 4)
7981
assert.Equal(t, p.Services[0].Name, "service_1")
82+
assert.Equal(t, p.Services[1].Name, "service_6")
8083
}
8184

8285
func Test_ServiceProfiles(t *testing.T) {
@@ -94,10 +97,22 @@ func Test_ForServices(t *testing.T) {
9497
err := p.ForServices([]string{"service_2"})
9598
assert.NilError(t, err)
9699

97-
assert.Equal(t, len(p.DisabledServices), 3)
100+
assert.Equal(t, len(p.DisabledServices), 4)
98101
assert.Equal(t, p.DisabledServices[0].Name, "service_3")
99102
assert.Equal(t, p.DisabledServices[1].Name, "service_4")
100103
assert.Equal(t, p.DisabledServices[2].Name, "service_5")
104+
assert.Equal(t, p.DisabledServices[3].Name, "service_6")
105+
106+
// Should not load the dependency service_1 when explicitly loading service_6
107+
p = makeProject()
108+
err = p.ForServices([]string{"service_6"})
109+
assert.NilError(t, err)
110+
assert.Equal(t, len(p.DisabledServices), 5)
111+
assert.Equal(t, p.DisabledServices[0].Name, "service_1")
112+
assert.Equal(t, p.DisabledServices[1].Name, "service_2")
113+
assert.Equal(t, p.DisabledServices[2].Name, "service_3")
114+
assert.Equal(t, p.DisabledServices[3].Name, "service_4")
115+
assert.Equal(t, p.DisabledServices[4].Name, "service_5")
101116
}
102117

103118
func Test_ForServicesCycle(t *testing.T) {
@@ -127,6 +142,9 @@ func makeProject() Project {
127142
}, ServiceConfig{
128143
Name: "service_5",
129144
Profiles: []string{"zot"},
145+
}, ServiceConfig{
146+
Name: "service_6",
147+
Links: []string{"service_1"},
130148
}),
131149
Networks: Networks{},
132150
Volumes: Volumes{},

0 commit comments

Comments
 (0)