+ if err != nil {
+ break
+ }
+ res := make([]string, 0, len(srcs))
+ for _, tgt := range srcs {
+ res = append(res, tgt.rel)
+ }
+ srcs = nil
+ sort.Strings(res)
+ for _, src := range res {
+ fmt.Println(src)
+ }
+ case CmdNameRedoDepFix:
+ IfchangeCache = nil
+ DepFixHashCache = make(map[string]Hash)
+ err = depFix(Cwd)
+ case CmdNameRedoInode:
+ var inode *Inode
+ for _, tgt := range tgts {
+ inode, err = inodeFromFileByPath(tgt.a)
+ if err != nil {
+ err = ErrLine(err)
+ break
+ }
+ err = recfileWrite(os.Stdout, append(
+ []recfile.Field{{Name: "Target", Value: tgt.String()}},
+ inode.RecfileFields()...)...)
+ if err != nil {
+ err = ErrLine(err)
+ break
+ }
+ }
+ case CmdNameRedoDep2Rec:
+ var data []byte
+ data, err = os.ReadFile(tgts[0].a)
+ if err != nil {
+ break
+ }
+ var build uuid.UUID
+ build, data, err = depHeadParse(data)
+ if err != nil {
+ break
+ }
+ w := bufio.NewWriter(os.Stdout)
+ err = recfileWrite(w, []recfile.Field{
+ {Name: "Build", Value: build.String()},
+ }...)
+ if err != nil {
+ break
+ }
+ var typ byte
+ var chunk []byte
+ var inode Inode
+ for len(data) > 0 {
+ typ, chunk, data, _ = chunkRead(data)
+ switch typ {
+ case DepTypeAlways:
+ err = recfileWrite(w, []recfile.Field{
+ {Name: "Type", Value: "always"},
+ }...)
+ case DepTypeStamp:
+ err = recfileWrite(w, []recfile.Field{
+ {Name: "Type", Value: "stamp"},
+ {Name: "Hash", Value: hex.EncodeToString(chunk)},
+ }...)
+ case DepTypeIfcreate:
+ err = recfileWrite(w, []recfile.Field{
+ {Name: "Type", Value: "ifcreate"},
+ {Name: "Target", Value: string(chunk)},
+ }...)
+ case DepTypeIfchange:
+ name := string(chunk[InodeLen+HashLen:])
+ meta := chunk[:InodeLen+HashLen]
+ fields := []recfile.Field{
+ {Name: "Type", Value: "ifchange"},
+ {Name: "Target", Value: name},
+ }
+ fields = append(fields, recfile.Field{
+ Name: "Hash", Value: Hash(meta[InodeLen:]).String(),
+ })
+ inode = Inode(meta[:][:InodeLen])
+ fields = append(fields, inode.RecfileFields()...)
+ err = recfileWrite(w, fields...)
+ case DepTypeIfchangeNonex:
+ err = recfileWrite(w, []recfile.Field{
+ {Name: "Type", Value: "ifchange"},
+ {Name: "Target", Value: string(chunk)},
+ }...)
+ }
+ if err != nil {
+ break
+ }