var (
Cwd string
BuildUUID string
+ IsTopRedo bool // is it the top redo instance
)
func mustSetenv(key, value string) {
rc := 0
for _, cmdName := range []string{
"redo",
+ "redo-affects",
"redo-always",
"redo-cleanup",
"redo-dot",
}
}
DirPrefix = os.Getenv(EnvDirPrefix)
+ DepCwd = os.Getenv(EnvDepCwd)
if *flagStderrKeep {
mustSetenv(EnvStderrKeep, "1")
panic(err)
}
unix.Flock(int(fdLock.Fd()), unix.LOCK_UN)
- OODTgts = make(map[string]struct{})
+ OODTgts = map[string]struct{}{}
for _, tgtRaw := range bytes.Split(tgtsRaw, []byte{0}) {
t := string(tgtRaw)
if t == "" {
tgts := flag.Args()
BuildUUID = os.Getenv(EnvBuildUUID)
+ tgtsWasEmpty := len(tgts) == 0
if BuildUUID == "" {
+ IsTopRedo = true
raw := new([16]byte)
if _, err = io.ReadFull(rand.Reader, raw[:]); err != nil {
log.Fatalln(err)
"%x-%x-%x-%x-%x",
raw[0:4], raw[4:6], raw[6:8], raw[8:10], raw[10:],
)
- if len(tgts) == 0 {
+ if tgtsWasEmpty {
tgts = []string{"all"}
}
}
fmt.Println(rel)
}
case "redo-targets":
- tgts, err = targetsWalker(Cwd)
+ if tgtsWasEmpty {
+ tgts = []string{Cwd}
+ }
+ tgts, err = targetsWalker(tgts)
+ if err != nil {
+ break
+ }
sort.Strings(tgts)
for _, tgt := range tgts {
fmt.Println(tgt)
}
+ case "redo-affects":
+ if tgtsWasEmpty {
+ log.Fatalln("no targets specified")
+ }
+ var tgtsKnown []string
+ tgtsKnown, err = targetsWalker([]string{Cwd})
+ if err != nil {
+ break
+ }
+ deps := map[string]map[string]struct{}{}
+ for _, tgt := range tgtsKnown {
+ collectDeps(Cwd, tgt, 0, deps, true)
+ }
+ seen := map[string]struct{}{}
+ for _, tgt := range tgts {
+ collectWholeDeps(deps[tgt], deps, seen)
+ }
+ tgts := make([]string, 0, len(seen))
+ for dep := range seen {
+ tgts = append(tgts, dep)
+ }
+ sort.Strings(tgts)
+ for _, dep := range tgts {
+ fmt.Println(dep)
+ }
case "redo-ood":
- tgts, err = targetsWalker(Cwd)
+ if tgtsWasEmpty {
+ tgts, err = targetsWalker([]string{Cwd})
+ if err != nil {
+ break
+ }
+ }
sort.Strings(tgts)
var ood bool
for _, tgt := range tgts {
}
}
case "redo-sources":
- tgts, err = sourcesWalker()
+ if tgtsWasEmpty {
+ tgts, err = targetsWalker([]string{Cwd})
+ if err != nil {
+ break
+ }
+ }
sort.Strings(tgts)
- for _, tgt := range tgts {
- fmt.Println(tgt)
+ var srcs []string
+ srcs, err = sourcesWalker(tgts)
+ sort.Strings(srcs)
+ for _, src := range srcs {
+ fmt.Println(src)
}
default:
log.Fatalln("unknown command", cmdName)