mirror of
https://github.com/go-task/task.git
synced 2025-02-03 13:22:11 +02:00
feat: better error handling for duplicate edges and fixed tests
This commit is contained in:
parent
a50580b5a1
commit
0a027df50d
@ -19,6 +19,7 @@ const (
|
||||
CodeTaskfileCacheNotFound
|
||||
CodeTaskfileVersionCheckError
|
||||
CodeTaskfileNetworkTimeout
|
||||
CodeTaskfileDuplicateInclude
|
||||
)
|
||||
|
||||
// Task related exit codes
|
||||
|
@ -3,6 +3,7 @@ package errors
|
||||
import (
|
||||
"fmt"
|
||||
"net/http"
|
||||
"strings"
|
||||
"time"
|
||||
|
||||
"github.com/Masterminds/semver/v3"
|
||||
@ -174,3 +175,19 @@ func (err *TaskfileNetworkTimeoutError) Error() string {
|
||||
func (err *TaskfileNetworkTimeoutError) Code() int {
|
||||
return CodeTaskfileNetworkTimeout
|
||||
}
|
||||
|
||||
type TaskfileDuplicateIncludeError struct {
|
||||
URI string
|
||||
IncludedURI string
|
||||
Namespaces []string
|
||||
}
|
||||
|
||||
func (err *TaskfileDuplicateIncludeError) Error() string {
|
||||
return fmt.Sprintf(
|
||||
`task: Taskfile %q attempted to include %q multiple times with namespaces: %s`, err.URI, err.IncludedURI, strings.Join(err.Namespaces, ", "),
|
||||
)
|
||||
}
|
||||
|
||||
func (err *TaskfileDuplicateIncludeError) Code() int {
|
||||
return CodeTaskfileDuplicateInclude
|
||||
}
|
||||
|
@ -981,8 +981,8 @@ func TestIncludes(t *testing.T) {
|
||||
"included_directory.txt": "included_directory",
|
||||
"included_directory_without_dir.txt": "included_directory_without_dir",
|
||||
"included_taskfile_without_dir.txt": "included_taskfile_without_dir",
|
||||
"./module2/included_directory_with_dir.txt": "included_directory_with_dir",
|
||||
"./module2/included_taskfile_with_dir.txt": "included_taskfile_with_dir",
|
||||
"./module3/included_taskfile_with_dir.txt": "included_taskfile_with_dir",
|
||||
"./module4/included_directory_with_dir.txt": "included_directory_with_dir",
|
||||
"os_include.txt": "os",
|
||||
},
|
||||
}
|
||||
|
@ -141,7 +141,19 @@ func (r *Reader) include(node Node) error {
|
||||
}
|
||||
|
||||
// Create an edge between the Taskfiles
|
||||
return r.graph.AddEdge(node.Location(), includeNode.Location())
|
||||
err = r.graph.AddEdge(node.Location(), includeNode.Location())
|
||||
if errors.Is(err, graph.ErrEdgeAlreadyExists) {
|
||||
edge, err := r.graph.Edge(node.Location(), includeNode.Location())
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
return &errors.TaskfileDuplicateIncludeError{
|
||||
URI: node.Location(),
|
||||
IncludedURI: includeNode.Location(),
|
||||
Namespaces: []string{namespace, edge.Properties.Data.(*ast.Include).Namespace},
|
||||
}
|
||||
}
|
||||
return err
|
||||
})
|
||||
return nil
|
||||
})
|
||||
|
12
testdata/includes/Taskfile.yml
vendored
12
testdata/includes/Taskfile.yml
vendored
@ -6,13 +6,13 @@ includes:
|
||||
included_without_dir:
|
||||
taskfile: ./module1
|
||||
included_taskfile_without_dir:
|
||||
taskfile: ./module1/Taskfile.yml
|
||||
included_with_dir:
|
||||
taskfile: ./module2
|
||||
dir: ./module2
|
||||
included_taskfile_with_dir:
|
||||
taskfile: ./module2/Taskfile.yml
|
||||
dir: ./module2
|
||||
included_with_dir:
|
||||
taskfile: ./module3
|
||||
dir: ./module3
|
||||
included_taskfile_with_dir:
|
||||
taskfile: ./module4/Taskfile.yml
|
||||
dir: ./module4
|
||||
included_os: ./Taskfile_{{OS}}.yml
|
||||
|
||||
tasks:
|
||||
|
4
testdata/includes/module1/Taskfile.yml
vendored
4
testdata/includes/module1/Taskfile.yml
vendored
@ -1,10 +1,6 @@
|
||||
version: '3'
|
||||
|
||||
tasks:
|
||||
gen_dir:
|
||||
cmds:
|
||||
- echo included_directory_without_dir > included_directory_without_dir.txt
|
||||
|
||||
gen_file:
|
||||
cmds:
|
||||
- echo included_taskfile_without_dir > included_taskfile_without_dir.txt
|
||||
|
6
testdata/includes/module2/Taskfile.yml
vendored
6
testdata/includes/module2/Taskfile.yml
vendored
@ -3,8 +3,4 @@ version: '3'
|
||||
tasks:
|
||||
gen_dir:
|
||||
cmds:
|
||||
- echo included_directory_with_dir > included_directory_with_dir.txt
|
||||
|
||||
gen_file:
|
||||
cmds:
|
||||
- echo included_taskfile_with_dir > included_taskfile_with_dir.txt
|
||||
- echo included_directory_without_dir > included_directory_without_dir.txt
|
||||
|
6
testdata/includes/module3/Taskfile.yml
vendored
Normal file
6
testdata/includes/module3/Taskfile.yml
vendored
Normal file
@ -0,0 +1,6 @@
|
||||
version: '3'
|
||||
|
||||
tasks:
|
||||
gen_file:
|
||||
cmds:
|
||||
- echo included_taskfile_with_dir > included_taskfile_with_dir.txt
|
6
testdata/includes/module4/Taskfile.yml
vendored
Normal file
6
testdata/includes/module4/Taskfile.yml
vendored
Normal file
@ -0,0 +1,6 @@
|
||||
version: '3'
|
||||
|
||||
tasks:
|
||||
gen_dir:
|
||||
cmds:
|
||||
- echo included_directory_with_dir > included_directory_with_dir.txt
|
Loading…
x
Reference in New Issue
Block a user