| Some thoughts on repository-dictated configuration |
| |
| Introduction |
| ============ |
| Many software development shops of non-trivial size desire to have an enforce |
| a uniform configuration environment among the various clients which commit |
| to their repositories. Although these shops my have the ability to control |
| the environment on the client machines (dictating software versions, etc), |
| relying up on the client for setting various configuration parameters can |
| be time-consuming and problematic. |
| |
| Subversion already provides the means of enforcing much (but not all) of this |
| configuration through the hook script mechanism. What our users desire is |
| some way of having the server dictate a default or recommended configuration |
| to clients. The parameters of interest typically come from the standard |
| client-side config: things like global-excludes or auto-props. Allowing the |
| administrator to store a default config on the server, which then gets pushed |
| to the clients, would save both time and frustration. |
| |
| |
| Behavioral specification |
| ======================== |
| The high-level behavior for repository-dictated configuration is relatively |
| simple: the repository maintains a list of configuration parameters and |
| values, and upon request, provides these to the client who then applies them |
| appropriately. |
| |
| It should be noted that the configuration the server dictates is only a |
| *suggestion* to the client. Clients may choose to override the suggestion |
| with a configuration of their own, so appropriate server-side enforcement |
| (often via hook scripts) is still recommended. |
| |
| |
| Server-client transmission mechanism |
| ==================================== |
| As part of the OPTIONS request, the client will send to the server the |
| sha1 hash of the version of the server-dictated config that it current has |
| cached. If the server has a different version, it will send that to the |
| client in the OPTIONS response. |
| |
| |
| Server-side storage |
| =================== |
| [TODO] |
| |
| |
| Client-side storage |
| =================== |
| The client current maintains a global configuration file in |
| ~/.subversion/config This feature will introduce the ~/.subversion/repos/ |
| directory, which will hold additional subdirectories keyed on the UUID of the |
| repository. It is in this subdirectory that the cached version of the |
| repository configuration will be stored. |
| |
| |
| Configuration Hierarchy |
| ======================= |
| [TODO] |