Services/Sync/Server/GlobalConfFile
Global Configuration File
All services on a Sync server share a common configuration. Here's a format proposal for a unique configuration file that can be used to group this configuration.
Syntax
The configuration file is a ini-based file. (See http://en.wikipedia.org/wiki/INI_file for more details.) Variables name can be assigned values, and grouped into sections. A line that starts with "#" is commented out.
Example:
[section1] # comment name = value name2 = "other value"
[section2] foo = bar
Ini readers in Python, PHP and other languages understand this syntax. Although, there are subtle differences in the way they interpret values an in particular if they convert them.
Values conversion
- If value is quoted with " chars, it's a string. This notation is useful to include "=" characters in the value. In case the value contains a " character, it must be escaped with a "\" character.
- When the value is composed of numbers and optionally suffixed by "-", it's converted to an integer.
- A value can be an environment variable : "${VAR}" is replaced by the value of VAR if found in the environment. It's left alone otherwise.
- A value can contains multiple lines. When read, lines are converted into a sequence of values. Each new line for a multiple lines value must start with a least one space or tab character.
Examples:
[section1] # comment a_number = 1 a_string = "other=value" another_string = other value a_list = one two three
Extending a file
An INI file can extend another file. For this, A "DEFAULT" section must contain an "extends" variable that can point to another INI file, which will be merged to the current file, by adding new sections and values. If the file pointed in "extends" contains section/variable names that already exist in the original file, they will not override existing ones.
file_one.ini:
[section1] name2 = "other value"
[section2] foo = baz bas = bar
file_two.ini:
[DEFAULT] extends = file_one.ini
[section2] foo = bar
Result:
[section1] name2 = "other value"
[section2] foo = bar bas = bar
Sync INI files syntax
TBD