]> Sergey Matveev's repositories - glocate.git/blob - index.go
Use database's directory for temporary files
[glocate.git] / index.go
1 package main
2
3 import (
4         "fmt"
5         "log"
6         "os"
7 )
8
9 func index() *os.File {
10         tmp0, err := os.CreateTemp(TmpDir, "glocate-idx")
11         if err != nil {
12                 log.Fatalln(err)
13         }
14         defer os.Remove(tmp0.Name())
15
16         entsWalker := make(chan Ent, 1<<10)
17         entsWriter := make(chan Ent, 1<<10)
18         dirSizerJob := make(chan struct{})
19         var dirSizes []int64
20         entsWalker <- Ent{name: []string{"./"}}
21         sinkBack := make(chan Ent, 1)
22         go func() {
23                 dirSizer(&dirSizes, 1, sinkBack, entsWalker, entsWriter)
24                 close(dirSizerJob)
25         }()
26
27         writerJob := make(chan struct{})
28         go func() {
29                 writer(tmp0, entsWriter)
30                 close(writerJob)
31         }()
32
33         walkerStatusStop := make(chan struct{})
34         go walkerStatus(walkerStatusStop)
35         err = walker(entsWalker, []string{"./"})
36         walkerStatusStop <- struct{}{}
37         <-walkerStatusStop
38         fmt.Print("\r")
39         if err != nil {
40                 log.Fatalln(err)
41         }
42         close(entsWalker)
43         <-dirSizerJob
44         close(entsWriter)
45         <-writerJob
46
47         tmp1 := applyDirSizes(tmp0, dirSizes)
48         tmp0.Close()
49         return tmp1
50 }