X-Git-Url: http://www.git.cypherpunks.ru/?a=blobdiff_plain;f=main.go;h=634ca8fdff584f78140f35f4db8d178c58894d69;hb=b4eefdd675c9aef9ff8bd1089d031ee05733195b;hp=f75edd4049a69d8cd50ca6fee27d5c8f64e36ff2;hpb=61724b2573b9a0a27fa381c3809ad86ba55acfa7;p=goredo.git diff --git a/main.go b/main.go index f75edd4..634ca8f 100644 --- a/main.go +++ b/main.go @@ -1,6 +1,6 @@ /* goredo -- djb's redo implementation on pure Go -Copyright (C) 2020-2022 Sergey Matveev +Copyright (C) 2020-2023 Sergey Matveev 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 @@ -25,7 +25,6 @@ import ( "flag" "fmt" "io" - "io/ioutil" "log" "os" "os/signal" @@ -56,12 +55,14 @@ const ( CmdNameRedoTargets = "redo-targets" CmdNameRedoWhichdo = "redo-whichdo" CmdNameRedoDepFix = "redo-depfix" + CmdNameRedoInode = "redo-inode" ) var ( Cwd string BuildUUID string IsTopRedo bool // is it the top redo instance + UmaskCur int ) func mustSetenv(key string) { @@ -134,6 +135,9 @@ func main() { } log.SetFlags(log.Lshortfile) + UmaskCur = syscall.Umask(0) + syscall.Umask(UmaskCur) + var err error Cwd, err = os.Getwd() if err != nil { @@ -212,14 +216,14 @@ func main() { tracef(CDebug, "inode-trust: %s", InodeTrust) // Those are internal envs - FdOODTgts, err = ioutil.TempFile("", "ood-tgts") + FdOODTgts, err = os.CreateTemp("", "ood-tgts") if err != nil { log.Fatalln(err) } if err = os.Remove(FdOODTgts.Name()); err != nil { log.Fatalln(err) } - FdOODTgtsLock, err = ioutil.TempFile("", "ood-tgts.lock") + FdOODTgtsLock, err = os.CreateTemp("", "ood-tgts.lock") if err != nil { log.Fatalln(err) } @@ -240,7 +244,7 @@ func main() { if _, err = fd.Seek(0, io.SeekStart); err != nil { log.Fatalln(err) } - tgtsRaw, err := ioutil.ReadAll(bufio.NewReader(fd)) + tgtsRaw, err := io.ReadAll(bufio.NewReader(fd)) if err != nil { log.Fatalln(err) } @@ -335,7 +339,7 @@ CmdSwitch: } } case CmdNameRedoIfchange: - ok, err = ifchange(tgts, false, traced) + ok, err = ifchange(tgts, *flagForcedIfchange, traced) if err == nil { err = depsWrite(fdDep, tgts) } @@ -386,7 +390,7 @@ CmdSwitch: log.Fatalln("single target expected") } var fdTmp *os.File - fdTmp, err = ioutil.TempFile("", "whichdo") + fdTmp, err = os.CreateTemp("", "whichdo") if err != nil { break } @@ -499,6 +503,20 @@ CmdSwitch: } case CmdNameRedoDepFix: err = depFix(Cwd) + case CmdNameRedoInode: + var inode *Inode + for _, tgt := range tgts { + inode, err = inodeFromFileByPath(tgt) + if err != nil { + break + } + err = recfileWrite(os.Stdout, append( + []recfile.Field{{Name: "Target", Value: tgt}}, + inode.RecfileFields()...)...) + if err != nil { + break + } + } default: log.Fatalln("unknown command", cmdName) }