"path"
"path/filepath"
"strconv"
+ "strings"
"go.cypherpunks.ru/recfile"
"golang.org/x/sys/unix"
"redo-stamp",
"redo-whichdo",
} {
+ fmt.Println(os.Args[0], "<-", cmdName)
if err := os.Symlink(os.Args[0], cmdName); err != nil {
rc = 1
log.Println(err)
}
NoColor = os.Getenv(EnvNoColor) != ""
- NoHash = os.Getenv(EnvNoHash) == "1"
NoSync = os.Getenv(EnvNoSync) == "1"
TopDir = os.Getenv(EnvTopDir)
- if TopDir != "" {
+ if TopDir == "" {
+ TopDir = "/"
+ } else {
TopDir, err = filepath.Abs(TopDir)
if err != nil {
panic(err)
if Debug || os.Getenv(EnvLogPid) == "1" {
MyPid = os.Getpid()
}
+ var traced bool
+ if *flagTraceAll {
+ mustSetenv(EnvTrace, "1")
+ }
if *flagTrace {
- Trace = true
+ traced = true
} else {
- Trace = os.Getenv(EnvTrace) == "1"
+ traced = os.Getenv(EnvTrace) == "1"
}
// Those are internal envs
fdDep = mustParseFd(v, EnvDepFd)
}
BuildUUID = os.Getenv(EnvBuildUUID)
+ tgts := flag.Args()
if BuildUUID == "" {
raw := new([16]byte)
if _, err = io.ReadFull(rand.Reader, raw[:]); err != nil {
"%x-%x-%x-%x-%x",
raw[0:4], raw[4:6], raw[6:8], raw[8:10], raw[10:],
)
+ if len(tgts) == 0 {
+ tgts = []string{"all"}
+ }
}
+ statusInit()
tgts := flag.Args()
if len(tgts) == 0 {
CmdSwitch:
switch cmdName {
case "redo":
- Force = true
- ok, err = ifchange(tgts)
+ for _, tgt := range tgts {
+ ok, err = ifchange([]string{tgt}, true, traced)
+ if err != nil || !ok {
+ break
+ }
+ }
case "redo-ifchange":
- ok, err = ifchange(tgts)
+ ok, err = ifchange(tgts, false, traced)
writeDeps(fdDep, tgts)
case "redo-ifcreate":
if fdDep == nil {
break
}
os.Remove(fdTmp.Name())
- var doFile string
cwd, tgt := cwdAndTgt(tgts[0])
- doFile, _, err = findDo(fdTmp, cwd, tgt)
+ doFile, upLevels, err := findDo(fdTmp, cwd, tgt)
+ if err != nil {
+ break
+ }
+ _, err = fdTmp.Seek(0, 0)
if err != nil {
break
}
- fdTmp.Seek(0, 0)
r := recfile.NewReader(fdTmp)
for {
m, err := r.NextMap()
}
fmt.Println(cwdMustRel(cwd, m["Target"]))
}
- ok = doFile != ""
+ if doFile == "" {
+ ok = false
+ } else {
+ fmt.Println(path.Join(strings.Repeat("..", upLevels), doFile))
+ }
default:
log.Fatalln("unknown command", cmdName)
}