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 https://pulp.plan.io/issues/7031. This is the purpose of having a many-to-many instead of one-to-many. ### REMOTE_TYPES 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. `REMOTE_TYPES`. 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 when syncing. If a repository does not have any remotes and no remote is supplied, raise an error.