From 7d73958a2acb34205eda85dca9d0e0d65729b84d Mon Sep 17 00:00:00 2001 From: Jussi Kukkonen Date: Fri, 9 Oct 2020 20:19:39 +0300 Subject: [PATCH] Add MissingLocalRepositoryError This allows clients to separate a) missing local repository and b) error while loading local repository This is fully backwards-compliant: MissingLocalRepositoryError derives from RepositoryError and every situation that now results in MissingLocalRepositoryError used to result in a RepositoryError. Fixes #1063 Signed-off-by: Jussi Kukkonen --- tests/test_updater.py | 3 +++ tuf/client/updater.py | 6 ++++++ tuf/exceptions.py | 4 ++++ 3 files changed, 13 insertions(+) diff --git a/tests/test_updater.py b/tests/test_updater.py index 8c76a96c..c6ed8345 100644 --- a/tests/test_updater.py +++ b/tests/test_updater.py @@ -224,6 +224,9 @@ def test_1__init__exceptions(self): # directory. tuf.settings.repositories_directory = self.client_directory + # Test: repository does not exist + self.assertRaises(tuf.exceptions.MissingLocalRepositoryError, updater.Updater, + 'test_non_existing_repository', self.repository_mirrors) # Test: empty client repository (i.e., no metadata directory). metadata_backup = self.client_metadata + '.backup' diff --git a/tuf/client/updater.py b/tuf/client/updater.py index bbc266f9..c16d1851 100755 --- a/tuf/client/updater.py +++ b/tuf/client/updater.py @@ -733,6 +733,12 @@ def __init__(self, repository_name, repository_mirrors): # Set the path for the current set of metadata files. repositories_directory = tuf.settings.repositories_directory repository_directory = os.path.join(repositories_directory, self.repository_name) + + # raise MissingLocalRepository if the repo does not exist at all. + if not os.path.exists(repository_directory): + raise tuf.exceptions.MissingLocalRepositoryError('Local repository ' + + repr(repository_directory) + ' does not exist.') + current_path = os.path.join(repository_directory, 'metadata', 'current') # Ensure the current path is valid/exists before saving it. diff --git a/tuf/exceptions.py b/tuf/exceptions.py index bd75b312..177e7a29 100755 --- a/tuf/exceptions.py +++ b/tuf/exceptions.py @@ -115,6 +115,10 @@ class RepositoryError(Error): """Indicate an error with a repository's state, such as a missing file.""" +class MissingLocalRepositoryError(RepositoryError): + """Raised when a local repository could not be found.""" + + class InsufficientKeysError(Error): """Indicate that metadata role lacks a threshold of pubic or private keys."""