Skip to content

Commit ced4deb

Browse files
committed
Fixed bug that caused more false positives in duplicates reporting
1 parent 6b685f6 commit ced4deb

File tree

3 files changed

+21
-4
lines changed

3 files changed

+21
-4
lines changed

entity/digest_to_files.go

Lines changed: 14 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,19 @@ func FileDigestComparator(a, b interface{}) int {
2020
} else if fa.FileSize > fb.FileSize {
2121
return -1
2222
} else {
23-
return 0
23+
if fa.FileExtension < fb.FileExtension {
24+
return 1
25+
} else if fa.FileExtension > fb.FileExtension {
26+
return -1
27+
} else {
28+
if fa.FileHash < fb.FileHash {
29+
return 1
30+
} else if fa.FileHash > fb.FileHash {
31+
return -1
32+
} else {
33+
return 0
34+
}
35+
}
2436
}
2537
}
2638

@@ -40,7 +52,6 @@ func (m *DigestToFiles) Set(key FileDigest, value string) {
4052
if found {
4153
values = valuesRaw.([]string)
4254
values = append(values, value)
43-
m.data.Put(key, values)
4455
} else {
4556
values = []string{value}
4657
}
@@ -49,7 +60,7 @@ func (m *DigestToFiles) Set(key FileDigest, value string) {
4960
}
5061

5162
// Remove removes entry in the map
52-
func (m *DigestToFiles) Remove(fd *FileDigest) {
63+
func (m *DigestToFiles) Remove(fd FileDigest) {
5364
m.data.Remove(fd)
5465
}
5566

report.go

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ import (
88
"github.com/m-manu/go-find-duplicates/entity"
99
"github.com/m-manu/go-find-duplicates/fmte"
1010
"os"
11+
"sort"
1112
"strconv"
1213
"time"
1314
)
@@ -46,6 +47,7 @@ func getReportAsText(duplicates *entity.DigestToFiles) bytes.Buffer {
4647
bb.Grow(duplicates.Size() * bytesPerLineGuess)
4748
for iter := duplicates.Iterator(); iter.HasNext(); {
4849
digest, paths := iter.Next()
50+
sort.Strings(paths)
4951
bb.WriteString(fmt.Sprintf("%s: %d duplicate(s)\n", digest, len(paths)-1))
5052
for _, path := range paths {
5153
bb.WriteString(fmt.Sprintf("\t%s\n", path))

service/find_duplicates.go

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -101,12 +101,16 @@ func computeDigestsAndGroupThem(shortlist entity.FileExtAndSizeToFiles, parallel
101101
}
102102
wg.Wait()
103103
// Remove non-duplicates
104+
var duplicateKeys []entity.FileDigest
104105
for iter := duplicates.Iterator(); iter.HasNext(); {
105106
digest, files := iter.Next()
106107
if len(files) <= 1 {
107-
duplicates.Remove(digest)
108+
duplicateKeys = append(duplicateKeys, *digest)
108109
}
109110
}
111+
for _, key := range duplicateKeys {
112+
duplicates.Remove(key)
113+
}
110114
return
111115
}
112116

0 commit comments

Comments
 (0)