]> Cypherpunks.ru repositories - goredo.git/blobdiff - path.go
Refactor target paths, less CPU, less memory, more clarity
[goredo.git] / path.go
diff --git a/path.go b/path.go
index efb3e9834b536def8eb82e0e59cb2a818fa6fa30..0c961960e8c5186e9fba22091fe8c84f432bcad1 100644 (file)
--- a/path.go
+++ b/path.go
@@ -29,3 +29,37 @@ func cwdAndTgt(tgt string) (string, string) {
        cwd, tgt := path.Split(tgt)
        return mustAbs(cwd), tgt
 }
+
+type Tgt struct {
+       // a/h/t resemble zsh'es :a, :h, :t modifiers
+       a   string // absolute path
+       h   string // head of the path, directory
+       t   string // tail of the path, only name
+       rel string // relative to Cwd
+       dep string // path to dependency file
+}
+
+func NewTgt(tgt string) *Tgt {
+       t := Tgt{a: mustAbs(tgt)}
+       t.h, t.t = path.Split(t.a)
+       if len(t.h) > 1 {
+               t.h = t.h[:len(t.h)-1]
+       }
+       t.rel = mustRel(Cwd, t.a)
+       return &t
+}
+
+func (tgt *Tgt) String() string {
+       return tgt.rel
+}
+
+func (tgt *Tgt) Dep() string {
+       if tgt.dep == "" {
+               tgt.dep = path.Join(tgt.h, RedoDir, tgt.t+DepSuffix)
+       }
+       return tgt.dep
+}
+
+func (tgt *Tgt) RelTo(cwd string) string {
+       return mustRel(cwd, tgt.a)
+}