deptask

package
v0.2.3 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Apr 17, 2024 License: MPL-2.0 Imports: 3 Imported by: 0

Documentation

Overview

Package deptask provides a tool, Runner, to run tasks in order according to its dependency.

Index

Constants

This section is empty.

Variables

View Source
var (
	// ErrDup indicates task name is already used.
	ErrDup = errors.New("duplicated task name")
	// ErrCyclic indicates there're cyclic dependencies.
	ErrCyclic = errors.New("cyclic dependencies detected")
)

Functions

This section is empty.

Types

type ErrMissing

type ErrMissing string

ErrMissing indicates a dependency is missing.

func (ErrMissing) Error

func (e ErrMissing) Error() string

type Runner

type Runner interface {
	// Add adds a task to Runner, will return ErrDup if name has been used.
	Add(name string, taskBody task.Task, deps ...string) error
	// MustAdd is like Add, but panics instead of returning error.
	MustAdd(name string, taskBody task.Task, deps ...string)
	// Mark some tasks to be skipped. Skipped task will not be executed, just
	// pretends that it has finished successfully.
	Skip(name ...string)
	// CopyTo copies specified tasks and their deps to dst using dst.Add. Useful
	// when testing.
	//
	// Non-exist tasks are ignored silently. Say you have a Runner contains four
	// tasks: a, b, c (depends b) and d. Calling with a, c, f will add task a,
	// b and c into dst.
	//
	// ErrDup returned by dst.Add is silently ignored.
	//
	// It will call Runner.Validate (and returns error if any) before actually
	// coping tasks.
	//
	// State is not copied! Use with caution!
	CopyTo(dst Runner, name ...string) error
	// RunSync validates dependencies and runs all tasks synchronously.
	//
	// The order is unspecified, only dependencies are ensured.
	RunSync(ctx context.Context) error
	// Run validates dependencies and runs all tasks concurrently.
	// You have to take care of race conditions.
	Run(ctx context.Context) error
	// RunSomeSync validates dependencies and runs some tasks (and deps)
	// synchronously.
	RunSomeSync(ctx context.Context, names ...string) error
	// RunSome validates dependencies and runs some tasks (and deps)
	// concurrently.
	RunSome(ctx context.Context, names ...string) error
	// Validate validates the Runner, reports following errors if any:
	//
	//   - ErrMissing: one or more dependecy is missing.
	//   - ErrCyclic: there are cyclic dependencies.
	//
	// It caches the result until you call Runner.Add. Feel free to run it
	// multiple times.
	Validate() error
}

Runner manages task dependencies and runs the tasks.

Runner is not thread-safe, you MUST NOT share same instance amoung multiple goroutines.

Runner remembers whether a task is executed or not. Take a look at examples for detail.

func New

func New() Runner

New creates a Runner.

You're suggested to use New to create runner, as it ensures internal map is created brefore you use it. However, Runner.Add can initialize the Runner too.

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL