+1
-1
appview/db/repos.go
+1
-1
appview/db/repos.go
+6
-1
appview/pages/templates/repo/settings/pipelines.html
+6
-1
appview/pages/templates/repo/settings/pipelines.html
···
38
name="spindle"
39
required
40
class="p-1 max-w-64 border border-gray-200 bg-white dark:bg-gray-800 dark:text-white dark:border-gray-700">
41
-
<option value="" disabled>
42
Choose a spindle
43
</option>
44
{{ range $.Spindles }}
45
<option value="{{ . }}" class="py-1" {{ if eq . $.CurrentSpindle }}selected{{ end }}>
···
38
name="spindle"
39
required
40
class="p-1 max-w-64 border border-gray-200 bg-white dark:bg-gray-800 dark:text-white dark:border-gray-700">
41
+
{{/* For some reason, we can't use an empty string in a <select> in all scenarios unless it is preceded by a disabled select?? No idea, could just be a Firefox thing? */}}
42
+
<option value="[[none]]" class="py-1" {{ if not $.CurrentSpindle }}selected{{ end }}>
43
+
{{ if not $.CurrentSpindle }}
44
Choose a spindle
45
+
{{ else }}
46
+
Disable pipelines
47
+
{{ end }}
48
</option>
49
{{ range $.Spindles }}
50
<option value="{{ . }}" class="py-1" {{ if eq . $.CurrentSpindle }}selected{{ end }}>
+25
-15
appview/repo/repo.go
+25
-15
appview/repo/repo.go
···
657
}
658
659
newSpindle := r.FormValue("spindle")
660
client, err := rp.oauth.AuthorizedClient(r)
661
if err != nil {
662
fail("Failed to authorize. Try again later.", err)
663
return
664
}
665
666
-
// ensure that this is a valid spindle for this user
667
-
validSpindles, err := rp.enforcer.GetSpindlesForUser(user.Did)
668
-
if err != nil {
669
-
fail("Failed to find spindles. Try again later.", err)
670
-
return
671
}
672
673
-
if !slices.Contains(validSpindles, newSpindle) {
674
-
fail("Failed to configure spindle.", fmt.Errorf("%s is not a valid spindle: %q", newSpindle, validSpindles))
675
-
return
676
}
677
678
// optimistic update
679
-
err = db.UpdateSpindle(rp.db, string(repoAt), newSpindle)
680
if err != nil {
681
fail("Failed to update spindle. Try again later.", err)
682
return
···
699
Owner: user.Did,
700
CreatedAt: f.CreatedAt,
701
Description: &f.Description,
702
-
Spindle: &newSpindle,
703
},
704
},
705
})
···
709
return
710
}
711
712
-
// add this spindle to spindle stream
713
-
rp.spindlestream.AddSource(
714
-
context.Background(),
715
-
eventconsumer.NewSpindleSource(newSpindle),
716
-
)
717
718
rp.pages.HxRefresh(w)
719
}
···
657
}
658
659
newSpindle := r.FormValue("spindle")
660
+
removingSpindle := newSpindle == "[[none]]" // see pages/templates/repo/settings/pipelines.html for more info on why we use this value
661
client, err := rp.oauth.AuthorizedClient(r)
662
if err != nil {
663
fail("Failed to authorize. Try again later.", err)
664
return
665
}
666
667
+
if !removingSpindle {
668
+
// ensure that this is a valid spindle for this user
669
+
validSpindles, err := rp.enforcer.GetSpindlesForUser(user.Did)
670
+
if err != nil {
671
+
fail("Failed to find spindles. Try again later.", err)
672
+
return
673
+
}
674
+
675
+
if !slices.Contains(validSpindles, newSpindle) {
676
+
fail("Failed to configure spindle.", fmt.Errorf("%s is not a valid spindle: %q", newSpindle, validSpindles))
677
+
return
678
+
}
679
}
680
681
+
spindlePtr := &newSpindle
682
+
if removingSpindle {
683
+
spindlePtr = nil
684
}
685
686
// optimistic update
687
+
err = db.UpdateSpindle(rp.db, string(repoAt), spindlePtr)
688
if err != nil {
689
fail("Failed to update spindle. Try again later.", err)
690
return
···
707
Owner: user.Did,
708
CreatedAt: f.CreatedAt,
709
Description: &f.Description,
710
+
Spindle: spindlePtr,
711
},
712
},
713
})
···
717
return
718
}
719
720
+
if !removingSpindle {
721
+
// add this spindle to spindle stream
722
+
rp.spindlestream.AddSource(
723
+
context.Background(),
724
+
eventconsumer.NewSpindleSource(newSpindle),
725
+
)
726
+
}
727
728
rp.pages.HxRefresh(w)
729
}