]> Sergey Matveev's repositories - btrtrc.git/blob - internal/tmproot/dir.go
1e078667fd83ff9cfb62e2c8338772cdc3515fe4
[btrtrc.git] / internal / tmproot / dir.go
1 package tmproot
2
3 import (
4         "io/ioutil"
5         "os"
6         "sync"
7 )
8
9 type Dir struct {
10         mu     sync.Mutex
11         path   string
12         inited bool
13 }
14
15 func (me *Dir) init(prefix string) bool {
16         if me.inited {
17                 return false
18         }
19         var err error
20         me.path, err = ioutil.TempDir("", prefix)
21         if err != nil {
22                 panic(err)
23         }
24         me.inited = true
25         return true
26 }
27
28 func (me *Dir) Init(prefix string) {
29         me.mu.Lock()
30         defer me.mu.Unlock()
31         if me.inited {
32                 panic("already inited")
33         }
34         me.init(prefix)
35 }
36
37 func (me *Dir) lazyDefaultInit() {
38         me.mu.Lock()
39         defer me.mu.Unlock()
40         me.init("")
41
42 }
43
44 func (me *Dir) NewSub() string {
45         me.lazyDefaultInit()
46         ret, err := ioutil.TempDir(me.path, "")
47         if err != nil {
48                 panic(err)
49         }
50         return ret
51 }
52
53 func (me *Dir) RemoveAll() error {
54         me.lazyDefaultInit()
55         return os.RemoveAll(me.path)
56 }