Skip to content

Commit 6356d93

Browse files
authored
[patch] Spell superseded correctly (#121)
Co-authored-by: H.E. Pennypacker <115990865+pennypacker-he@users.noreply.github.com>
1 parent e6c21e6 commit 6356d93

8 files changed

Lines changed: 56 additions & 9 deletions

File tree

cmd/component.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -212,7 +212,7 @@ func init() {
212212

213213
componentSetCmd.Flags().StringVar(&componentSetPath, "path", "", "Path to the project directory. Defaults to the active context project directory.")
214214
componentSetCmd.Flags().StringVar(&componentSetState, "state", "", "State to apply (on, off).")
215-
componentSetCmd.Flags().StringVar(&componentSetDisposition, "disposition", "", "Disposition to apply (enabled, disabled, superceded, distributed).")
215+
componentSetCmd.Flags().StringVar(&componentSetDisposition, "disposition", "", "Disposition to apply (enabled, disabled, superseded, distributed).")
216216
componentSetCmd.Flags().StringVar(&componentSetTLSMode, "tls-mode", "", "TLS mode (http, self-managed, mkcert, letsencrypt).")
217217
componentSetCmd.Flags().BoolVar(&componentSetYolo, "yolo", false, "Skip the confirmation prompt.")
218218

@@ -498,7 +498,7 @@ USAGE
498498
499499
EXAMPLES
500500
501-
sitectl component set fcrepo superceded --isle-file-system-uri private
501+
sitectl component set fcrepo superseded --isle-file-system-uri private
502502
sitectl component set iiif triplet
503503
sitectl component set iiif-topology distributed --iiif-upstream-url https://iiif.example.org
504504
sitectl component set homarus distributed

cmd/component_test.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -297,7 +297,7 @@ func TestResolveComponentSetInvocationStripsNamespace(t *testing.T) {
297297
cmd := &cobra.Command{Use: "set"}
298298
contextName, owner, forwarded, err := resolveComponentSetInvocation(cmd, []string{
299299
"isle/fcrepo",
300-
"superceded",
300+
"superseded",
301301
"--isle-file-system-uri",
302302
"private",
303303
})
@@ -307,7 +307,7 @@ func TestResolveComponentSetInvocationStripsNamespace(t *testing.T) {
307307
if contextName != "museum" || owner != "isle" {
308308
t.Fatalf("unexpected owner resolution: context=%q owner=%q", contextName, owner)
309309
}
310-
want := []string{"fcrepo", "superceded", "--isle-file-system-uri", "private"}
310+
want := []string{"fcrepo", "superseded", "--isle-file-system-uri", "private"}
311311
if !reflect.DeepEqual(forwarded, want) {
312312
t.Fatalf("forwarded args = %#v, want %#v", forwarded, want)
313313
}

pkg/component/catalog.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -106,7 +106,7 @@ func writeCatalogGuidance(out io.Writer, def Definition) error {
106106
}{
107107
{"enabled", def.Guidance.EnabledHelp},
108108
{"disabled", def.Guidance.DisabledHelp},
109-
{"superceded", def.Guidance.SupersededHelp},
109+
{string(DispositionSuperseded), def.Guidance.SupersededHelp},
110110
{"distributed", def.Guidance.DistributedHelp},
111111
}
112112
wrote := false

pkg/component/catalog_test.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -50,9 +50,9 @@ func TestWriteComponentCatalogIncludesDispositionsAndSetFlags(t *testing.T) {
5050
for _, want := range []string{
5151
"ISLE components",
5252
"fcrepo",
53-
"enabled, superceded",
53+
"enabled, superseded",
5454
"--isle-file-system-uri",
55-
"when superceded",
55+
"when superseded",
5656
"choices: public, private",
5757
} {
5858
if !strings.Contains(rendered, want) {

pkg/component/manager.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@ type Disposition string
2626

2727
const (
2828
DispositionDisabled Disposition = "disabled"
29-
DispositionSuperseded Disposition = "superceded"
29+
DispositionSuperseded Disposition = "superseded"
3030
DispositionEnabled Disposition = "enabled"
3131
DispositionDistributed Disposition = "distributed"
3232
DispositionCantaloupe Disposition = "cantaloupe"
@@ -529,7 +529,7 @@ func normalizeDisposition(disposition Disposition) Disposition {
529529
return DispositionDisabled
530530
case string(DispositionDisabled):
531531
return DispositionDisabled
532-
case string(DispositionSuperseded):
532+
case string(DispositionSuperseded), "superceded":
533533
return DispositionSuperseded
534534
case string(DispositionEnabled):
535535
return DispositionEnabled

pkg/component/types_test.go

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,20 @@ func TestParseDispositionAcceptsCodebaseLayouts(t *testing.T) {
4949
}
5050
}
5151

52+
func TestParseDispositionCanonicalizesSupersededSpellings(t *testing.T) {
53+
t.Parallel()
54+
55+
for _, value := range []string{"superseded", "superceded", " SUPERSEDED "} {
56+
got, err := ParseDisposition(value)
57+
if err != nil {
58+
t.Fatalf("ParseDisposition(%q) error = %v", value, err)
59+
}
60+
if got != DispositionSuperseded || string(got) != "superseded" {
61+
t.Fatalf("ParseDisposition(%q) = %q, want canonical superseded", value, got)
62+
}
63+
}
64+
}
65+
5266
func TestDependenciesDrupalModulesForEnable(t *testing.T) {
5367
t.Parallel()
5468

pkg/plugin/rpc.go

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -356,6 +356,15 @@ func NewComponentReconcileRequest(params ComponentTargetParams, args ...string)
356356

357357
// NewComponentSetRequest creates a typed component.set request.
358358
func NewComponentSetRequest(params ComponentSetParams, args ...string) (RPCRequest, error) {
359+
// RPC v1 originally shipped the misspelled value. Keep the wire spelling so
360+
// a corrected host can still drive v1.0.0 plugins; current plugins normalize
361+
// both spellings and render the canonical "superseded" form.
362+
if strings.EqualFold(strings.TrimSpace(params.Disposition), "superseded") {
363+
params.Disposition = "superceded"
364+
}
365+
if strings.EqualFold(strings.TrimSpace(params.DispositionFlag), "superseded") {
366+
params.DispositionFlag = "superceded"
367+
}
359368
req := NewRPCRequest(MethodComponentSet)
360369
req.Args = copyRPCArgs(args)
361370
return withRPCParams(req, params)

pkg/plugin/sdk_test.go

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -259,6 +259,30 @@ func TestRPCArgvSafetyDoesNotScreenPassthroughArgs(t *testing.T) {
259259
}
260260
}
261261

262+
func TestComponentSetRequestKeepsSupersededRPCV1Compatibility(t *testing.T) {
263+
t.Parallel()
264+
265+
for _, input := range []ComponentSetParams{
266+
{Name: "fcrepo", Disposition: "superseded"},
267+
{Name: "fcrepo", DispositionFlag: "SUPERSEDED"},
268+
} {
269+
req, err := NewComponentSetRequest(input)
270+
if err != nil {
271+
t.Fatalf("NewComponentSetRequest() error = %v", err)
272+
}
273+
params, err := DecodeRPCParams[ComponentSetParams](req.Params)
274+
if err != nil {
275+
t.Fatalf("DecodeRPCParams() error = %v", err)
276+
}
277+
if params.Disposition != "" && params.Disposition != "superceded" {
278+
t.Fatalf("RPC v1 positional disposition = %q, want legacy wire spelling", params.Disposition)
279+
}
280+
if params.DispositionFlag != "" && params.DispositionFlag != "superceded" {
281+
t.Fatalf("RPC v1 disposition flag = %q, want legacy wire spelling", params.DispositionFlag)
282+
}
283+
}
284+
}
285+
262286
func TestInvokePluginRPCReturnsStderrDetail(t *testing.T) {
263287
dir := t.TempDir()
264288
path := filepath.Join(dir, "sitectl-broken")

0 commit comments

Comments
 (0)