Code Coverage
 
Lines
Functions and Methods
Classes and Traits
Total
100.00% covered (success)
100.00%
14 / 14
100.00% covered (success)
100.00%
3 / 3
CRAP
100.00% covered (success)
100.00%
1 / 1
DuplicateFileRevisionChecker
100.00% covered (success)
100.00%
14 / 14
100.00% covered (success)
100.00%
3 / 3
7
100.00% covered (success)
100.00%
1 / 1
 __construct
100.00% covered (success)
100.00%
1 / 1
100.00% covered (success)
100.00%
1 / 1
1
 findDuplicates
100.00% covered (success)
100.00%
6 / 6
100.00% covered (success)
100.00%
1 / 1
2
 removeIgnoredFiles
100.00% covered (success)
100.00%
7 / 7
100.00% covered (success)
100.00%
1 / 1
4
1<?php
2
3namespace FileImporter\Services;
4
5use FileImporter\Data\FileRevision;
6use MediaWiki\FileRepo\File\File;
7use MediaWiki\FileRepo\FileRepo;
8
9/**
10 * Class that can be used to check if a FileRevision already exists on the current wiki.
11 * Only current / latest and non deleted files are checked.
12 *
13 * @license GPL-2.0-or-later
14 * @author Addshore
15 */
16class DuplicateFileRevisionChecker {
17
18    public function __construct(
19        private readonly FileRepo $fileRepo,
20    ) {
21    }
22
23    /**
24     * @return File[] array of matched files
25     */
26    public function findDuplicates( FileRevision $fileRevision ) {
27        $sha1 = $fileRevision->getField( 'sha1' );
28        if ( !$sha1 ) {
29            return [];
30        }
31
32        $files = $this->fileRepo->findBySha1( $sha1 );
33        $files = $this->removeIgnoredFiles( $files );
34
35        return $files;
36    }
37
38    /**
39     * This removed removes files that are either old or deleted.
40     *
41     * @param File[] $files
42     *
43     * @return File[]
44     */
45    private function removeIgnoredFiles( array $files ) {
46        $wantedFiles = [];
47
48        foreach ( $files as $file ) {
49            if (
50                $file->isOld() ||
51                $file->isDeleted( File::DELETED_FILE )
52            ) {
53                continue;
54            }
55            $wantedFiles[] = $file;
56        }
57
58        return $wantedFiles;
59    }
60
61}