engine: issue warnings once per source
[dconf.git] / bin / dconf-dump.vala
blob135b230bc877517e6fab789d4b73d08f44b81015
1 void add_to_keyfile (KeyFile kf, DConf.Client client, string topdir, string? rel = "") {
2 var this_dir = topdir + rel;
3 string this_group;
5 if (rel != "") {
6 this_group = rel.slice (0, -1);
7 } else {
8 this_group = "/";
11 foreach (var item in client.list (this_dir)) {
12 if (item.has_suffix ("/")) {
13 add_to_keyfile (kf, client, topdir, rel + item);
14 } else {
15 var val = client.read (this_dir + item);
17 if (val != null) {
18 kf.set_value (this_group, item, val.print (true));
24 void dconf_dump (string[] args) throws Error {
25 var client = new DConf.Client ();
26 var kf = new KeyFile ();
27 var dir = args[2];
29 DConf.verify_dir (dir);
31 add_to_keyfile (kf, client, dir);
32 print ("%s", kf.to_data ());
35 KeyFile keyfile_from_stdin () throws Error {
36 unowned string? tmp;
37 char buffer[1024];
39 var s = new StringBuilder ();
40 while ((tmp = stdin.gets (buffer)) != null) {
41 s.append (tmp);
44 var kf = new KeyFile ();
45 kf.load_from_data (s.str, s.len, 0);
47 return kf;
50 void dconf_load (string[] args) throws Error {
51 var dir = args[2];
52 DConf.verify_dir (dir);
54 var changeset = new DConf.Changeset ();
55 var kf = keyfile_from_stdin ();
57 foreach (var group in kf.get_groups ()) {
58 foreach (var key in kf.get_keys (group)) {
59 var path = dir + (group == "/" ? "" : group + "/") + key;
60 DConf.verify_key (path);
61 changeset.set (path, Variant.parse (null, kf.get_value (group, key)));
65 var client = new DConf.Client ();
66 client.change_sync (changeset);