func (command DupesCommand) findDuplicatesInDb() error { store, err := storage.Open() if err != nil { return fmt.Errorf("could not open storage: %v", err) } defer store.Close() if command.verbose { log.Info("identifying duplicate files.") } fileSets, err := store.DuplicateFiles() if err != nil { return fmt.Errorf("could not identify duplicate files: %v", err) } if command.verbose { log.Infof("found %v sets of duplicate files.", len(fileSets)) } for index, fileSet := range fileSets { if index > 0 { log.Print() } log.Printf("Set of %v duplicates:", len(fileSet)) for _, file := range fileSet { relPath := _path.Rel(file.Path()) log.Printf(" %v", relPath) } } return nil }
func (StatsCommand) Exec(options cli.Options, args []string) error { store, err := storage.Open() if err != nil { return fmt.Errorf("could not open storage: %v", err) } defer store.Close() tagCount, err := store.TagCount() if err != nil { return fmt.Errorf("could not retrieve tag count: %v", err) } fileCount, err := store.FileCount() if err != nil { return fmt.Errorf("could not retrieve file count: %v", err) } fileTagCount, err := store.FileTagCount() if err != nil { return fmt.Errorf("could not retrieve taggings count: %v", err) } log.Printf(" Tags: %v", tagCount) log.Printf(" Files: %v", fileCount) log.Printf(" Taggings: %v", fileTagCount) return nil }
func (command DupesCommand) findDuplicatesOf(paths []string) error { store, err := storage.Open() if err != nil { return fmt.Errorf("could not open storage: %v", err) } defer store.Close() first := true for _, path := range paths { if command.verbose { log.Infof("%v: identifying duplicate files.\n", path) } fp, err := fingerprint.Create(path) if err != nil { return fmt.Errorf("%v: could not create fingerprint: %v", path, err) } if fp == fingerprint.Fingerprint("") { return nil } files, err := store.FilesByFingerprint(fp) if err != nil { return fmt.Errorf("%v: could not retrieve files matching fingerprint '%v': %v", path, fp, err) } absPath, err := filepath.Abs(path) if err != nil { return fmt.Errorf("%v: could not determine absolute path: %v", path, err) } // filter out the file we're searching on dupes := files.Where(func(file *database.File) bool { return file.Path() != absPath }) if len(paths) > 1 && len(dupes) > 0 { if first { first = false } else { log.Print() } log.Printf("%v duplicates of %v:", len(dupes), path) for _, dupe := range dupes { relPath := _path.Rel(dupe.Path()) log.Printf(" %v", relPath) } } else { for _, dupe := range dupes { relPath := _path.Rel(dupe.Path()) log.Print(relPath) } } } return nil }
func (command *StatusCommand) printRow(row Row) { log.Printf("%v %v", string(row.Status), row.Path) }