From b502f5900ae09c5e56622be7a6077032abf05073 Mon Sep 17 00:00:00 2001 From: xy Date: Wed, 16 Oct 2024 17:15:41 +0900 Subject: [PATCH 1/2] Use filepath.Join for cross-platform compatible file path construction --- pkl/decode_map.go | 2 +- pkl/evaluator_exec.go | 12 +++++++++--- pkl/fs_reader.go | 2 +- 3 files changed, 11 insertions(+), 5 deletions(-) diff --git a/pkl/decode_map.go b/pkl/decode_map.go index 5e87924..9a072f6 100644 --- a/pkl/decode_map.go +++ b/pkl/decode_map.go @@ -30,7 +30,7 @@ func (d *decoder) decodeMap(inType reflect.Type) (*reflect.Value, error) { return d.decodeSet(inType) } if code != codeMap && code != codeMapping { - return nil, fmt.Errorf("invalid code for slices: %d", code) + return nil, fmt.Errorf("invalid code for maps: %d", code) } return d.decodeMapImpl(inType) } diff --git a/pkl/evaluator_exec.go b/pkl/evaluator_exec.go index 7a43b5a..e14ff44 100644 --- a/pkl/evaluator_exec.go +++ b/pkl/evaluator_exec.go @@ -16,7 +16,10 @@ package pkl -import "context" +import ( + "context" + "path/filepath" +) // NewEvaluator returns an evaluator backed by a single EvaluatorManager. // Its manager gets closed when the evaluator is closed. @@ -45,7 +48,7 @@ func NewProjectEvaluator(ctx context.Context, projectDir string, opts ...func(op // pklCmd is treated as the base command that spawns Pkl. // For example, the below snippet spawns the command /opt/bin/pkl. // -// NewProjectEvaluatorWithCommand(context.Background(), []string{"/opt/bin/pkl"}, "/path/to/my/project") +// NewProjectEvaluatorWithCommand(context.Background(), "/path/to/my/project", []string{"/opt/bin/pkl"}) // // If creating multiple evaluators, prefer using EvaluatorManager.NewProjectEvaluator instead, // because it lessens the overhead of each successive evaluator. @@ -55,7 +58,10 @@ func NewProjectEvaluatorWithCommand(ctx context.Context, projectDir string, pklC if err != nil { return nil, err } - project, err := LoadProjectFromEvaluator(ctx, projectEvaluator, projectDir+"/PklProject") + defer projectEvaluator.Close() + + projectPath := filepath.Join(projectDir, "PklProject") + project, err := LoadProjectFromEvaluator(ctx, projectEvaluator, projectPath) if err != nil { return nil, err } diff --git a/pkl/fs_reader.go b/pkl/fs_reader.go index d8b1bb7..d39c3ef 100644 --- a/pkl/fs_reader.go +++ b/pkl/fs_reader.go @@ -40,7 +40,7 @@ func (f *fsReader) HasHierarchicalUris() bool { } func (f *fsReader) ListElements(url url.URL) ([]PathElement, error) { - path := strings.Trim(url.Path, "/") + path := strings.TrimPrefix(url.Path, "/") if path == "" { path = "." } From 05efb6d1856bb1267f8e29ebe5d295afa40cc8e3 Mon Sep 17 00:00:00 2001 From: xiaoyu Date: Thu, 17 Oct 2024 04:45:20 +0900 Subject: [PATCH 2/2] Fix nil pointer dereference --- pkl/fs_reader.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pkl/fs_reader.go b/pkl/fs_reader.go index d39c3ef..d8b1bb7 100644 --- a/pkl/fs_reader.go +++ b/pkl/fs_reader.go @@ -40,7 +40,7 @@ func (f *fsReader) HasHierarchicalUris() bool { } func (f *fsReader) ListElements(url url.URL) ([]PathElement, error) { - path := strings.TrimPrefix(url.Path, "/") + path := strings.Trim(url.Path, "/") if path == "" { path = "." }