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]