Key-based repository store
The idea here is to create a pastebin-like repository for changesets.
This is an extension to the existing bkd protocol to allow the bkd to maintain a collection of repositories that are accessed by the cset tipkey. Any number of keys can be saved and internally the data will be saved as a collection of repositories or perhaps some baseline repositories plus saved bk patches. The bkd can be accessed by one of these keys and will redirect to whichever repository contains that data. Possibly masking out the data past that key.
In many cases, we just want the ability to host a collection of repositories in order to reproduce a given cset. For example, if we changed the RTI to automatically save the csets under operation rather than require the user deal with all the hassle of managing the repository. This would all the use to get a simple URL for any cset they want to submit to a publically facing RTI without requiring us to provide generic hosting to anyone.
The URL bk://host/MD5KEY will be expanded internally as if the user had included a -r argument and referred to the correct backing store.
Push operations do a keysync over all repositories and potentially create a new tip.
Ideally a rclone will do a be converted to a push and only if the server has never seen that repository rootkey before would we need to do a real clone.
Each component of a nested collection will be saved independently under the syncroot repository id. The product will be saved as if no components are populated.
We really want a clonemod when the user provides a baseline
Not sure what to do with the ‘parent’ link. Using the key link will never return anything for a pull and is kinda funny for populate.
- Rclone, ideally this will query to see if this repository id is already in present and switch to a push
- Changes -LR
I think for nested ‘bk changes -R’ of a product will act like only the product is populated remotely
- Changes URL
The populate code needs to understand it can just request a desired tipkey and it will be returned if it can be found.