aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/cli/internal/util/task_id.go
diff options
context:
space:
mode:
Diffstat (limited to 'cli/internal/util/task_id.go')
-rw-r--r--cli/internal/util/task_id.go66
1 files changed, 66 insertions, 0 deletions
diff --git a/cli/internal/util/task_id.go b/cli/internal/util/task_id.go
new file mode 100644
index 0000000..e4415b6
--- /dev/null
+++ b/cli/internal/util/task_id.go
@@ -0,0 +1,66 @@
+package util
+
+import (
+ "fmt"
+ "strings"
+)
+
+const (
+ // TaskDelimiter separates a package name from a task name in a task id
+ TaskDelimiter = "#"
+ // RootPkgName is the reserved name that specifies the root package
+ RootPkgName = "//"
+)
+
+// GetTaskId returns a package-task identifier (e.g @feed/thing#build).
+func GetTaskId(pkgName interface{}, target string) string {
+ if IsPackageTask(target) {
+ return target
+ }
+ return fmt.Sprintf("%v%v%v", pkgName, TaskDelimiter, target)
+}
+
+// RootTaskID returns the task id for running the given task in the root package
+func RootTaskID(target string) string {
+ return GetTaskId(RootPkgName, target)
+}
+
+// GetPackageTaskFromId returns a tuple of the package name and target task
+func GetPackageTaskFromId(taskId string) (packageName string, task string) {
+ arr := strings.Split(taskId, TaskDelimiter)
+ return arr[0], arr[1]
+}
+
+// RootTaskTaskName returns the task portion of a root task taskID
+func RootTaskTaskName(taskID string) string {
+ return strings.TrimPrefix(taskID, RootPkgName+TaskDelimiter)
+}
+
+// IsPackageTask returns true if input is a package-specific task
+// whose name has a length greater than 0.
+//
+// Accepted: myapp#build
+// Rejected: #build, build
+func IsPackageTask(task string) bool {
+ return strings.Index(task, TaskDelimiter) > 0
+}
+
+// IsTaskInPackage returns true if the task does not belong to a different package
+// note that this means unscoped tasks will always return true
+func IsTaskInPackage(task string, packageName string) bool {
+ if !IsPackageTask(task) {
+ return true
+ }
+ packageNameExpected, _ := GetPackageTaskFromId(task)
+ return packageNameExpected == packageName
+}
+
+// StripPackageName removes the package portion of a taskID if it
+// is a package task. Non-package tasks are returned unmodified
+func StripPackageName(taskID string) string {
+ if IsPackageTask(taskID) {
+ _, task := GetPackageTaskFromId(taskID)
+ return task
+ }
+ return taskID
+}