--- /dev/null
+package main
+
+import (
+ "bufio"
+ "fmt"
+ "log"
+ "os"
+)
+
+func index() *os.File {
+ tmp0, err := os.CreateTemp("", "glocate-idx")
+ if err != nil {
+ log.Fatalln(err)
+ }
+ defer os.Remove(tmp0.Name())
+
+ entsWalker := make(chan Ent, 1<<10)
+ entsWriter := make(chan Ent, 1<<10)
+ dirSizerJob := make(chan struct{})
+ var dirSizes []int64
+ entsWalker <- Ent{name: []string{"./"}}
+ sinkBack := make(chan Ent, 1)
+ go func() {
+ dirSizer(&dirSizes, 1, sinkBack, entsWalker, entsWriter)
+ close(dirSizerJob)
+ }()
+
+ bw := bufio.NewWriterSize(tmp0, 1<<17)
+ writerJob := make(chan struct{})
+ go func() {
+ writer(bw, entsWriter)
+ close(writerJob)
+ }()
+
+ walkerStatusStop := make(chan struct{})
+ go walkerStatus(walkerStatusStop)
+ err = walker(entsWalker, []string{"./"})
+ walkerStatusStop <- struct{}{}
+ <-walkerStatusStop
+ fmt.Print("\r")
+ if err != nil {
+ log.Fatalln(err)
+ }
+ close(entsWalker)
+ <-dirSizerJob
+ close(entsWriter)
+ <-writerJob
+ if err = bw.Flush(); err != nil {
+ log.Fatalln(err)
+ }
+
+ tmp1 := applyDirSizes(tmp0, dirSizes)
+ tmp0.Close()
+ return tmp1
+}