1
0
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:
Pete Davison 2023-09-05 23:55:56 +00:00
parent a50580b5a1
commit 0a027df50d
9 changed files with 52 additions and 18 deletions

View File

@ -19,6 +19,7 @@ const (
CodeTaskfileCacheNotFound
CodeTaskfileVersionCheckError
CodeTaskfileNetworkTimeout
CodeTaskfileDuplicateInclude
)
// Task related exit codes

View File

@ -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
}

View File

@ -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",
},
}

View File

@ -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
})

View File

@ -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:

View File

@ -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

View File

@ -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

View File

@ -0,0 +1,6 @@
version: '3'
tasks:
gen_file:
cmds:
- echo included_taskfile_with_dir > included_taskfile_with_dir.txt

View File

@ -0,0 +1,6 @@
version: '3'
tasks:
gen_dir:
cmds:
- echo included_directory_with_dir > included_directory_with_dir.txt