Story #7015
Updated by bmbouter over 4 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 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. 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. Also, indicate in the help text that this field is optional.
### 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 and no remote is supplied, raise an error.