Le mardi 05 décembre 2006 à 16:30 +0100, Nicolas Mailhot a écrit :
Le Mar 5 décembre 2006 14:39, Mark McLoughlin a écrit :
> Take a look at the how the XML files are saved these days (they're
Good, the situation is slowly improving then.
Now I think I've looked at the rawhide gconf evo files in the
months, and they were the mess I remembered,
Since I've sinned by talking from memory, and from memory of a known
gconf abuser, here is a quick sysadmin-oriented review of the latest
gconf files I have access to (rawhide system)
1. the file hierarchy is weird. The default file is named "%gconf.xml",
which seems to protect against inexistent collision risks (gconf seems
to only allow those files or directories, so anything ended in .xml
would have fit the bill)
2. I can understand the choice to only allow foo/%gconf.xml instead of
foo.xml files (leaf vs parent node safety), but only because of my
background. Most humans will find this choice weird, unintuitive and
heavy-handed on directories
3. all the conf files I've skimmed only use XML nesting for technical
not functional reasons, they don't even have the first level of grouping
of .ini files, so one wonders if the XML potential is really used there
(esp. WRT the deep filesystem directory nesting used at the same time)¹
4. OTOH the format is needlessly nesting and verbose for technical
reasons. A sample (composition of gconf extracts):
<entry name="draw_background" mtime="1141418301"
<entry name="picture_filename" mtime="1161888920"
<entry name="applet_id_list" mtime="1163807026"
a. what the hell is mtime doing there? If the gconf users are not live,
why should they care when an entry was modified ? If one or several
users are live and you need to track concurrent modifications, surely
this can happen in a memory cache without ever hitting the file system ?
This bit alone prevents safe manual editing
b. why is the typing in the conf file itself and not in a separate file?
(that could be written using a standard syntax like Relax NG generic
tools like vim or xsltproc have a chance to understand)
c. the boolean entry needlessly uses two lines
d. for the following entry: now we've written the entry is a string
(which tells us nothing, string basically means untyped) instead of
filling it with an xml string directly, someone though it was smart to
stuff the xml string in a <stringvalue> element. Why the heck for ? I
could understand it if you could have several stringvalue children, but
multivalued elements 1. have another type² 2. wrap their stringvalues in
li elements anyway.
Put all those remarks together and you could have :
<!-- Have GNOME draw the desktop background -->
<entry name="draw_background" value="true"/>
<!-- File to use for the background image -->
<!-- A list of panel applet IDs.
Each ID identifies an individual panel applet.
The settings for each of these applets are
stored in /apps/panel/applets/$(id) -->
typing-schema-id being the id of a schema properly declared in /etc/xml
for vim, libxslt and friends
I don't think this variant would be any more difficult for apps. For
humans it would definitively be nicer.
¹ ignoring the schema part for – IMHO it could safely be moved
to /usr/share as it's not were configuration takes place.
² I won't expand on the type + ltype + type-in-li thing