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",
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 == "" {
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)
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":
if tgtsWasEmpty {
tgts, err = targetsWalker([]string{Cwd})