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]