52
52
fabric -> rtd-builds/fabric/en/latest/ # single version
53
53
"""
54
54
55
- from __future__ import absolute_import , unicode_literals
56
- from builtins import object
55
+ from __future__ import (
56
+ absolute_import ,
57
+ division ,
58
+ print_function ,
59
+ unicode_literals ,
60
+ )
61
+
62
+ import logging
57
63
import os
58
64
import shutil
59
- import logging
60
65
from collections import OrderedDict
61
66
67
+ from builtins import object
62
68
from django .conf import settings
63
69
64
70
from readthedocs .builds .models import Version
65
- from readthedocs .core .utils .extend import SettingsOverrideObject
66
71
from readthedocs .core .utils import safe_makedirs , safe_unlink
72
+ from readthedocs .core .utils .extend import SettingsOverrideObject
73
+ from readthedocs .doc_builder .environments import LocalEnvironment
67
74
from readthedocs .projects import constants
68
75
from readthedocs .projects .models import Domain
69
- from readthedocs .projects .utils import run
70
76
71
77
log = logging .getLogger (__name__ )
72
78
@@ -83,6 +89,7 @@ def __init__(self, project):
83
89
self .subproject_root = os .path .join (
84
90
self .project_root , 'projects'
85
91
)
92
+ self .environment = LocalEnvironment (project )
86
93
self .sanity_check ()
87
94
88
95
def sanity_check (self ):
@@ -146,17 +153,27 @@ def symlink_cnames(self, domain=None):
146
153
else :
147
154
domains = Domain .objects .filter (project = self .project )
148
155
for dom in domains :
149
- log_msg = 'Symlinking CNAME: {0} -> {1}' .format (dom .domain , self .project .slug )
150
- log .info (constants .LOG_TEMPLATE .format (project = self .project .slug ,
151
- version = '' , msg = log_msg ))
156
+ log_msg = 'Symlinking CNAME: {} -> {}' .format (
157
+ dom .domain , self .project .slug
158
+ )
159
+ log .info (
160
+ constants .LOG_TEMPLATE .format (
161
+ project = self .project .slug ,
162
+ version = '' , msg = log_msg
163
+ )
164
+ )
152
165
153
166
# CNAME to doc root
154
167
symlink = os .path .join (self .CNAME_ROOT , dom .domain )
155
- run ([ 'ln' , '-nsf' , self .project_root , symlink ] )
168
+ self . environment . run ('ln' , '-nsf' , self .project_root , symlink )
156
169
157
170
# Project symlink
158
- project_cname_symlink = os .path .join (self .PROJECT_CNAME_ROOT , dom .domain )
159
- run (['ln' , '-nsf' , self .project .doc_path , project_cname_symlink ])
171
+ project_cname_symlink = os .path .join (
172
+ self .PROJECT_CNAME_ROOT , dom .domain
173
+ )
174
+ self .environment .run (
175
+ 'ln' , '-nsf' , self .project .doc_path , project_cname_symlink
176
+ )
160
177
161
178
def remove_symlink_cname (self , domain ):
162
179
"""Remove CNAME symlink."""
@@ -201,10 +218,12 @@ def symlink_subprojects(self):
201
218
# TODO this should use os.symlink, not a call to shell. For now,
202
219
# this passes command as a list to be explicit about escaping
203
220
# characters like spaces.
204
- status , _ , stderr = run (['ln' , '-nsf' , docs_dir , symlink ])
205
- if status > 0 :
206
- log .error ('Could not symlink path: status=%d error=%s' ,
207
- status , stderr )
221
+ result = self .environment .run ('ln' , '-nsf' , docs_dir , symlink )
222
+ if result .exit_code > 0 :
223
+ log .error (
224
+ 'Could not symlink path: status=%d error=%s' ,
225
+ result .exit_code , result .error
226
+ )
208
227
209
228
# Remove old symlinks
210
229
if os .path .exists (self .subproject_root ):
@@ -233,12 +252,16 @@ def symlink_translations(self):
233
252
234
253
for (language , slug ) in list (translations .items ()):
235
254
236
- log_msg = 'Symlinking translation: {0}->{1}' .format (language , slug )
237
- log .info (constants .LOG_TEMPLATE .format (project = self .project .slug ,
238
- version = '' , msg = log_msg ))
255
+ log_msg = 'Symlinking translation: {}->{}' .format (language , slug )
256
+ log .info (
257
+ constants .LOG_TEMPLATE .format (
258
+ project = self .project .slug ,
259
+ version = '' , msg = log_msg
260
+ )
261
+ )
239
262
symlink = os .path .join (self .project_root , language )
240
263
docs_dir = os .path .join (self .WEB_ROOT , slug , language )
241
- run ([ 'ln' , '-nsf' , docs_dir , symlink ] )
264
+ self . environment . run ('ln' , '-nsf' , docs_dir , symlink )
242
265
243
266
# Remove old symlinks
244
267
for lang in os .listdir (self .project_root ):
@@ -268,9 +291,13 @@ def symlink_single_version(self):
268
291
269
292
# Create symlink
270
293
if version is not None :
271
- docs_dir = os .path .join (settings .DOCROOT , self .project .slug ,
272
- 'rtd-builds' , version .slug )
273
- run (['ln' , '-nsf' , docs_dir , symlink ])
294
+ docs_dir = os .path .join (
295
+ settings .DOCROOT ,
296
+ self .project .slug ,
297
+ 'rtd-builds' ,
298
+ version .slug
299
+ )
300
+ self .environment .run ('ln' , '-nsf' , docs_dir , symlink )
274
301
275
302
def symlink_versions (self ):
276
303
"""
@@ -280,7 +307,9 @@ def symlink_versions(self):
280
307
HOME/user_builds/<project>/rtd-builds/<version>
281
308
"""
282
309
versions = set ()
283
- version_dir = os .path .join (self .WEB_ROOT , self .project .slug , self .project .language )
310
+ version_dir = os .path .join (
311
+ self .WEB_ROOT , self .project .slug , self .project .language
312
+ )
284
313
# Include active public versions,
285
314
# as well as public versions that are built but not active, for archived versions
286
315
version_queryset = self .get_version_queryset ()
@@ -289,11 +318,21 @@ def symlink_versions(self):
289
318
safe_makedirs (version_dir )
290
319
for version in version_queryset :
291
320
log_msg = 'Symlinking Version: {}' .format (version )
292
- log .info (constants .LOG_TEMPLATE .format (project = self .project .slug ,
293
- version = '' , msg = log_msg ))
321
+ log .info (
322
+ constants .LOG_TEMPLATE .format (
323
+ project = self .project .slug ,
324
+ version = '' ,
325
+ msg = log_msg
326
+ )
327
+ )
294
328
symlink = os .path .join (version_dir , version .slug )
295
- docs_dir = os .path .join (settings .DOCROOT , self .project .slug , 'rtd-builds' , version .slug )
296
- run (['ln' , '-nsf' , docs_dir , symlink ])
329
+ docs_dir = os .path .join (
330
+ settings .DOCROOT ,
331
+ self .project .slug ,
332
+ 'rtd-builds' ,
333
+ version .slug
334
+ )
335
+ self .environment .run ('ln' , '-nsf' , docs_dir , symlink )
297
336
versions .add (version .slug )
298
337
299
338
# Remove old symlinks
0 commit comments