fix: keep plugin templates separate from system templates
This commit is contained in:
parent
a526661825
commit
0c0b0d98c7
|
|
@ -4,7 +4,6 @@ import (
|
|||
"encoding/json"
|
||||
"os"
|
||||
"path/filepath"
|
||||
"strings"
|
||||
)
|
||||
|
||||
// Meta is the plugin.json descriptor.
|
||||
|
|
@ -85,13 +84,9 @@ func (m *Manager) Active() []Plugin {
|
|||
return out
|
||||
}
|
||||
|
||||
// Templates returns all templates from all active plugins + builtins.
|
||||
// Templates returns all templates from active plugins.
|
||||
func (m *Manager) Templates() []TemplateDefinition {
|
||||
var out []TemplateDefinition
|
||||
// Built-in templates.
|
||||
for _, t := range builtinTemplates {
|
||||
out = append(out, t)
|
||||
}
|
||||
// Plugin templates.
|
||||
for _, p := range m.Active() {
|
||||
for _, tmplName := range p.Meta.Templates {
|
||||
|
|
@ -182,37 +177,3 @@ func (m *Manager) MigrationFiles() []string {
|
|||
}
|
||||
return out
|
||||
}
|
||||
|
||||
// Silence unused strings import.
|
||||
var _ = strings.ToLower
|
||||
|
||||
// builtinTemplates are shipped with the application.
|
||||
var builtinTemplates = loadBuiltinTemplates()
|
||||
|
||||
func loadBuiltinTemplates() []TemplateDefinition {
|
||||
var out []TemplateDefinition
|
||||
dir := "internal/core/plugins/builtin/templates"
|
||||
entries, err := os.ReadDir(dir)
|
||||
if err != nil {
|
||||
return out
|
||||
}
|
||||
for _, e := range entries {
|
||||
if e.IsDir() || !strings.HasSuffix(e.Name(), ".json") {
|
||||
continue
|
||||
}
|
||||
data, err := os.ReadFile(filepath.Join(dir, e.Name()))
|
||||
if err != nil {
|
||||
continue
|
||||
}
|
||||
var tmpl TemplateDefinition
|
||||
if err := json.Unmarshal(data, &tmpl); err != nil {
|
||||
continue
|
||||
}
|
||||
if tmpl.Name == "" {
|
||||
tmpl.Name = strings.TrimSuffix(e.Name(), ".json")
|
||||
}
|
||||
tmpl.Plugin = "builtin"
|
||||
out = append(out, tmpl)
|
||||
}
|
||||
return out
|
||||
}
|
||||
|
|
|
|||
|
|
@ -160,3 +160,36 @@ func TestNoPluginsDir(t *testing.T) {
|
|||
t.Errorf("plugins = %d, want 0", len(mgr.Plugins()))
|
||||
}
|
||||
}
|
||||
|
||||
func TestTemplatesDoesNotLoadBuiltinsFromWorkingDirectory(t *testing.T) {
|
||||
root := setupPluginDir(t, nil)
|
||||
cwd := t.TempDir()
|
||||
builtinDir := filepath.Join(cwd, "internal", "core", "plugins", "builtin", "templates")
|
||||
if err := os.MkdirAll(builtinDir, 0o750); err != nil {
|
||||
t.Fatalf("mkdir fake builtin dir: %v", err)
|
||||
}
|
||||
if err := os.WriteFile(filepath.Join(builtinDir, "fake.json"), []byte(`{
|
||||
"name": "Fake Builtin",
|
||||
"root_type": "folder",
|
||||
"tree": []
|
||||
}`), 0o640); err != nil {
|
||||
t.Fatalf("write fake builtin template: %v", err)
|
||||
}
|
||||
|
||||
oldWD, err := os.Getwd()
|
||||
if err != nil {
|
||||
t.Fatalf("getwd: %v", err)
|
||||
}
|
||||
t.Cleanup(func() {
|
||||
_ = os.Chdir(oldWD)
|
||||
})
|
||||
if err := os.Chdir(cwd); err != nil {
|
||||
t.Fatalf("chdir: %v", err)
|
||||
}
|
||||
|
||||
mgr := NewManager(root)
|
||||
mgr.Discover()
|
||||
if got := len(mgr.Templates()); got != 0 {
|
||||
t.Fatalf("Templates loaded %d working-directory builtin templates, want 0", got)
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in New Issue