Browse Source

show error when trying to scan non existing path

Signed-off-by: Robin Appelman <robin@icewind.nl>
Robin Appelman 7 years ago
parent
commit
ce2dba0796
2 changed files with 16 additions and 7 deletions
  1. 12 7
      apps/files/lib/Command/Scan.php
  2. 4 0
      lib/private/Files/Utils/Scanner.php

+ 12 - 7
apps/files/lib/Command/Scan.php

@@ -32,6 +32,7 @@ use Doctrine\DBAL\Connection;
 use OC\Core\Command\Base;
 use OC\Core\Command\InterruptedException;
 use OC\ForbiddenException;
+use OCP\Files\NotFoundException;
 use OCP\Files\StorageNotAvailableException;
 use OCP\IDBConnection;
 use OCP\IUserManager;
@@ -131,7 +132,7 @@ class Scan extends Base {
 			$scanner->listen('\OC\Files\Utils\Scanner', 'StorageNotAvailable', function (StorageNotAvailableException $e) use ($output) {
 				$output->writeln("Error while scanning, storage not available (" . $e->getMessage() . ")");
 			});
-		# count only
+			# count only
 		} else {
 			$scanner->listen('\OC\Files\Utils\Scanner', 'scanFile', function () use ($output) {
 				$this->filesCounter += 1;
@@ -146,17 +147,17 @@ class Scan extends Base {
 				}
 			});
 		}
-		$scanner->listen('\OC\Files\Utils\Scanner', 'scanFile', function($path) use ($output) {
+		$scanner->listen('\OC\Files\Utils\Scanner', 'scanFile', function ($path) use ($output) {
 			$this->checkScanWarning($path, $output);
 		});
-		$scanner->listen('\OC\Files\Utils\Scanner', 'scanFolder', function($path) use ($output) {
+		$scanner->listen('\OC\Files\Utils\Scanner', 'scanFolder', function ($path) use ($output) {
 			$this->checkScanWarning($path, $output);
 		});
 
 		try {
 			if ($backgroundScan) {
 				$scanner->backgroundScan($path);
-			}else {
+			} else {
 				$scanner->scan($path);
 			}
 		} catch (ForbiddenException $e) {
@@ -165,6 +166,8 @@ class Scan extends Base {
 		} catch (InterruptedException $e) {
 			# exit the function if ctrl-c has been pressed
 			$output->writeln('Interrupted by user');
+		} catch (NotFoundException $e) {
+			$output->writeln('<error>Path not found: ' . $e->getMessage() . '</error>');
 		} catch (\Exception $e) {
 			$output->writeln('<error>Exception during scan: ' . $e->getMessage() . '</error>');
 			$output->writeln('<error>' . $e->getTraceAsString() . '</error>');
@@ -194,7 +197,7 @@ class Scan extends Base {
 		$verbose = $input->getOption('verbose');
 		$quiet = $input->getOption('quiet');
 		# restrict the verbosity level to VERBOSITY_VERBOSE
-		if ($output->getVerbosity()>OutputInterface::VERBOSITY_VERBOSE) {
+		if ($output->getVerbosity() > OutputInterface::VERBOSITY_VERBOSE) {
 			$output->setVerbosity(OutputInterface::VERBOSITY_VERBOSE);
 		}
 		if ($quiet) {
@@ -223,7 +226,9 @@ class Scan extends Base {
 			$user_count += 1;
 			if ($this->userManager->userExists($user)) {
 				# add an extra line when verbose is set to optical separate users
-				if ($verbose) {$output->writeln(""); }
+				if ($verbose) {
+					$output->writeln("");
+				}
 				$output->writeln("Starting scan for user $user_count out of $users_total ($user)");
 				# full: printout data if $verbose was set
 				$this->scanFiles($user, $path, $verbose, $output, $input->getOption('unscanned'));
@@ -327,7 +332,7 @@ class Scan extends Base {
 	 * @return \OCP\IDBConnection
 	 */
 	protected function reconnectToDatabase(OutputInterface $output) {
-		/** @var Connection | IDBConnection $connection*/
+		/** @var Connection | IDBConnection $connection */
 		$connection = \OC::$server->getDatabaseConnection();
 		try {
 			$connection->close();

+ 4 - 0
lib/private/Files/Utils/Scanner.php

@@ -32,6 +32,7 @@ use OC\ForbiddenException;
 use OC\Hooks\PublicEmitter;
 use OC\Lock\DBLockingProvider;
 use OCA\Files_Sharing\SharedStorage;
+use OCP\Files\NotFoundException;
 use OCP\Files\Storage\IStorage;
 use OCP\Files\StorageNotAvailableException;
 use OCP\ILogger;
@@ -216,6 +217,9 @@ class Scanner extends PublicEmitter {
 			try {
 				$propagator = $storage->getPropagator();
 				$propagator->beginBatch();
+				if (!$storage->file_exists($relativePath)) {
+					throw new NotFoundException($dir);
+				}
 				$scanner->scan($relativePath, \OC\Files\Cache\Scanner::SCAN_RECURSIVE, \OC\Files\Cache\Scanner::REUSE_ETAG | \OC\Files\Cache\Scanner::REUSE_SIZE);
 				$cache = $storage->getCache();
 				if ($cache instanceof Cache) {