]> Cypherpunks.ru repositories - goredo.git/blobdiff - run.go
Record relative path to .do
[goredo.git] / run.go
diff --git a/run.go b/run.go
index 824f6c255ee45a0a165577c2d56f706d9627ebcd..aab8e9a5c7eb4b9d6d1b41acce7939b14681544a 100644 (file)
--- a/run.go
+++ b/run.go
@@ -1,6 +1,6 @@
 /*
 goredo -- redo implementation on pure Go
-Copyright (C) 2020 Sergey Matveev <stargrave@stargrave.org>
+Copyright (C) 2020-2021 Sergey Matveev <stargrave@stargrave.org>
 
 This program is free software: you can redistribute it and/or modify
 it under the terms of the GNU General Public License as published by
@@ -77,8 +77,6 @@ type RunErr struct {
        Err      error
 }
 
-func (e RunErr) Unwrap() error { return e.Err }
-
 func (e *RunErr) Name() string {
        var name string
        if e.DoFile == "" {
@@ -268,12 +266,14 @@ func runScript(tgtOrig string, errs chan error, traced bool) error {
        }
 
        // Determine basename and DIRPREFIX
+       doFileRelPath := doFile
        ents := strings.Split(cwd, "/")
        ents = ents[len(ents)-upLevels:]
        dirPrefix := path.Join(ents...)
        cwdOrig := cwd
        for i := 0; i < upLevels; i++ {
                cwd = path.Join(cwd, "..")
+               doFileRelPath = path.Join("..", doFileRelPath)
        }
        cwd = path.Clean(cwd)
        doFilePath := path.Join(cwd, doFile)
@@ -281,10 +281,10 @@ func runScript(tgtOrig string, errs chan error, traced bool) error {
        runErr := RunErr{Tgt: tgtOrig}
        if strings.HasPrefix(doFile, "default.") {
                basename = tgt[:len(tgt)-(len(doFile)-len("default.")-len(".do"))-1]
-               runErr.DoFile = doFile
+               runErr.DoFile = doFileRelPath
        }
 
-       if err = writeDep(fdDep, cwd, doFile); err != nil {
+       if err = writeDep(fdDep, cwdOrig, doFileRelPath); err != nil {
                cleanup()
                return TgtErr{tgtOrig, err}
        }
@@ -507,6 +507,7 @@ func runScript(tgtOrig string, errs chan error, traced bool) error {
 
                // Do we need to ifcreate it, of ifchange with renaming?
                if fd == nil {
+                       os.Remove(path.Join(cwdOrig, tgt))
                        err = ifcreate(fdDep, tgt)
                        if err != nil {
                                goto Finish