8 func mustAbs(pth string) string {
9 pth, err := filepath.Abs(pth)
16 func mustRel(basepath, targpath string) string {
17 pth, err := filepath.Rel(basepath, targpath)
24 func cwdMustRel(paths ...string) string {
25 return mustRel(Cwd, path.Join(paths...))
28 func cwdAndTgt(tgt string) (string, string) {
29 cwd, tgt := path.Split(tgt)
30 return mustAbs(cwd), tgt
34 // a/h/t resemble zsh'es :a, :h, :t modifiers
35 a string // absolute path
36 h string // head of the path, directory
37 t string // tail of the path, only name
38 rel string // relative to Cwd
39 dep string // path to dependency file
42 func NewTgt(tgt string) *Tgt {
43 t := Tgt{a: mustAbs(tgt)}
44 t.h, t.t = path.Split(t.a)
46 t.h = t.h[:len(t.h)-1]
48 t.rel = mustRel(Cwd, t.a)
52 func (tgt *Tgt) String() string {
56 func (tgt *Tgt) Dep() string {
58 tgt.dep = path.Join(tgt.h, RedoDir, tgt.t+DepSuffix)
63 func (tgt *Tgt) RelTo(cwd string) string {
64 return mustRel(cwd, tgt.a)