From cf836627c6302a293cd4e152b1f2f0f931ce3295 Mon Sep 17 00:00:00 2001 From: Eric Holscher Date: Wed, 9 Mar 2016 11:30:22 -0800 Subject: [PATCH] Continue to add cname -> project link to enable flask app redirects. --- .gitignore | 5 +---- readthedocs/core/symlink.py | 31 +++++++++++++++++++++---------- 2 files changed, 22 insertions(+), 14 deletions(-) diff --git a/.gitignore b/.gitignore index e945b7e11..fa5e55490 100644 --- a/.gitignore +++ b/.gitignore @@ -10,11 +10,9 @@ .rope_project/ .ropeproject/ _build -cnames bower_components/ deploy/.vagrant dist/* -doc_root local_settings.py locks/* logs/* @@ -35,8 +33,7 @@ prod_artifacts wheelhouse whoosh_index xml_output -public_cnames -public_symlinks public_web_root +public_cname_project public_cname_root .rope_project/ diff --git a/readthedocs/core/symlink.py b/readthedocs/core/symlink.py index 91d0840da..9b229f76d 100644 --- a/readthedocs/core/symlink.py +++ b/readthedocs/core/symlink.py @@ -77,6 +77,7 @@ class Symlink(object): CNAME_ROOT = os.path.join(settings.SITE_ROOT, 'public_cname_root') WEB_ROOT = os.path.join(settings.SITE_ROOT, 'public_web_root') + PROJECT_CNAME_ROOT = os.path.join(settings.SITE_ROOT, 'public_cname_project') def __init__(self, project): self.project = project @@ -111,6 +112,12 @@ class Symlink(object): elif not os.path.exists(self.PROJECT_ROOT): os.makedirs(self.PROJECT_ROOT) + # CNAME root directories + if not os.path.lexists(self.CNAME_ROOT): + os.makedirs(self.CNAME_ROOT) + if not os.path.lexists(self.PROJECT_CNAME_ROOT): + os.makedirs(self.PROJECT_CNAME_ROOT) + def run(self): """ Create proper symlinks in the right order. @@ -133,8 +140,13 @@ class Symlink(object): def symlink_cnames(self, domain=None): """Symlink project CNAME domains - Link from HOME/user_builds/$CNAME_ROOT/ -> - HOME/user_builds/$WEB_ROOT/ + Link from HOME/$CNAME_ROOT/ -> + HOME/$WEB_ROOT/ + + Also give cname -> project link + + Link from HOME/public_cname_project/ -> + HOME// """ if domain: domains = [domain] @@ -142,15 +154,14 @@ class Symlink(object): domains = Domain.objects.filter(project=self.project) for domain in domains: self._log("Symlinking CNAME: {0} -> {1}".format(domain.domain, self.project.slug)) - docs_dir = self.PROJECT_ROOT - symlink = os.path.join(self.CNAME_ROOT, domain.domain) - # Make sure containing directories exist - symlink_dir = os.sep.join(symlink.split(os.path.sep)[:-1]) - if not os.path.lexists(symlink_dir): - os.makedirs(symlink_dir) - # Create proper symlinks - print run('ln -nsf {0} {1}'.format(docs_dir, symlink)) + # CNAME to doc root + symlink = os.path.join(self.CNAME_ROOT, domain.domain) + run('ln -nsf {0} {1}'.format(self.PROJECT_ROOT, symlink)) + + # Project symlink + project_cname_symlink = os.path.join(self.PROJECT_CNAME_ROOT, domain.domain) + run('ln -nsf %s %s' % (self.project.doc_path, project_cname_symlink)) def remove_symlink_cname(self, domain): """Remove single_version symlink"""