Story #7015

Updated by daviddavis over 3 years ago

Currently there is no way to link a repository with a remote, and as such, each time you wish to sync a repository against it's upstream link, you have to keep a record (or query for) the appropriate remote for that repo. 

 This can be done with careful consideration around naming conventions, however it would be nice if an optional link between a Repository and Remote was possible. 

 As such, once the Repository and Remote have been created an paired, a simply repository sync would be able to work out which remote to use, and sync. 

 # Design 

 ## Model 

 Add a many-to-many foreign key between Repositories and Remotes. This association should be optional. For now Repositories can only have 0 or 1 remotes. Remotes can belong to any number of repositories. 

 Note: In the future we want to be able to support multiple remotes for repositories that can be synced at once. See This is the purpose of having a many-to-many instead of one-to-many. 


 Add an iterable to Repository similar to CONTENT_TYPES. This iterable will check that when a remote is added to a repo, it is of one of these types. 

 ## API 

 ### Repositories 

 Expose a remote hrefs field for repository endpoints. Users should be able to create/read/update this field. Validate the remote type against `REMOTE_TYPES` and that a user is only supplying 0..1 remote. Also, indicate in the help text that this field is optional. 

 ### Remotes 

 Expose a repository hrefs field for remotes. Users should be able to view this field to see which repos a remote belongs to. 

 ### Syncing 

 Make the remote parameter on sync optional. If no remote is supplied, the sync task uses the remote field on Repository when syncing. 

 If a repository does not have a remote any remotes and no remote is supplied, raise an error.