Skip to content

Commit 9a58ef4

Browse files
authored
Merge pull request #5035 from stsewd/raise-exception-failed-checkout
Raise exception in failed checkout
2 parents 0a2fb47 + 1c19302 commit 9a58ef4

File tree

5 files changed

+43
-3
lines changed

5 files changed

+43
-3
lines changed

readthedocs/projects/exceptions.py

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,10 @@ class RepositoryError(BuildEnvironmentError):
4747
'You can not have two versions with the name latest or stable.'
4848
)
4949

50+
FAILED_TO_CHECKOUT = _(
51+
'Failed to checkout revision: {}'
52+
)
53+
5054
def get_default_message(self):
5155
if settings.ALLOW_PRIVATE_REPOS:
5256
return self.PRIVATE_ALLOWED

readthedocs/rtd_tests/tests/test_backend.py

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -118,6 +118,17 @@ def test_git_update_and_checkout(self):
118118
self.assertEqual(code, 0)
119119
self.assertTrue(exists(repo.working_dir))
120120

121+
def test_git_checkout_invalid_revision(self):
122+
repo = self.project.vcs_repo()
123+
repo.update()
124+
version = 'invalid-revision'
125+
with self.assertRaises(RepositoryError) as e:
126+
repo.checkout(version)
127+
self.assertEqual(
128+
str(e.exception),
129+
RepositoryError.FAILED_TO_CHECKOUT.format(version)
130+
)
131+
121132
def test_git_tags(self):
122133
repo_path = self.project.repo
123134
create_git_tag(repo_path, 'v01')
@@ -267,6 +278,17 @@ def test_update_and_checkout(self):
267278
self.assertEqual(code, 0)
268279
self.assertTrue(exists(repo.working_dir))
269280

281+
def test_checkout_invalid_revision(self):
282+
repo = self.project.vcs_repo()
283+
repo.update()
284+
version = 'invalid-revision'
285+
with self.assertRaises(RepositoryError) as e:
286+
repo.checkout(version)
287+
self.assertEqual(
288+
str(e.exception),
289+
RepositoryError.FAILED_TO_CHECKOUT.format(version)
290+
)
291+
270292
def test_parse_tags(self):
271293
data = """\
272294
tip 13575:8e94a1b4e9a4

readthedocs/vcs_support/backends/bzr.py

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -93,4 +93,9 @@ def checkout(self, identifier=None):
9393
super(Backend, self).checkout()
9494
if not identifier:
9595
return self.up()
96-
return self.run('bzr', 'switch', identifier)
96+
exit_code, stdout, stderr = self.run('bzr', 'switch', identifier)
97+
if exit_code != 0:
98+
raise RepositoryError(
99+
RepositoryError.FAILED_TO_CHECKOUT.format(identifier)
100+
)
101+
return exit_code, stdout, stderr

readthedocs/vcs_support/backends/git.py

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -169,7 +169,9 @@ def checkout_revision(self, revision=None):
169169

170170
code, out, err = self.run('git', 'checkout', '--force', revision)
171171
if code != 0:
172-
log.warning("Failed to checkout revision '%s': %s", revision, code)
172+
raise RepositoryError(
173+
RepositoryError.FAILED_TO_CHECKOUT.format(revision)
174+
)
173175
return [code, out, err]
174176

175177
def clone(self):

readthedocs/vcs_support/backends/hg.py

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -110,4 +110,11 @@ def checkout(self, identifier=None):
110110
super(Backend, self).checkout()
111111
if not identifier:
112112
identifier = 'tip'
113-
return self.run('hg', 'update', '--clean', identifier)
113+
exit_code, stdout, stderr = self.run(
114+
'hg', 'update', '--clean', identifier
115+
)
116+
if exit_code != 0:
117+
raise RepositoryError(
118+
RepositoryError.FAILED_TO_CHECKOUT.format(identifier)
119+
)
120+
return exit_code, stdout, stderr

0 commit comments

Comments
 (0)