18 func (ent *Ent) IsDir() bool {
19 return IsDir(ent.name[len(ent.name)-1])
22 func dbCommit(dbPath string, tmp *os.File) {
23 umask := syscall.Umask(0)
25 if err := os.Chmod(tmp.Name(), os.FileMode(0666&^umask)); err != nil {
28 if err := os.Rename(tmp.Name(), dbPath); err != nil {
34 dbPath := flag.String("db", "glocate.db", "Path to database")
35 doIndex := flag.Bool("index", false, "Perform indexing")
36 doUpdate := flag.Bool("update", false, "Feed zfs-diff and update the database")
37 strip := flag.String("strip", "", "Strip prefix from zfs-diff's paths")
38 showMachine := flag.Bool("machine", false, "Show machine friendly")
39 showTree := flag.Bool("tree", false, "Show human-friendly tree")
40 dryRun := flag.Bool("n", false, "Dry run, do not overwrite database")
42 log.SetFlags(log.Ldate | log.Ltime | log.Lmicroseconds | log.Lshortfile)
48 dbCommit(*dbPath, tmp)
54 tmp := updateWithDiff(*dbPath, *strip)
57 dbCommit(*dbPath, tmp)
62 db, err := os.Open(*dbPath)
66 entsReader := make(chan Ent, 1<<10)
67 go reader(bufio.NewReaderSize(db, 1<<17), entsReader)
69 entsPrinter := make(chan Ent, 1<<10)
70 printerJob := make(chan struct{})
73 printerMachine(entsPrinter)
75 printerTree(entsPrinter)
77 printerSimple(entsPrinter)
83 if len(flag.Args()) > 0 {
84 root = strings.Split("./"+flag.Arg(0), "/")
88 for ent := range entsReader {
89 if hasPrefix(ent.name, root) {