0f4a238414
Storage and repository:
- Listing skipped every name containing ".part-", directories too, so the
exports of a user like "john.part-time" were invisible to prune on S3,
SFTP, FTP and SMB and their data was deleted. Only real temporary uploads
("<name>.part-<8 hex>") are skipped now.
- prune refuses to run while a recorded per-user export's manifest is
missing, instead of freeing that export's data.
- forget() and untrash() copy first, switch the catalog, and delete the
originals last, so a crash can no longer leave the catalog pointing at a
missing snapshot or database dump.
- Writes are checked against the expected size, so a short upload is an
error instead of a truncated pack; raw restores check rename() and touch().
- A catalog write refuses to overwrite a generation another process just
wrote, and the catalog lock lasts 300 s, so opening a large repository
inside it no longer lets the lease run out.
Backup runs and scheduling:
- A file that keeps changing is read again at most three times; then the
last read is kept and reported, instead of restarting forever and
blocking cleanup.
- Unreadable files and folders are recorded, logged, shown by occ
backup:run, stored in the snapshot and notified to admins, instead of
being skipped silently.
- After a failed scheduled backup, at most three attempts a day, an hour
apart, instead of a new run and notification every five minutes.
- The job no longer spins on a run whose lease another process holds, and
the weekly cleanup catches up after a Sunday spent backing up.
- Notifications for the per-user export retention events.
491 lines
17 KiB
XML
491 lines
17 KiB
XML
<?xml version="1.0" encoding="UTF-8"?>
|
|
<files psalm-version="6.19.1@e2ca44251c1f1aa2e35452d426895746b47de64e">
|
|
<file src="lib/Backend/ExternalStorageFactory.php">
|
|
<MissingClosureParamType>
|
|
<code><![CDATA[$p]]></code>
|
|
<code><![CDATA[$p]]></code>
|
|
</MissingClosureParamType>
|
|
<MissingClosureReturnType>
|
|
<code><![CDATA[fn ($p) => $p->jsonSerialize()]]></code>
|
|
<code><![CDATA[fn ($p) => $p->jsonSerialize()]]></code>
|
|
</MissingClosureReturnType>
|
|
</file>
|
|
<file src="lib/Backend/IBackend.php">
|
|
<MissingParamType>
|
|
<code><![CDATA[$stream]]></code>
|
|
</MissingParamType>
|
|
</file>
|
|
<file src="lib/Backend/LocalBackend.php">
|
|
<MissingParamType>
|
|
<code><![CDATA[$stream]]></code>
|
|
</MissingParamType>
|
|
<TypeDoesNotContainType>
|
|
<code><![CDATA[$out !== false]]></code>
|
|
</TypeDoesNotContainType>
|
|
</file>
|
|
<file src="lib/Backend/StorageBackend.php">
|
|
<MissingParamType>
|
|
<code><![CDATA[$stream]]></code>
|
|
</MissingParamType>
|
|
</file>
|
|
<file src="lib/BackgroundJob/BackupJob.php">
|
|
<MissingParamType>
|
|
<code><![CDATA[$argument]]></code>
|
|
</MissingParamType>
|
|
</file>
|
|
<file src="lib/BackgroundJob/RestoreJob.php">
|
|
<MissingParamType>
|
|
<code><![CDATA[$argument]]></code>
|
|
</MissingParamType>
|
|
</file>
|
|
<file src="lib/Command/Browse.php">
|
|
<InvalidOperand>
|
|
<code><![CDATA[$b /= 1024]]></code>
|
|
</InvalidOperand>
|
|
</file>
|
|
<file src="lib/Command/KeyConfirm.php">
|
|
<UndefinedInterfaceMethod>
|
|
<code><![CDATA[ask]]></code>
|
|
<code><![CDATA[ask]]></code>
|
|
</UndefinedInterfaceMethod>
|
|
</file>
|
|
<file src="lib/Command/KeyImport.php">
|
|
<UndefinedInterfaceMethod>
|
|
<code><![CDATA[ask]]></code>
|
|
</UndefinedInterfaceMethod>
|
|
</file>
|
|
<file src="lib/Command/KeyInit.php">
|
|
<UndefinedInterfaceMethod>
|
|
<code><![CDATA[ask]]></code>
|
|
<code><![CDATA[ask]]></code>
|
|
</UndefinedInterfaceMethod>
|
|
</file>
|
|
<file src="lib/Command/KeySlots.php">
|
|
<UndefinedInterfaceMethod>
|
|
<code><![CDATA[ask]]></code>
|
|
<code><![CDATA[ask]]></code>
|
|
</UndefinedInterfaceMethod>
|
|
</file>
|
|
<file src="lib/Command/Prune.php">
|
|
<PossiblyFalseOperand>
|
|
<code><![CDATA[json_encode($this->prune->policy()->toArray())]]></code>
|
|
</PossiblyFalseOperand>
|
|
</file>
|
|
<file src="lib/Command/RunBackup.php">
|
|
<PossiblyNullArgument>
|
|
<code><![CDATA[$run->getSnapshotId()]]></code>
|
|
</PossiblyNullArgument>
|
|
</file>
|
|
<file src="lib/Command/Status.php">
|
|
<RiskyTruthyFalsyComparison>
|
|
<code><![CDATA[$c]]></code>
|
|
<code><![CDATA[$r->getFinishedAt()]]></code>
|
|
</RiskyTruthyFalsyComparison>
|
|
</file>
|
|
<file src="lib/Command/TargetAdd.php">
|
|
<PossiblyNullArgument>
|
|
<code><![CDATA[$r['target']->getRepositoryId()]]></code>
|
|
</PossiblyNullArgument>
|
|
<PossiblyUndefinedArrayOffset>
|
|
<code><![CDATA[$v]]></code>
|
|
</PossiblyUndefinedArrayOffset>
|
|
</file>
|
|
<file src="lib/Command/TargetBackends.php">
|
|
<UndefinedClass>
|
|
<code><![CDATA[Base]]></code>
|
|
</UndefinedClass>
|
|
</file>
|
|
<file src="lib/Command/TargetLimit.php">
|
|
<InvalidOperand>
|
|
<code><![CDATA[(float)$m[1] * $factor]]></code>
|
|
</InvalidOperand>
|
|
</file>
|
|
<file src="lib/Command/TargetList.php">
|
|
<UndefinedClass>
|
|
<code><![CDATA[Base]]></code>
|
|
</UndefinedClass>
|
|
</file>
|
|
<file src="lib/Command/TargetTrustCurrent.php">
|
|
<UndefinedInterfaceMethod>
|
|
<code><![CDATA[ask]]></code>
|
|
</UndefinedInterfaceMethod>
|
|
</file>
|
|
<file src="lib/Command/Trash.php">
|
|
<RedundantCastGivenDocblockType>
|
|
<code><![CDATA[(string)($info['time'] ?? '')]]></code>
|
|
</RedundantCastGivenDocblockType>
|
|
</file>
|
|
<file src="lib/Controller/AdminApiController.php">
|
|
<InvalidOperand>
|
|
<code><![CDATA[$maxGb * 1073741824]]></code>
|
|
<code><![CDATA[$maxGb * 1073741824]]></code>
|
|
</InvalidOperand>
|
|
<PossiblyNullArgument>
|
|
<code><![CDATA[$r->getSnapshotId()]]></code>
|
|
</PossiblyNullArgument>
|
|
</file>
|
|
<file src="lib/Crypto/StreamCipher.php">
|
|
<MissingParamType>
|
|
<code><![CDATA[$in]]></code>
|
|
<code><![CDATA[$out]]></code>
|
|
</MissingParamType>
|
|
<PossiblyFalseArgument>
|
|
<code><![CDATA[$in]]></code>
|
|
<code><![CDATA[$in]]></code>
|
|
<code><![CDATA[$in]]></code>
|
|
<code><![CDATA[$in]]></code>
|
|
<code><![CDATA[$in]]></code>
|
|
<code><![CDATA[$in]]></code>
|
|
<code><![CDATA[$out]]></code>
|
|
<code><![CDATA[$out]]></code>
|
|
<code><![CDATA[$out]]></code>
|
|
<code><![CDATA[$out]]></code>
|
|
<code><![CDATA[$out]]></code>
|
|
<code><![CDATA[$out]]></code>
|
|
</PossiblyFalseArgument>
|
|
<PossiblyInvalidArrayAccess>
|
|
<code><![CDATA[unpack('N', $len)[1]]]></code>
|
|
</PossiblyInvalidArrayAccess>
|
|
</file>
|
|
<file src="lib/Db/AppConfigCatalogAnchor.php">
|
|
<PossiblyFalseArgument>
|
|
<code><![CDATA[json_encode(['gen' => $gen, 'hash' => $hash])]]></code>
|
|
</PossiblyFalseArgument>
|
|
</file>
|
|
<file src="lib/Db/DbDumper.php">
|
|
<InvalidArrayOffset>
|
|
<code><![CDATA[$info['sha256']]]></code>
|
|
<code><![CDATA[$manifest['sequences']]]></code>
|
|
</InvalidArrayOffset>
|
|
<MissingClosureReturnType>
|
|
<code><![CDATA[fn ($c) => $end[array_search($c, $columns, true)]]]></code>
|
|
<code><![CDATA[fn ($c) => $q($c)]]></code>
|
|
<code><![CDATA[fn (string $c) => $this->db->quoteIdentifier($c)]]></code>
|
|
<code><![CDATA[fn (string $c) => $this->db->quoteIdentifier($c)]]></code>
|
|
</MissingClosureReturnType>
|
|
<PossiblyFalseArgument>
|
|
<code><![CDATA[$value]]></code>
|
|
</PossiblyFalseArgument>
|
|
<PossiblyNullArgument>
|
|
<code><![CDATA[$columns]]></code>
|
|
</PossiblyNullArgument>
|
|
<UndefinedClass>
|
|
<code><![CDATA[$this->db]]></code>
|
|
<code><![CDATA[$this->db]]></code>
|
|
<code><![CDATA[$this->db]]></code>
|
|
<code><![CDATA[$this->db]]></code>
|
|
<code><![CDATA[$this->db]]></code>
|
|
<code><![CDATA[$this->db]]></code>
|
|
<code><![CDATA[$this->db]]></code>
|
|
<code><![CDATA[$this->db]]></code>
|
|
<code><![CDATA[$this->db]]></code>
|
|
<code><![CDATA[$this->db]]></code>
|
|
<code><![CDATA[$this->db]]></code>
|
|
<code><![CDATA[$this->db]]></code>
|
|
<code><![CDATA[$this->db]]></code>
|
|
<code><![CDATA[$this->db]]></code>
|
|
<code><![CDATA[$this->db]]></code>
|
|
<code><![CDATA[$this->db]]></code>
|
|
<code><![CDATA[$this->db]]></code>
|
|
<code><![CDATA[$this->db]]></code>
|
|
<code><![CDATA[$this->db]]></code>
|
|
<code><![CDATA[TransactionIsolationLevel]]></code>
|
|
<code><![CDATA[\Doctrine\DBAL\ParameterType]]></code>
|
|
<code><![CDATA[\Doctrine\DBAL\ParameterType]]></code>
|
|
<code><![CDATA[\Doctrine\DBAL\ParameterType]]></code>
|
|
<code><![CDATA[\Doctrine\DBAL\Platforms\PostgreSQLPlatform]]></code>
|
|
<code><![CDATA[\Doctrine\DBAL\Platforms\PostgreSQLPlatform]]></code>
|
|
<code><![CDATA[\Doctrine\DBAL\Platforms\PostgreSQLPlatform]]></code>
|
|
<code><![CDATA[\Doctrine\DBAL\Schema\Table]]></code>
|
|
<code><![CDATA[\Doctrine\DBAL\Schema\Table]]></code>
|
|
<code><![CDATA[\Doctrine\DBAL\Schema\Table]]></code>
|
|
<code><![CDATA[private]]></code>
|
|
</UndefinedClass>
|
|
</file>
|
|
<file src="lib/Db/Run.php">
|
|
<PropertyNotSetInConstructor>
|
|
<code><![CDATA[Run]]></code>
|
|
</PropertyNotSetInConstructor>
|
|
</file>
|
|
<file src="lib/Db/Snapshot.php">
|
|
<PropertyNotSetInConstructor>
|
|
<code><![CDATA[Snapshot]]></code>
|
|
</PropertyNotSetInConstructor>
|
|
</file>
|
|
<file src="lib/Db/Target.php">
|
|
<PropertyNotSetInConstructor>
|
|
<code><![CDATA[Target]]></code>
|
|
</PropertyNotSetInConstructor>
|
|
</file>
|
|
<file src="lib/Job/BackupRun.php">
|
|
<ArgumentTypeCoercion>
|
|
<code><![CDATA[$blobs]]></code>
|
|
</ArgumentTypeCoercion>
|
|
<MissingParamType>
|
|
<code><![CDATA[$fh]]></code>
|
|
</MissingParamType>
|
|
<PossiblyUndefinedArrayOffset>
|
|
<code><![CDATA[$mtime]]></code>
|
|
<code><![CDATA[$state['phase']]]></code>
|
|
<code><![CDATA[$state['stats']]]></code>
|
|
</PossiblyUndefinedArrayOffset>
|
|
</file>
|
|
<file src="lib/Job/ParentCursor.php">
|
|
<PossiblyNullReference>
|
|
<code><![CDATA[next]]></code>
|
|
</PossiblyNullReference>
|
|
</file>
|
|
<file src="lib/Job/TreeWalker.php">
|
|
<RedundantCastGivenDocblockType>
|
|
<code><![CDATA[(string)$name]]></code>
|
|
</RedundantCastGivenDocblockType>
|
|
</file>
|
|
<file src="lib/Migration/Version000001Date20261002000000.php">
|
|
<UndefinedDocblockClass>
|
|
<code><![CDATA[$schema->createTable('ngb_targets')]]></code>
|
|
<code><![CDATA[$t]]></code>
|
|
<code><![CDATA[$t]]></code>
|
|
<code><![CDATA[$t]]></code>
|
|
<code><![CDATA[$t]]></code>
|
|
<code><![CDATA[$t]]></code>
|
|
<code><![CDATA[$t]]></code>
|
|
<code><![CDATA[$t]]></code>
|
|
<code><![CDATA[$t]]></code>
|
|
<code><![CDATA[$t]]></code>
|
|
<code><![CDATA[$t]]></code>
|
|
<code><![CDATA[$t]]></code>
|
|
<code><![CDATA[$t]]></code>
|
|
<code><![CDATA[$t]]></code>
|
|
<code><![CDATA[$t]]></code>
|
|
<code><![CDATA[$t]]></code>
|
|
<code><![CDATA[$t]]></code>
|
|
<code><![CDATA[$t]]></code>
|
|
<code><![CDATA[$t]]></code>
|
|
<code><![CDATA[$t]]></code>
|
|
<code><![CDATA[$t]]></code>
|
|
<code><![CDATA[$t]]></code>
|
|
<code><![CDATA[$t]]></code>
|
|
<code><![CDATA[$t]]></code>
|
|
<code><![CDATA[$t]]></code>
|
|
<code><![CDATA[$t]]></code>
|
|
<code><![CDATA[$t]]></code>
|
|
<code><![CDATA[$t]]></code>
|
|
<code><![CDATA[$t]]></code>
|
|
<code><![CDATA[$t]]></code>
|
|
<code><![CDATA[$t]]></code>
|
|
<code><![CDATA[$t]]></code>
|
|
<code><![CDATA[$t]]></code>
|
|
<code><![CDATA[$t]]></code>
|
|
<code><![CDATA[$t]]></code>
|
|
</UndefinedDocblockClass>
|
|
</file>
|
|
<file src="lib/Migration/Version000002Date20261002010000.php">
|
|
<UndefinedDocblockClass>
|
|
<code><![CDATA[$t]]></code>
|
|
<code><![CDATA[$t]]></code>
|
|
<code><![CDATA[$t]]></code>
|
|
<code><![CDATA[$t]]></code>
|
|
<code><![CDATA[$t]]></code>
|
|
<code><![CDATA[$t]]></code>
|
|
</UndefinedDocblockClass>
|
|
</file>
|
|
<file src="lib/Migration/Version000003Date20261002020000.php">
|
|
<UndefinedDocblockClass>
|
|
<code><![CDATA[$schema->getTable('ngb_targets')]]></code>
|
|
<code><![CDATA[$t]]></code>
|
|
<code><![CDATA[$t]]></code>
|
|
</UndefinedDocblockClass>
|
|
</file>
|
|
<file src="lib/Migration/Version000004Date20261002030000.php">
|
|
<UndefinedDocblockClass>
|
|
<code><![CDATA[$t]]></code>
|
|
<code><![CDATA[$t]]></code>
|
|
</UndefinedDocblockClass>
|
|
</file>
|
|
<file src="lib/Migration/Version000005Date20261002040000.php">
|
|
<UndefinedDocblockClass>
|
|
<code><![CDATA[$t]]></code>
|
|
<code><![CDATA[$t]]></code>
|
|
<code><![CDATA[$t]]></code>
|
|
<code><![CDATA[$t]]></code>
|
|
<code><![CDATA[$t]]></code>
|
|
<code><![CDATA[$t]]></code>
|
|
</UndefinedDocblockClass>
|
|
</file>
|
|
<file src="lib/Repository/BlobIndex.php">
|
|
<PossiblyFalseArgument>
|
|
<code><![CDATA[$stream]]></code>
|
|
<code><![CDATA[$stream]]></code>
|
|
</PossiblyFalseArgument>
|
|
</file>
|
|
<file src="lib/Repository/Catalog.php">
|
|
<PossiblyFalseArgument>
|
|
<code><![CDATA[$stream]]></code>
|
|
<code><![CDATA[$stream]]></code>
|
|
</PossiblyFalseArgument>
|
|
</file>
|
|
<file src="lib/Repository/PackWriter.php">
|
|
<InvalidPropertyAssignmentValue>
|
|
<code><![CDATA[$this->buffer]]></code>
|
|
</InvalidPropertyAssignmentValue>
|
|
<PossiblyFalsePropertyAssignmentValue>
|
|
<code><![CDATA[fopen('php://temp/maxmemory:' . ($this->targetSize + 8 * 1048576), 'w+b')]]></code>
|
|
</PossiblyFalsePropertyAssignmentValue>
|
|
<RedundantPropertyInitializationCheck>
|
|
<code><![CDATA[isset($this->buffer)]]></code>
|
|
</RedundantPropertyInitializationCheck>
|
|
</file>
|
|
<file src="lib/Repository/Repository.php">
|
|
<InvalidOperand>
|
|
<code><![CDATA[strlen($data) * 0.95]]></code>
|
|
</InvalidOperand>
|
|
<InvalidReturnStatement>
|
|
<code><![CDATA[['snapshot' => $snapshotId] + $stats]]></code>
|
|
</InvalidReturnStatement>
|
|
<InvalidReturnType>
|
|
<code><![CDATA[array{snapshot:string, files:int, reused:int, read:int, newBlobs:int, dupBlobs:int, uploaded:int}]]></code>
|
|
</InvalidReturnType>
|
|
<MissingParamType>
|
|
<code><![CDATA[$fh]]></code>
|
|
</MissingParamType>
|
|
<PossiblyFalseArgument>
|
|
<code><![CDATA[$encrypted]]></code>
|
|
<code><![CDATA[$encrypted]]></code>
|
|
<code><![CDATA[$encrypted]]></code>
|
|
<code><![CDATA[$encrypted]]></code>
|
|
<code><![CDATA[$fh]]></code>
|
|
<code><![CDATA[$plain]]></code>
|
|
<code><![CDATA[$plain]]></code>
|
|
<code><![CDATA[$plain]]></code>
|
|
<code><![CDATA[$plain]]></code>
|
|
<code><![CDATA[$plain]]></code>
|
|
<code><![CDATA[$plain]]></code>
|
|
<code><![CDATA[$plain]]></code>
|
|
<code><![CDATA[$plain]]></code>
|
|
<code><![CDATA[$plain]]></code>
|
|
<code><![CDATA[$s]]></code>
|
|
<code><![CDATA[$s]]></code>
|
|
<code><![CDATA[$tree]]></code>
|
|
<code><![CDATA[$tree]]></code>
|
|
<code><![CDATA[$tree]]></code>
|
|
<code><![CDATA[$tree]]></code>
|
|
<code><![CDATA[$tree]]></code>
|
|
<code><![CDATA[$tree]]></code>
|
|
<code><![CDATA[$tree]]></code>
|
|
<code><![CDATA[$tree]]></code>
|
|
<code><![CDATA[$tree]]></code>
|
|
<code><![CDATA[$tree]]></code>
|
|
</PossiblyFalseArgument>
|
|
<PossiblyUndefinedArrayOffset>
|
|
<code><![CDATA[$stats['files']]]></code>
|
|
<code><![CDATA[$stats['reused']]]></code>
|
|
</PossiblyUndefinedArrayOffset>
|
|
<PropertyNotSetInConstructor>
|
|
<code><![CDATA[$catalog]]></code>
|
|
</PropertyNotSetInConstructor>
|
|
</file>
|
|
<file src="lib/Service/AlertService.php">
|
|
<InvalidOperand>
|
|
<code><![CDATA[$bytes / $limit * 100]]></code>
|
|
<code><![CDATA[0.8 * $limit]]></code>
|
|
</InvalidOperand>
|
|
<PossiblyFalseOperand>
|
|
<code><![CDATA[json_encode(array_diff_key($params, ['actor' => 1]), JSON_UNESCAPED_SLASHES)]]></code>
|
|
</PossiblyFalseOperand>
|
|
</file>
|
|
<file src="lib/Service/BackupService.php">
|
|
<InvalidOperand>
|
|
<code><![CDATA[$deadline - microtime(true) + 120]]></code>
|
|
</InvalidOperand>
|
|
<UndefinedClass>
|
|
<code><![CDATA[\OC]]></code>
|
|
<code><![CDATA[\OC]]></code>
|
|
</UndefinedClass>
|
|
<UndefinedInterfaceMethod>
|
|
<code><![CDATA[getInner]]></code>
|
|
</UndefinedInterfaceMethod>
|
|
</file>
|
|
<file src="lib/Service/KeyService.php">
|
|
<ArgumentTypeCoercion>
|
|
<code><![CDATA[array_diff(range(1, self::MAX_SLOTS), $used)]]></code>
|
|
</ArgumentTypeCoercion>
|
|
<LessSpecificReturnStatement>
|
|
<code><![CDATA[array_map(fn ($s) => ['slot' => $s['slot'], 'label' => $s['label'], 'created' => $s['created']], $this->wrappedKey()['slots'])]]></code>
|
|
</LessSpecificReturnStatement>
|
|
<MissingClosureParamType>
|
|
<code><![CDATA[$s]]></code>
|
|
<code><![CDATA[$s]]></code>
|
|
</MissingClosureParamType>
|
|
<MissingClosureReturnType>
|
|
<code><![CDATA[static fn (string $c) => strtoupper(preg_replace('/[^A-Za-z0-9]/', '', $c) ?? '')]]></code>
|
|
</MissingClosureReturnType>
|
|
<MoreSpecificReturnType>
|
|
<code><![CDATA[list<array{slot:int, label:string, created:int}>]]></code>
|
|
</MoreSpecificReturnType>
|
|
<PossiblyFalseArgument>
|
|
<code><![CDATA[base64_decode($this->crypto->decrypt($enc), true)]]></code>
|
|
</PossiblyFalseArgument>
|
|
</file>
|
|
<file src="lib/Service/PruneService.php">
|
|
<LessSpecificReturnStatement>
|
|
<code><![CDATA[['kept' => $keep, 'forgotten' => $forget, 'purged' => $purged, 'prune' => $prune]]]></code>
|
|
</LessSpecificReturnStatement>
|
|
<MissingClosureReturnType>
|
|
<code><![CDATA[fn () => $fn()]]></code>
|
|
</MissingClosureReturnType>
|
|
<MoreSpecificReturnType>
|
|
<code><![CDATA[array{kept: array<string, list<string>>, forgotten: list<string>, purged: list<string>, prune: array}]]></code>
|
|
</MoreSpecificReturnType>
|
|
</file>
|
|
<file src="lib/Service/RestoreFullService.php">
|
|
<EmptyArrayAccess>
|
|
<code><![CDATA[$backupConfig[$key]]]></code>
|
|
</EmptyArrayAccess>
|
|
<UndefinedInterfaceMethod>
|
|
<code><![CDATA[getInner]]></code>
|
|
</UndefinedInterfaceMethod>
|
|
<UnresolvableInclude>
|
|
<code><![CDATA[include $path]]></code>
|
|
</UnresolvableInclude>
|
|
</file>
|
|
<file src="lib/Service/RestoreService.php">
|
|
<LessSpecificReturnStatement>
|
|
<code><![CDATA[array_values($children)]]></code>
|
|
</LessSpecificReturnStatement>
|
|
<MissingDependency>
|
|
<code><![CDATA[$this->root]]></code>
|
|
<code><![CDATA[private]]></code>
|
|
</MissingDependency>
|
|
<MoreSpecificReturnType>
|
|
<code><![CDATA[list<array{name:string, type:string, size:int, mtime:int|null, files:int}>]]></code>
|
|
</MoreSpecificReturnType>
|
|
<PossiblyFalseArgument>
|
|
<code><![CDATA[$in]]></code>
|
|
<code><![CDATA[$out]]></code>
|
|
<code><![CDATA[$out]]></code>
|
|
</PossiblyFalseArgument>
|
|
<PossiblyNullArrayOffset>
|
|
<code><![CDATA[$children]]></code>
|
|
<code><![CDATA[$children]]></code>
|
|
</PossiblyNullArrayOffset>
|
|
<RedundantCastGivenDocblockType>
|
|
<code><![CDATA[(string)$relPath]]></code>
|
|
<code><![CDATA[(string)$relPath]]></code>
|
|
</RedundantCastGivenDocblockType>
|
|
</file>
|
|
<file src="lib/Service/TargetService.php">
|
|
<InvalidReturnStatement>
|
|
<code><![CDATA[$this->factory()->describeBackends()]]></code>
|
|
</InvalidReturnStatement>
|
|
<InvalidReturnType>
|
|
<code><![CDATA[list<array{id:string, name:string, auth:list<string>, parameters:array}>]]></code>
|
|
</InvalidReturnType>
|
|
<UndefinedDocblockClass>
|
|
<code><![CDATA[Server::get(\OCA\Files_External\Service\BackendService::class)]]></code>
|
|
</UndefinedDocblockClass>
|
|
<UnresolvableInclude>
|
|
<code><![CDATA[require_once $path . '/composer/autoload.php']]></code>
|
|
</UnresolvableInclude>
|
|
</file>
|
|
</files>
|