Skip to content

Commit 08284af

Browse files
authored
VCS: pass a version object to git provider (#12101)
Closes #11955
1 parent 39600dc commit 08284af

File tree

7 files changed

+139
-127
lines changed

7 files changed

+139
-127
lines changed

readthedocs/doc_builder/director.py

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -89,12 +89,8 @@ def setup_vcs(self):
8989
# Create the VCS repository where all the commands are going to be
9090
# executed for a particular VCS type
9191
self.vcs_repository = self.data.project.vcs_repo(
92-
version=self.data.version.slug,
92+
version=self.data.version,
9393
environment=self.vcs_environment,
94-
verbose_name=self.data.version.verbose_name,
95-
version_type=self.data.version.type,
96-
version_identifier=self.data.version.identifier,
97-
version_machine=self.data.version.machine,
9894
)
9995

10096
# We can't do too much on ``pre_checkout`` because we haven't

readthedocs/projects/models.py

Lines changed: 3 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -964,39 +964,22 @@ def has_good_build(self):
964964
return self._good_build
965965
return self.builds(manager=INTERNAL).filter(success=True).exists()
966966

967-
def vcs_repo(
968-
self,
969-
environment,
970-
version=LATEST,
971-
verbose_name=None,
972-
version_type=None,
973-
version_identifier=None,
974-
version_machine=None,
975-
):
967+
def vcs_repo(self, environment, version):
976968
"""
977969
Return a Backend object for this project able to handle VCS commands.
978970
979971
:param environment: environment to run the commands
980972
:type environment: doc_builder.environments.BuildEnvironment
981-
:param version: version slug for the backend (``LATEST`` by default)
982-
:type version: str
973+
:param version: Version for the backend.
983974
"""
984-
# TODO: this seems to be the only method that receives a
985-
# ``version.slug`` instead of a ``Version`` instance (I prefer an
986-
# instance here)
987-
988975
backend = self.vcs_class()
989976
if not backend:
990977
repo = None
991978
else:
992979
repo = backend(
993980
self,
994-
version,
981+
version=version,
995982
environment=environment,
996-
verbose_name=verbose_name,
997-
version_type=version_type,
998-
version_identifier=version_identifier,
999-
version_machine=version_machine,
1000983
)
1001984
return repo
1002985

readthedocs/projects/tasks/builds.py

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -220,10 +220,8 @@ def execute(self):
220220
)
221221

222222
vcs_repository = self.data.project.vcs_repo(
223-
version=self.data.version.slug,
223+
version=self.data.version,
224224
environment=environment,
225-
verbose_name=self.data.version.verbose_name,
226-
version_type=self.data.version.type,
227225
)
228226
log.info("Syncing repository via remote listing.")
229227
self.sync_versions(vcs_repository)

readthedocs/rtd_tests/tests/test_backend.py

Lines changed: 80 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,16 @@
11
import os
22
import textwrap
3+
from readthedocs.core.utils.filesystem import safe_rmtree
34
from os.path import exists
45
from unittest import mock
56
from unittest.mock import Mock, patch
67

78
import django_dynamic_fixture as fixture
9+
from django_dynamic_fixture import get
810
from django.contrib.auth.models import User
911
from django.test import TestCase
1012

11-
from readthedocs.builds.constants import BRANCH, EXTERNAL, TAG
13+
from readthedocs.builds.constants import BRANCH, EXTERNAL, STABLE, TAG
1214
from readthedocs.builds.models import Version
1315
from readthedocs.config import ALL
1416
from readthedocs.doc_builder.environments import LocalBuildEnvironment
@@ -46,8 +48,8 @@ def setUp(self):
4648
self.build_environment = LocalBuildEnvironment(api_client=mock.MagicMock())
4749

4850
def tearDown(self):
49-
repo = self.project.vcs_repo(environment=self.build_environment)
50-
repo.make_clean_working_dir()
51+
# Remove all the files created by the test for this project.
52+
safe_rmtree(self.project.doc_path)
5153
super().tearDown()
5254

5355
def test_git_lsremote(self):
@@ -72,7 +74,8 @@ def test_git_lsremote(self):
7274
create_git_tag(repo_path, "v02", annotated=True)
7375
create_git_tag(repo_path, "release-ünîø∂é")
7476

75-
repo = self.project.vcs_repo(environment=self.build_environment)
77+
version = self.project.versions.first()
78+
repo = self.project.vcs_repo(environment=self.build_environment, version=version)
7679
# create the working dir if it not exists. It's required to ``cwd`` to
7780
# execute the command
7881
repo.check_working_dir()
@@ -95,7 +98,8 @@ def test_git_lsremote_tags_only(self):
9598
create_git_tag(repo_path, "v02", annotated=True)
9699
create_git_tag(repo_path, "release-ünîø∂é")
97100

98-
repo = self.project.vcs_repo(environment=self.build_environment)
101+
version = self.project.versions.first()
102+
repo = self.project.vcs_repo(environment=self.build_environment, version=version)
99103
# create the working dir if it not exists. It's required to ``cwd`` to
100104
# execute the command
101105
repo.check_working_dir()
@@ -127,7 +131,8 @@ def test_git_lsremote_branches_only(self):
127131
for branch in branches:
128132
create_git_branch(repo_path, branch)
129133

130-
repo = self.project.vcs_repo(environment=self.build_environment)
134+
version = self.project.versions.first()
135+
repo = self.project.vcs_repo(environment=self.build_environment, version=version)
131136
# create the working dir if it not exists. It's required to ``cwd`` to
132137
# execute the command
133138
repo.check_working_dir()
@@ -142,7 +147,8 @@ def test_git_lsremote_branches_only(self):
142147
)
143148

144149
def test_git_update_and_checkout(self):
145-
repo = self.project.vcs_repo(environment=self.build_environment)
150+
version = self.project.versions.first()
151+
repo = self.project.vcs_repo(environment=self.build_environment, version=version)
146152
code, _, _ = repo.update()
147153
self.assertEqual(code, 0)
148154

@@ -153,11 +159,12 @@ def test_git_update_and_checkout(self):
153159
self.assertTrue(exists(repo.working_dir))
154160

155161
def test_git_checkout_invalid_revision(self):
156-
repo = self.project.vcs_repo(environment=self.build_environment)
162+
version = self.project.versions.first()
163+
repo = self.project.vcs_repo(environment=self.build_environment, version=version)
157164
repo.update()
158-
version = "invalid-revision"
165+
branch = "invalid-revision"
159166
with self.assertRaises(RepositoryError) as e:
160-
repo.checkout(version)
167+
repo.checkout(branch)
161168
self.assertEqual(
162169
e.exception.message_id,
163170
RepositoryError.FAILED_TO_CHECKOUT,
@@ -167,10 +174,17 @@ def test_check_for_submodules(self):
167174
"""
168175
Test that we can get a branch called 'submodule' containing a valid submodule.
169176
"""
177+
version = get(
178+
Version,
179+
project=self.project,
180+
type=BRANCH,
181+
identifier="submodule",
182+
verbose_name="submodule",
183+
)
184+
170185
repo = self.project.vcs_repo(
171186
environment=self.build_environment,
172-
version_type=BRANCH,
173-
version_identifier="submodule",
187+
version=version,
174188
)
175189

176190
repo.update()
@@ -182,10 +196,16 @@ def test_check_for_submodules(self):
182196

183197
def test_check_submodule_urls(self):
184198
"""Test that a valid submodule is found in the 'submodule' branch."""
199+
version = get(
200+
Version,
201+
project=self.project,
202+
type=BRANCH,
203+
identifier="submodule",
204+
verbose_name="submodule",
205+
)
185206
repo = self.project.vcs_repo(
186207
environment=self.build_environment,
187-
version_type=BRANCH,
188-
version_identifier="submodule",
208+
version=version,
189209
)
190210
repo.update()
191211
repo.checkout("submodule")
@@ -204,20 +224,24 @@ def test_git_update_with_external_version(self, fetch):
204224
verbose_name="1234", # pr number
205225
)
206226
repo = self.project.vcs_repo(
207-
verbose_name=version.verbose_name,
208-
version_type=version.type,
209-
version_identifier=version.identifier,
227+
version=version,
210228
environment=self.build_environment,
211229
)
212230
repo.update()
213231
fetch.assert_called_once()
214232

215233
def test_submodule_without_url_is_included(self):
216234
"""Test that an invalid submodule isn't listed."""
235+
version = get(
236+
Version,
237+
project=self.project,
238+
type=BRANCH,
239+
identifier="submodule",
240+
verbose_name="submodule",
241+
)
217242
repo = self.project.vcs_repo(
218243
environment=self.build_environment,
219-
version_type=BRANCH,
220-
version_identifier="submodule",
244+
version=version,
221245
)
222246
repo.update()
223247
repo.checkout("submodule")
@@ -237,10 +261,16 @@ def test_submodule_without_url_is_included(self):
237261
self.assertEqual(submodules, ["foobar", "not-valid-path"])
238262

239263
def test_parse_submodules(self):
264+
version = get(
265+
Version,
266+
project=self.project,
267+
type=BRANCH,
268+
identifier="submodule",
269+
verbose_name="submodule",
270+
)
240271
repo = self.project.vcs_repo(
241272
environment=self.build_environment,
242-
version_type=BRANCH,
243-
version_identifier="submodule",
273+
version=version,
244274
)
245275
repo.update()
246276
repo.checkout("submodule")
@@ -290,10 +320,16 @@ def test_parse_submodules(self):
290320

291321
def test_skip_submodule_checkout(self):
292322
"""Test that a submodule is listed as available."""
323+
version = get(
324+
Version,
325+
project=self.project,
326+
type=BRANCH,
327+
identifier="submodule",
328+
verbose_name="submodule",
329+
)
293330
repo = self.project.vcs_repo(
294331
environment=self.build_environment,
295-
version_type=BRANCH,
296-
version_identifier="submodule",
332+
version=version,
297333
)
298334
repo.update()
299335
repo.checkout("submodule")
@@ -303,8 +339,7 @@ def test_git_fetch_with_external_version(self):
303339
"""Test that fetching an external build (PR branch) correctly executes."""
304340
version = fixture.get(Version, project=self.project, type=EXTERNAL, active=True)
305341
repo = self.project.vcs_repo(
306-
verbose_name=version.verbose_name,
307-
version_type=version.type,
342+
version=version,
308343
environment=self.build_environment,
309344
)
310345
repo.update()
@@ -323,9 +358,17 @@ def test_update_without_branch_name(self):
323358
repo_path = self.project.repo
324359
create_git_branch(repo_path, "develop")
325360

361+
version = get(
362+
Version,
363+
project=self.project,
364+
type=BRANCH,
365+
identifier="develop",
366+
verbose_name="develop",
367+
)
368+
326369
repo = self.project.vcs_repo(
327370
environment=self.build_environment,
328-
version_type=BRANCH,
371+
version=version,
329372
)
330373
repo.update()
331374

@@ -345,11 +388,19 @@ def test_special_tag_stable(self):
345388
repo_path = self.project.repo
346389
latest_actual_commit_hash = get_git_latest_commit_hash(repo_path, "master")
347390

391+
version = get(
392+
Version,
393+
project=self.project,
394+
type=TAG,
395+
identifier=latest_actual_commit_hash,
396+
verbose_name="stable",
397+
slug=STABLE,
398+
machine=True,
399+
)
400+
348401
repo = self.project.vcs_repo(
349402
environment=self.build_environment,
350-
version_type=TAG,
351-
version_machine=True,
352-
version_identifier=latest_actual_commit_hash,
403+
version=version,
353404
)
354405
repo.update()
355406

readthedocs/rtd_tests/utils.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -197,7 +197,7 @@ def get_git_latest_commit_hash(directory, branch):
197197
chdir(directory)
198198

199199
command = ["git", "rev-parse", branch]
200-
return check_output(command, env=env).strip()
200+
return check_output(command, env=env).decode().strip()
201201

202202

203203
@restoring_chdir

0 commit comments

Comments
 (0)