8 var TgtCache = make(map[string]*Tgt)
10 func mustAbs(pth string) string {
11 pth, err := filepath.Abs(pth)
18 func mustRel(basepath, targpath string) string {
19 pth, err := filepath.Rel(basepath, targpath)
26 func cwdMustRel(paths ...string) string {
27 return mustRel(Cwd, path.Join(paths...))
30 func cwdAndTgt(tgt string) (string, string) {
31 cwd, tgt := path.Split(tgt)
32 return mustAbs(cwd), tgt
36 // a/h/t resemble zsh'es :a, :h, :t modifiers
37 a string // absolute path
38 h string // head of the path, directory
39 t string // tail of the path, only name
40 rel string // relative to Cwd
41 dep string // path to dependency file
44 func NewTgt(tgt string) *Tgt {
47 if t := TgtCache[a]; t != nil {
52 t.h, t.t = path.Split(t.a)
54 t.h = t.h[:len(t.h)-1]
56 t.rel = mustRel(Cwd, t.a)
63 func (tgt *Tgt) String() string {
67 func (tgt *Tgt) Dep() string {
69 tgt.dep = path.Join(tgt.h, RedoDir, tgt.t+DepSuffix)
74 func (tgt *Tgt) RelTo(cwd string) string {
75 return mustRel(cwd, tgt.a)