From 11f7d7b795094be4b71e618bc0fc1f9564d12326 Mon Sep 17 00:00:00 2001 From: Joe Corall Date: Mon, 22 Jun 2026 22:12:17 +0000 Subject: [PATCH] Add codebase layout dispositions --- pkg/component/manager.go | 12 +++++++++--- pkg/component/prompt.go | 10 ++++++++++ pkg/component/types_test.go | 20 ++++++++++++++++++++ 3 files changed, 39 insertions(+), 3 deletions(-) diff --git a/pkg/component/manager.go b/pkg/component/manager.go index 1186bbe..f99577c 100644 --- a/pkg/component/manager.go +++ b/pkg/component/manager.go @@ -31,6 +31,8 @@ const ( DispositionDistributed Disposition = "distributed" DispositionCantaloupe Disposition = "cantaloupe" DispositionTriplet Disposition = "triplet" + DispositionNested Disposition = "nested" + DispositionGitRoot Disposition = "git-root" ) type ComposeSpec struct { @@ -516,10 +518,10 @@ func normalizeState(state State) State { func ParseDisposition(value string) (Disposition, error) { disposition := normalizeDisposition(Disposition(value)) switch disposition { - case DispositionDisabled, DispositionSuperseded, DispositionEnabled, DispositionDistributed, DispositionCantaloupe, DispositionTriplet: + case DispositionDisabled, DispositionSuperseded, DispositionEnabled, DispositionDistributed, DispositionCantaloupe, DispositionTriplet, DispositionNested, DispositionGitRoot: return disposition, nil default: - return "", fmt.Errorf("invalid component disposition %q: expected one of %s, %s, %s, %s, %s, %s", value, DispositionDisabled, DispositionSuperseded, DispositionEnabled, DispositionDistributed, DispositionCantaloupe, DispositionTriplet) + return "", fmt.Errorf("invalid component disposition %q: expected one of %s, %s, %s, %s, %s, %s, %s, %s", value, DispositionDisabled, DispositionSuperseded, DispositionEnabled, DispositionDistributed, DispositionCantaloupe, DispositionTriplet, DispositionNested, DispositionGitRoot) } } @@ -544,6 +546,10 @@ func normalizeDisposition(disposition Disposition) Disposition { return DispositionCantaloupe case string(DispositionTriplet): return DispositionTriplet + case string(DispositionNested): + return DispositionNested + case string(DispositionGitRoot): + return DispositionGitRoot default: return Disposition(strings.ToLower(strings.TrimSpace(string(disposition)))) } @@ -551,7 +557,7 @@ func normalizeDisposition(disposition Disposition) Disposition { func DispositionToState(disposition Disposition) State { switch normalizeDisposition(disposition) { - case DispositionEnabled, DispositionDistributed, DispositionTriplet: + case DispositionEnabled, DispositionDistributed, DispositionTriplet, DispositionGitRoot: return StateOn default: return StateOff diff --git a/pkg/component/prompt.go b/pkg/component/prompt.go index 06cbc1c..b1f3a3a 100644 --- a/pkg/component/prompt.go +++ b/pkg/component/prompt.go @@ -278,6 +278,16 @@ func dispositionHelp(guidance StateGuidance, disposition Disposition) string { return guidance.DisabledHelp } return guidance.OffHelp + case DispositionGitRoot: + if strings.TrimSpace(guidance.EnabledHelp) != "" { + return guidance.EnabledHelp + } + return guidance.OnHelp + case DispositionNested: + if strings.TrimSpace(guidance.DisabledHelp) != "" { + return guidance.DisabledHelp + } + return guidance.OffHelp default: return "" } diff --git a/pkg/component/types_test.go b/pkg/component/types_test.go index 2b4dd82..57b9b58 100644 --- a/pkg/component/types_test.go +++ b/pkg/component/types_test.go @@ -29,6 +29,26 @@ func TestParseStateOverridesRejectsInvalidValue(t *testing.T) { } } +func TestParseDispositionAcceptsCodebaseLayouts(t *testing.T) { + t.Parallel() + + nested, err := ParseDisposition("nested") + if err != nil { + t.Fatalf("ParseDisposition(nested) error = %v", err) + } + if nested != DispositionNested || DispositionToState(nested) != StateOff { + t.Fatalf("expected nested/off, got %q/%q", nested, DispositionToState(nested)) + } + + gitRoot, err := ParseDisposition("git-root") + if err != nil { + t.Fatalf("ParseDisposition(git-root) error = %v", err) + } + if gitRoot != DispositionGitRoot || DispositionToState(gitRoot) != StateOn { + t.Fatalf("expected git-root/on, got %q/%q", gitRoot, DispositionToState(gitRoot)) + } +} + func TestDependenciesDrupalModulesForEnable(t *testing.T) { t.Parallel()