]> Cypherpunks.ru repositories - goredo.git/blobdiff - main.go
Do not forget to install redo-inode
[goredo.git] / main.go
diff --git a/main.go b/main.go
index 025ecbed5be4972146276c386d0fb14810de6975..39c6d118a0d941ce0a6f113ca378ef55298e39e8 100644 (file)
--- a/main.go
+++ b/main.go
@@ -118,6 +118,7 @@ func main() {
                        CmdNameRedoDot,
                        CmdNameRedoIfchange,
                        CmdNameRedoIfcreate,
+                       CmdNameRedoInode,
                        CmdNameRedoLog,
                        CmdNameRedoOOD,
                        CmdNameRedoSources,
@@ -228,9 +229,11 @@ func main() {
                log.Fatal(err)
        }
 
+       var fdLock *os.File
        if v := os.Getenv(EnvOODTgtsFd); v != "" {
                fd := mustParseFd(v, EnvOODTgtsFd)
-               fdLock := mustParseFd(v, EnvOODTgtsLockFd)
+               fdLock = mustParseFd(v, EnvOODTgtsLockFd)
+               defer fdLock.Close()
                flock := unix.Flock_t{
                        Type:   unix.F_WRLCK,
                        Whence: io.SeekStart,
@@ -499,11 +502,23 @@ CmdSwitch:
                        }
                }
                sort.Strings(tgts)
-               var srcs []string
-               srcs, err = sourcesWalker(tgts)
-               err = ErrLine(err)
-               sort.Strings(srcs)
-               for _, src := range srcs {
+               seen := make(map[string]struct{})
+               seenDeps := make(map[string]struct{})
+               srcs := make(map[string]struct{})
+               err = ErrLine(sourcesWalker(tgts, seen, seenDeps, srcs))
+               seen = nil
+               seenDeps = nil
+               if err != nil {
+                       break
+               }
+               seenDeps = nil
+               res := make([]string, 0, len(srcs))
+               for p := range srcs {
+                       res = append(res, p)
+               }
+               srcs = nil
+               sort.Strings(res)
+               for _, src := range res {
                        fmt.Println(src)
                }
        case CmdNameRedoDepFix: