8
8
from allauth .socialaccount .providers .github .views import GitHubOAuth2Adapter
9
9
10
10
from django .conf import settings
11
- from django .db .models import Q
12
11
from django .urls import reverse
13
12
from requests .exceptions import RequestException
14
13
20
19
)
21
20
from readthedocs .integrations .models import Integration
22
21
23
- from ..models import RemoteOrganization , RemoteRepository
22
+ from ..models import (
23
+ RemoteOrganization ,
24
+ RemoteRepository ,
25
+ RemoteRepositoryRelation ,
26
+ )
24
27
from .base import Service , SyncServiceError
25
28
26
29
log = logging .getLogger (__name__ )
@@ -97,21 +100,19 @@ def create_repository(self, fields, privacy=None, organization=None):
97
100
"""
98
101
privacy = privacy or settings .DEFAULT_PRIVACY_LEVEL
99
102
if any ([
100
- (privacy == 'private' ),
101
- (fields ['private' ] is False and privacy == 'public' ),
103
+ (privacy == 'private' ),
104
+ (fields ['private' ] is False and privacy == 'public' ),
102
105
]):
103
- try :
104
- repo = RemoteRepository .objects .get (
105
- full_name = fields ['full_name' ],
106
- users = self .user ,
107
- account = self .account ,
108
- )
109
- except RemoteRepository .DoesNotExist :
110
- repo = RemoteRepository .objects .create (
111
- full_name = fields ['full_name' ],
112
- account = self .account ,
113
- )
114
- repo .users .add (self .user )
106
+
107
+ repo , _ = RemoteRepository .objects .get_or_create (
108
+ full_name = fields ['full_name' ]
109
+ )
110
+ remote_relation , _ = RemoteRepositoryRelation .objects .get_or_create (
111
+ remoterepository = repo ,
112
+ user = self .user ,
113
+ account = self .account
114
+ )
115
+
115
116
if repo .organization and repo .organization != organization :
116
117
log .debug (
117
118
'Not importing %s because mismatched orgs' ,
@@ -125,19 +126,24 @@ def create_repository(self, fields, privacy=None, organization=None):
125
126
repo .ssh_url = fields ['ssh_url' ]
126
127
repo .html_url = fields ['html_url' ]
127
128
repo .private = fields ['private' ]
129
+ repo .vcs = 'git'
130
+ repo .avatar_url = fields .get ('owner' , {}).get ('avatar_url' )
131
+ repo .default_branch = fields .get ('default_branch' )
132
+
128
133
if repo .private :
129
134
repo .clone_url = fields ['ssh_url' ]
130
135
else :
131
136
repo .clone_url = fields ['clone_url' ]
132
- repo .admin = fields .get ('permissions' , {}).get ('admin' , False )
133
- repo .vcs = 'git'
134
- repo .default_branch = fields .get ('default_branch' )
135
- repo .account = self .account
136
- repo .avatar_url = fields .get ('owner' , {}).get ('avatar_url' )
137
+
137
138
if not repo .avatar_url :
138
139
repo .avatar_url = self .default_user_avatar_url
139
- repo . json = json . dumps ( fields )
140
+
140
141
repo .save ()
142
+
143
+ remote_relation .json = fields
144
+ remote_relation .admin = fields .get ('permissions' , {}).get ('admin' , False )
145
+ remote_relation .save ()
146
+
141
147
return repo
142
148
143
149
log .debug (
0 commit comments