]> Cypherpunks.ru repositories - goredo.git/blobdiff - main.go
Add information about error occurrence place
[goredo.git] / main.go
diff --git a/main.go b/main.go
index 8c95d84bd3ed76135ce08086ebb595498b8635e0..f6304aca8dd3b92c4d2a05bb77cc714ebd96842b 100644 (file)
--- a/main.go
+++ b/main.go
@@ -128,7 +128,7 @@ func main() {
                        fmt.Println(os.Args[0], "<-", cmdName)
                        if err := os.Symlink(os.Args[0], cmdName); err != nil {
                                rc = 1
-                               log.Println(err)
+                               log.Print(err)
                        }
                }
                os.Exit(rc)
@@ -141,7 +141,7 @@ func main() {
        var err error
        Cwd, err = os.Getwd()
        if err != nil {
-               log.Fatalln(err)
+               log.Fatal(err)
        }
 
        TopDir = os.Getenv(EnvTopDir)
@@ -218,17 +218,17 @@ func main() {
        // Those are internal envs
        FdOODTgts, err = os.CreateTemp("", "ood-tgts")
        if err != nil {
-               log.Fatalln(err)
+               log.Fatal(err)
        }
        if err = os.Remove(FdOODTgts.Name()); err != nil {
-               log.Fatalln(err)
+               log.Fatal(err)
        }
        FdOODTgtsLock, err = os.CreateTemp("", "ood-tgts.lock")
        if err != nil {
-               log.Fatalln(err)
+               log.Fatal(err)
        }
        if err = os.Remove(FdOODTgtsLock.Name()); err != nil {
-               log.Fatalln(err)
+               log.Fatal(err)
        }
 
        if v := os.Getenv(EnvOODTgtsFd); v != "" {
@@ -239,18 +239,18 @@ func main() {
                        Whence: io.SeekStart,
                }
                if err = unix.FcntlFlock(fdLock.Fd(), unix.F_SETLKW, &flock); err != nil {
-                       log.Fatalln(err)
+                       log.Fatal(err)
                }
                if _, err = fd.Seek(0, io.SeekStart); err != nil {
-                       log.Fatalln(err)
+                       log.Fatal(err)
                }
                tgtsRaw, err := io.ReadAll(bufio.NewReader(fd))
                if err != nil {
-                       log.Fatalln(err)
+                       log.Fatal(err)
                }
                flock.Type = unix.F_UNLCK
                if err = unix.FcntlFlock(fdLock.Fd(), unix.F_SETLK, &flock); err != nil {
-                       log.Fatalln(err)
+                       log.Fatal(err)
                }
                OODTgts = map[string]struct{}{}
                for _, tgtRaw := range bytes.Split(tgtsRaw, []byte{0}) {
@@ -286,7 +286,7 @@ func main() {
                IsTopRedo = true
                raw := new([16]byte)
                if _, err = io.ReadFull(rand.Reader, raw[:]); err != nil {
-                       log.Fatalln(err)
+                       log.Fatal(err)
                }
                raw[6] = (raw[6] & 0x0F) | uint8(4<<4) // version 4
                BuildUUID = fmt.Sprintf(
@@ -353,6 +353,7 @@ CmdSwitch:
                                path.Join(Cwd, tgt),
                        )
                        if err != nil {
+                               err = ErrLine(err)
                                break
                        }
                        err = ifcreate(fdDep, tgtRel)
@@ -381,29 +382,33 @@ CmdSwitch:
                err = stamp(fdDep, os.Stdin)
        case CmdNameRedoLog:
                if len(tgts) != 1 {
-                       log.Fatalln("single target expected")
+                       log.Fatal("single target expected")
                }
                d, t := cwdAndTgt(tgts[0])
                err = showBuildLog(d, t, nil, 0)
        case CmdNameRedoWhichdo:
                if len(tgts) != 1 {
-                       log.Fatalln("single target expected")
+                       log.Fatal("single target expected")
                }
                var fdTmp *os.File
                fdTmp, err = os.CreateTemp("", "whichdo")
                if err != nil {
+                       err = ErrLine(err)
                        break
                }
                if err = os.Remove(fdTmp.Name()); err != nil {
+                       err = ErrLine(err)
                        break
                }
                cwd, tgt := cwdAndTgt(tgts[0])
                doFile, upLevels, err := findDo(fdTmp, cwd, tgt)
                if err != nil {
+                       err = ErrLine(err)
                        break
                }
                _, err = fdTmp.Seek(0, io.SeekStart)
                if err != nil {
+                       err = ErrLine(err)
                        break
                }
                r := recfile.NewReader(fdTmp)
@@ -413,6 +418,7 @@ CmdSwitch:
                                if errors.Is(err, io.EOF) {
                                        break
                                }
+                               err = ErrLine(err)
                                break CmdSwitch
                        }
                        fmt.Println(cwdMustRel(cwd, m["Target"]))
@@ -438,6 +444,7 @@ CmdSwitch:
                }
                tgts, err = targetsWalker(tgts)
                if err != nil {
+                       err = ErrLine(err)
                        break
                }
                sort.Strings(tgts)
@@ -446,16 +453,17 @@ CmdSwitch:
                }
        case CmdNameRedoAffects:
                if tgtsWasEmpty {
-                       log.Fatalln("no targets specified")
+                       log.Fatal("no targets specified")
                }
                var tgtsKnown []string
                tgtsKnown, err = targetsWalker([]string{Cwd})
                if err != nil {
+                       err = ErrLine(err)
                        break
                }
                deps := map[string]map[string]struct{}{}
                for _, tgt := range tgtsKnown {
-                       collectDeps(Cwd, tgt, 0, deps, true)
+                       collectDeps(Cwd, tgt, 0, deps, true, map[string]struct{}{})
                }
                seen := map[string]struct{}{}
                for _, tgt := range tgts {
@@ -481,6 +489,7 @@ CmdSwitch:
                for _, tgt := range tgts {
                        ood, err = isOOD(Cwd, tgt, 0, nil)
                        if err != nil {
+                               err = ErrLine(err)
                                break
                        }
                        if ood {
@@ -491,12 +500,14 @@ CmdSwitch:
                if tgtsWasEmpty {
                        tgts, err = targetsWalker([]string{Cwd})
                        if err != nil {
+                               err = ErrLine(err)
                                break
                        }
                }
                sort.Strings(tgts)
                var srcs []string
                srcs, err = sourcesWalker(tgts)
+               err = ErrLine(err)
                sort.Strings(srcs)
                for _, src := range srcs {
                        fmt.Println(src)
@@ -508,12 +519,14 @@ CmdSwitch:
                for _, tgt := range tgts {
                        inode, err = inodeFromFileByPath(tgt)
                        if err != nil {
+                               err = ErrLine(err)
                                break
                        }
                        err = recfileWrite(os.Stdout, append(
                                []recfile.Field{{Name: "Target", Value: tgt}},
                                inode.RecfileFields()...)...)
                        if err != nil {
+                               err = ErrLine(err)
                                break
                        }
                }
@@ -521,7 +534,7 @@ CmdSwitch:
                log.Fatalln("unknown command", cmdName)
        }
        if err != nil {
-               log.Println(err)
+               log.Print(err)
        }
        rc := 0
        if !ok || err != nil {