Skip to content

Commit ac3cdaf

Browse files
✨ Unwanted seeded targets removed. (#771) (#772)
Support: https://issues.redhat.com/browse/MTA-4406 Signed-off-by: Jeff Ortel <[email protected]> Signed-off-by: Cherry Picker <[email protected]> Signed-off-by: Jeff Ortel <[email protected]> Signed-off-by: Cherry Picker <[email protected]> Co-authored-by: Jeff Ortel <[email protected]>
1 parent 065fd75 commit ac3cdaf

File tree

2 files changed

+43
-4
lines changed

2 files changed

+43
-4
lines changed

seed/target.go

+40-3
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ import (
44
"container/list"
55
"errors"
66
"fmt"
7+
"slices"
78

89
liberr "github.com/jortel/go-utils/error"
910
"github.com/konveyor/tackle2-hub/model"
@@ -97,13 +98,47 @@ func (r *Target) Apply(db *gorm.DB) (err error) {
9798
seedIds = append(seedIds, target.ID)
9899
}
99100

101+
err = r.deleteUnwanted(db)
102+
if err != nil {
103+
return
104+
}
105+
100106
err = r.reorder(db, seedIds)
101107
if err != nil {
102108
return
103109
}
104110
return
105111
}
106112

113+
// deleteUnwanted deletes targets with a UUID not found
114+
// in the set of seeded targets.
115+
func (r *Target) deleteUnwanted(db *gorm.DB) (err error) {
116+
var found []*model.Target
117+
err = db.Find(&found).Error
118+
if err != nil {
119+
err = liberr.Wrap(err)
120+
return
121+
}
122+
wanted := make(map[string]byte)
123+
for _, t := range r.targets {
124+
wanted[t.UUID] = 0
125+
}
126+
for _, target := range found {
127+
if target.UUID == nil {
128+
continue
129+
}
130+
if _, found := wanted[*target.UUID]; found {
131+
continue
132+
}
133+
err = db.Delete(target).Error
134+
if err != nil {
135+
err = liberr.Wrap(err)
136+
return
137+
}
138+
}
139+
return
140+
}
141+
107142
// reorder updates the value of the ui.target.order setting
108143
// to add any missing target ids. (namely, newly added targets.)
109144
func (r *Target) reorder(db *gorm.DB, seedIds []uint) (err error) {
@@ -126,7 +161,7 @@ func (r *Target) reorder(db *gorm.DB, seedIds []uint) (err error) {
126161
}
127162
userOrder := []uint{}
128163
_ = s.As(&userOrder)
129-
s.Value = merge(userOrder, seedIds, targetIds)
164+
s.Value = r.merge(userOrder, seedIds, targetIds)
130165

131166
result = db.Where("key", UITargetOrder).Updates(s)
132167
if result.Error != nil {
@@ -142,11 +177,13 @@ func (r *Target) reorder(db *gorm.DB, seedIds []uint) (err error) {
142177
// userOrder: slice of target IDs in the user's desired order
143178
// seedOrder: slice of target IDs in seedfile order
144179
// ids: slice of ids of all the targets in the DB
145-
func merge(userOrder []uint, seedOrder []uint, ids []uint) (mergedOrder []uint) {
180+
func (r *Target) merge(userOrder []uint, seedOrder []uint, ids []uint) (mergedOrder []uint) {
146181
ll := list.New()
147182
known := make(map[uint]*list.Element)
148183
for _, id := range userOrder {
149-
known[id] = ll.PushBack(id)
184+
if slices.Contains(ids, id) {
185+
known[id] = ll.PushBack(id)
186+
}
150187
}
151188
for i, id := range seedOrder {
152189
if _, found := known[id]; found {

seed/target_test.go

+3-1
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,8 @@ import (
99
func TestMerge(t *testing.T) {
1010
g := gomega.NewWithT(t)
1111

12+
seeder := Target{}
13+
1214
// the seed contains 10 targets in a given order, 3 of which are new
1315
seedOrder := []uint{1, 2, 3, 4, 5, 6, 7, 8, 9, 10}
1416
// the user has set up a custom order for the 7 targets that already exist in the db
@@ -20,6 +22,6 @@ func TestMerge(t *testing.T) {
2022
// that had previously been dropped on the floor being added to the end of the ordering.
2123
expectedOrder := []uint{6, 7, 8, 9, 10, 5, 4, 1, 3, 2, 11, 12, 13}
2224

23-
mergedOrder := merge(userOrder, seedOrder, allIds)
25+
mergedOrder := seeder.merge(userOrder, seedOrder, allIds)
2426
g.Expect(mergedOrder).To(gomega.Equal(expectedOrder))
2527
}

0 commit comments

Comments
 (0)