17 func (ent *Ent) IsDir() bool {
18 return IsDir(ent.name[len(ent.name)-1])
21 func dbCommit(dbPath string, tmp *os.File) {
22 umask := syscall.Umask(0)
24 if err := os.Chmod(tmp.Name(), os.FileMode(0666&^umask)); err != nil {
27 if err := os.Rename(tmp.Name(), dbPath); err != nil {
33 dbPath := flag.String("db", "glocate.db", "Path to database")
34 doIndex := flag.Bool("index", false, "Perform indexing")
35 doUpdate := flag.Bool("update", false, "Feed zfs-diff and update the database")
36 strip := flag.String("strip", "", "Strip prefix from zfs-diff's paths")
37 showMachine := flag.Bool("machine", false, "Show machine friendly")
38 showTree := flag.Bool("tree", false, "Show human-friendly tree")
39 dryRun := flag.Bool("n", false, "Dry run, do not overwrite database")
41 log.SetFlags(log.Ldate | log.Ltime | log.Lmicroseconds | log.Lshortfile)
47 dbCommit(*dbPath, tmp)
53 tmp := updateWithDiff(*dbPath, *strip)
56 dbCommit(*dbPath, tmp)
61 db, err := os.Open(*dbPath)
65 entsReader := make(chan Ent, 1<<10)
66 go reader(db, entsReader)
68 entsPrinter := make(chan Ent, 1<<10)
69 printerJob := make(chan struct{})
72 printerMachine(entsPrinter)
74 printerTree(entsPrinter)
76 printerSimple(entsPrinter)
82 if len(flag.Args()) > 0 {
83 root = strings.Split("./"+flag.Arg(0), "/")
87 for ent := range entsReader {
88 if hasPrefix(ent.name, root) {