diff --git a/readthedocs/core/static/core/font/Inconsolata-Bold.ttf b/readthedocs/core/static/core/font/Inconsolata-Bold.ttf index 58c9fef3a01..809c1f5828f 100644 Binary files a/readthedocs/core/static/core/font/Inconsolata-Bold.ttf and b/readthedocs/core/static/core/font/Inconsolata-Bold.ttf differ diff --git a/readthedocs/core/static/core/font/Inconsolata-Regular.ttf b/readthedocs/core/static/core/font/Inconsolata-Regular.ttf index a87ffba6bef..fc981ce7ad6 100644 Binary files a/readthedocs/core/static/core/font/Inconsolata-Regular.ttf and b/readthedocs/core/static/core/font/Inconsolata-Regular.ttf differ diff --git a/readthedocs/core/static/core/font/Lato-Bold.ttf b/readthedocs/core/static/core/font/Lato-Bold.ttf index 74343694e2b..1d23c7066e0 100644 Binary files a/readthedocs/core/static/core/font/Lato-Bold.ttf and b/readthedocs/core/static/core/font/Lato-Bold.ttf differ diff --git a/readthedocs/core/static/core/font/Lato-Regular.ttf b/readthedocs/core/static/core/font/Lato-Regular.ttf index 04ea8efb136..0f3d0f837d2 100644 Binary files a/readthedocs/core/static/core/font/Lato-Regular.ttf and b/readthedocs/core/static/core/font/Lato-Regular.ttf differ diff --git a/readthedocs/oauth/migrations/0008_add-project-relation.py b/readthedocs/oauth/migrations/0008_add-project-relation.py new file mode 100644 index 00000000000..d12433c4690 --- /dev/null +++ b/readthedocs/oauth/migrations/0008_add-project-relation.py @@ -0,0 +1,21 @@ +# -*- coding: utf-8 -*- +# Generated by Django 1.9.12 on 2017-03-22 20:10 +from __future__ import unicode_literals + +from django.db import migrations, models +import django.db.models.deletion + + +class Migration(migrations.Migration): + + dependencies = [ + ('oauth', '0007_org_slug_nonunique'), + ] + + operations = [ + migrations.AddField( + model_name='remoterepository', + name='project', + field=models.OneToOneField(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='remote_repository', to='projects.Project'), + ), + ] diff --git a/readthedocs/oauth/models.py b/readthedocs/oauth/models.py index 218b19af710..c81316aa3b3 100644 --- a/readthedocs/oauth/models.py +++ b/readthedocs/oauth/models.py @@ -84,6 +84,9 @@ class RemoteRepository(models.Model): related_name='repositories', null=True, blank=True) active = models.BooleanField(_('Active'), default=False) + project = models.OneToOneField(Project, on_delete=models.SET_NULL, + related_name='remote_repository', null=True, + blank=True) name = models.CharField(_('Name'), max_length=255) full_name = models.CharField(_('Full Name'), max_length=255) description = models.TextField(_('Description'), blank=True, null=True, diff --git a/readthedocs/projects/forms.py b/readthedocs/projects/forms.py index 426deed87aa..68752e21819 100644 --- a/readthedocs/projects/forms.py +++ b/readthedocs/projects/forms.py @@ -16,6 +16,7 @@ from readthedocs.builds.constants import TAG from readthedocs.core.utils import trigger_build, slugify from readthedocs.redirects.models import Redirect +from readthedocs.oauth.models import RemoteRepository from readthedocs.projects import constants from readthedocs.projects.exceptions import ProjectSpamError from readthedocs.projects.models import Project, EmailHook, WebHook, Domain @@ -74,6 +75,11 @@ class Meta: model = Project fields = ('name', 'repo', 'repo_type') + remote_repository = forms.CharField( + widget=forms.HiddenInput(), + required=False, + ) + def __init__(self, *args, **kwargs): show_advanced = kwargs.pop('show_advanced', False) super(ProjectBasicsForm, self).__init__(*args, **kwargs) @@ -85,6 +91,18 @@ def __init__(self, *args, **kwargs): self.fields['repo'].widget.attrs['placeholder'] = self.placehold_repo() self.fields['repo'].widget.attrs['required'] = True + def save(self, commit=True): + """Add remote repository relationship to the project instance""" + instance = super(ProjectBasicsForm, self).save(commit) + remote_repo = self.cleaned_data.get('remote_repository', None) + if remote_repo: + if commit: + remote_repo.project = self.instance + remote_repo.save() + else: + instance.remote_repository = remote_repo + return instance + def clean_name(self): name = self.cleaned_data.get('name', '') if not self.instance.pk: @@ -105,6 +123,18 @@ def clean_repo(self): u'public (http:// or git://) clone url')) return repo + def clean_remote_repository(self): + remote_repo = self.cleaned_data.get('remote_repository', None) + if not remote_repo: + return None + try: + return RemoteRepository.objects.get( + pk=remote_repo, + users=self.user, + ) + except RemoteRepository.DoesNotExist: + raise forms.ValidationError(_(u'Repository invalid')) + def placehold_repo(self): return choice([ 'https://bitbucket.org/cherrypy/cherrypy', @@ -126,7 +156,8 @@ class Meta: fields = ( 'description', 'documentation_type', - 'language', 'programming_language', + 'language', + 'programming_language', 'project_url', 'tags', ) diff --git a/readthedocs/projects/static-src/projects/js/import.js b/readthedocs/projects/static-src/projects/js/import.js index ca09b715174..10e46de1565 100644 --- a/readthedocs/projects/static-src/projects/js/import.js +++ b/readthedocs/projects/static-src/projects/js/import.js @@ -90,6 +90,7 @@ function Project (instance, view) { repo_type: self.vcs(), description: self.description(), project_url: self.html_url(), + remote_repository: self.id(), }, form = $('
'); diff --git a/readthedocs/projects/static/projects/js/import.js b/readthedocs/projects/static/projects/js/import.js index 4b860506453..738fc023af5 100644 --- a/readthedocs/projects/static/projects/js/import.js +++ b/readthedocs/projects/static/projects/js/import.js @@ -1 +1 @@ -require=function e(r,t,n){function a(s,i){if(!t[s]){if(!r[s]){var u="function"==typeof require&&require;if(!i&&u)return u(s,!0);if(o)return o(s,!0);var c=new Error("Cannot find module '"+s+"'");throw c.code="MODULE_NOT_FOUND",c}var l=t[s]={exports:{}};r[s][0].call(l.exports,function(e){var t=r[s][1][e];return a(t?t:e)},l,l.exports,e,r,t,n)}return t[s].exports}for(var o="function"==typeof require&&require,s=0;s