summaryrefslogtreecommitdiff
path: root/runner/exc/runner.go
diff options
context:
space:
mode:
Diffstat (limited to 'runner/exc/runner.go')
-rw-r--r--runner/exc/runner.go42
1 files changed, 42 insertions, 0 deletions
diff --git a/runner/exc/runner.go b/runner/exc/runner.go
new file mode 100644
index 0000000..4b0c2e6
--- /dev/null
+++ b/runner/exc/runner.go
@@ -0,0 +1,42 @@
+package exc
+
+import (
+ "io/fs"
+ "path/filepath"
+ "pik/identity"
+ "pik/model"
+ "pik/runner"
+ "pik/spool"
+)
+
+func (e *exc) Hydrate(target model.Target) (model.HydratedTarget, error) {
+ return &Hydrated{
+ BaseHydration: &runner.BaseHydration[*Executable]{
+ Self: target.(*Executable),
+ },
+ }, nil
+}
+
+func (e *exc) Wants(fs fs.FS, file string, entry fs.DirEntry) (bool, error) {
+ if entry.IsDir() {
+ return false, nil
+ }
+ info, err := entry.Info()
+ if err != nil {
+ spool.Warn("%v\n", err)
+ }
+ return info.Mode()&0100 != 0, nil
+}
+
+func (e *exc) CreateTarget(fs fs.FS, source string, file string, entry fs.DirEntry) (model.Target, error) {
+ _, filename := filepath.Split(file)
+ return &Executable{
+
+ BaseTarget: runner.BaseTarget{
+ Identity: identity.New(entry.Name()),
+ MyTags: model.TagsFromFilename(filename),
+ MySub: runner.SubFromFile(file),
+ },
+ Path: filepath.Join(source, file),
+ }, nil
+}