Because subversion has a universal collection of error codes that applies to
both the client and server sides, it is important that the errors codes (which
are transmitted by their numeric value) be as reasonalbe in-sync between those
two sides as possible. That means, we should expect that any client of a given
Major version number should be able to communicate with any server of the same
Major version number, and their codes not be misaligned.
To accomplish this, two things need to occur:
- The error codes in svn_error_codes.h need to be fragmented by their general
module, to create separate "spaces" for those codes with room for addition of
new codes in each module "space". For example:
...
#define SVN_WC_BASE_ERROR (SVN_BASE_ERROR + 100)
#define SVN_FS_BASE_ERROR (SVN_BASE_ERROR + 200)
...
#define SVN_FS_NO_SUCH_REPRESENTATION (SVN_FS_BASE_ERROR + 15)
...
- Secondly, policy needs to exist (and be enforced) that we do everything
possible to keep error codes in their respective places in the overall ID space.
So when an error code is removed, it is simply replaced with a value that means
"there's an empty slot here." And new codes added to a module's error space go
into the first empty slot in that space.
[Obviously, completion of this issue is deemed as having accomplished the code
space fragmentation only, since the policy-driven use of those spaces will go on
... forever!]