• Home
  • Features
  • Pricing
  • Docs
  • Announcements
  • Sign In

ljacqu / FileDuplicateFinder / 5661257559

25 Jul 2023 08:04PM UTC coverage: 23.055% (-0.4%) from 23.453%
5661257559

push

github

ljacqu
Merge remote-tracking branch 'origin/master'

111 of 610 branches covered (18.2%)

Branch coverage included in aggregate %.

378 of 1511 relevant lines covered (25.02%)

1.28 hits per line

Source File
Press 'n' to go to next uncovered line, 'b' for previous

89.47
/src/main/java/ch/jalu/fileduplicatefinder/duplicatefinder/FileDuplicateRunner.java
1
package ch.jalu.fileduplicatefinder.duplicatefinder;
2

3
import ch.jalu.fileduplicatefinder.config.FileUtilConfiguration;
4
import ch.jalu.fileduplicatefinder.duplicatefinder.output.DuplicateEntryOutputter;
5
import ch.jalu.fileduplicatefinder.filefilter.ConfigurableFilePathMatcher;
6
import ch.jalu.fileduplicatefinder.filefilter.FilePathMatcher;
7
import ch.jalu.fileduplicatefinder.hashing.FileHasher;
8
import ch.jalu.fileduplicatefinder.hashing.FileHasherFactory;
9
import ch.jalu.fileduplicatefinder.hashing.HashingAlgorithm;
10
import ch.jalu.fileduplicatefinder.output.TaskWriterReader;
11
import com.google.common.base.Preconditions;
12

13
import java.nio.file.Files;
14
import java.nio.file.Path;
15
import java.util.List;
16
import java.util.Map;
17

18
import static ch.jalu.fileduplicatefinder.config.FileUtilSettings.DUPLICATE_FOLDER;
19
import static ch.jalu.fileduplicatefinder.config.FileUtilSettings.DUPLICATE_HASH_ALGORITHM;
20
import static ch.jalu.fileduplicatefinder.config.FileUtilSettings.DUPLICATE_OUTPUT_DISTRIBUTION;
21
import static ch.jalu.fileduplicatefinder.config.FileUtilSettings.DUPLICATE_OUTPUT_FOLDER_PAIR_COUNT;
22

23
public class FileDuplicateRunner {
24

25
    public static final String ID = "duplicates";
26

27
    private final FileUtilConfiguration configuration;
28
    private final FileHasherFactory fileHasherFactory;
29
    private final FolderPairDuplicatesCounter folderPairDuplicatesCounter;
30
    private final DuplicateEntryOutputter entryOutputter;
31
    private final TaskWriterReader logger;
32
    private final long start = System.currentTimeMillis();
3✔
33

34
    public FileDuplicateRunner(FileUtilConfiguration configuration, FileHasherFactory fileHasherFactory,
35
                               FolderPairDuplicatesCounter folderPairDuplicatesCounter,
36
                               DuplicateEntryOutputter entryOutputter, TaskWriterReader logger) {
2✔
37
        this.configuration = configuration;
3✔
38
        this.fileHasherFactory = fileHasherFactory;
3✔
39
        this.folderPairDuplicatesCounter = folderPairDuplicatesCounter;
3✔
40
        this.entryOutputter = entryOutputter;
3✔
41
        this.logger = logger;
3✔
42
    }
1✔
43

44
    public void run() {
45
        Path path = configuration.getValueOrPrompt(DUPLICATE_FOLDER);
6✔
46
        logger.printLn("Processing '" + path.toAbsolutePath() + "'");
6✔
47
        Preconditions.checkArgument(Files.exists(path),
6✔
48
            "Path '" + path.toAbsolutePath() + "' does not exist");
2✔
49
        Preconditions.checkArgument(Files.isDirectory(path),
6✔
50
            "Path '" + path.toAbsolutePath() + "' is not a directory");
2✔
51

52
        HashingAlgorithm hashAlgorithm = configuration.getValue(DUPLICATE_HASH_ALGORITHM);
6✔
53
        FileHasher fileHasher = fileHasherFactory.createFileHasher(hashAlgorithm);
5✔
54

55
        FilePathMatcher pathMatcher = new ConfigurableFilePathMatcher(configuration);
6✔
56

57
        List<DuplicateEntry> duplicates = findDuplicates(path, fileHasher, pathMatcher);
6✔
58
        entryOutputter.outputResult(duplicates);
4✔
59

60
        if (configuration.getValue(DUPLICATE_OUTPUT_FOLDER_PAIR_COUNT)) {
7✔
61
            logger.printNewLine();
3✔
62
            logger.printLn("Folder duplicates");
4✔
63

64
            Map<FolderPair, Long> duplicatesByFolderPair = folderPairDuplicatesCounter
3✔
65
                .getFolderToFolderDuplicateCount(duplicates);
2✔
66
            entryOutputter.outputDirectoryPairs(duplicatesByFolderPair);
4✔
67
        }
68

69
        logger.printLn("Took " + ((System.currentTimeMillis() - start) / 1000.0) + " seconds");
11✔
70
    }
1✔
71

72
    private List<DuplicateEntry> findDuplicates(Path path, FileHasher fileHasher, FilePathMatcher pathMatcher) {
73
        FileDuplicateFinder fileDuplicateFinder =
11✔
74
            new FileDuplicateFinder(path, fileHasher, pathMatcher, configuration, logger);
75
        fileDuplicateFinder.processFiles();
2✔
76
        if (configuration.getValue(DUPLICATE_OUTPUT_DISTRIBUTION)) {
7!
77
            fileDuplicateFinder.getSizeDistribution().entrySet().stream()
×
78
                .sorted(Map.Entry.comparingByKey())
×
79
                .forEach(e -> logger.printLn(e.getValue() + " file size entries with " + e.getKey() + " files"));
×
80
        }
81
        return fileDuplicateFinder.filterFilesForDuplicates();
3✔
82
    }
83
}
STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2026 Coveralls, Inc