#!/usr/bin/python -tt import gconf import sys def recurse_gconf(client, path, thisdict): stuff = client.all_dirs(path) + client.all_entries(path) for item in stuff: if type(item) == gconf.Entry: if item.value != None: val = (item.value.type, item.value.to_string()) else: val = (type(None), None) thisdict[item.key] = val else: thisdict = recurse_gconf(client, item, thisdict) return thisdict def human_entry(value): if value == None: return None else: return value.to_string() if len(sys.argv) < 3: print "usage: diff-gconf.py old new" sys.exit(1) old_source = 'xml:readwrite:%s' % sys.argv[1] new_source = 'xml:readwrite:%s' % sys.argv[2] old_engine = gconf.engine_get_for_address(old_source) new_engine = gconf.engine_get_for_address(new_source) old_conf = gconf.client_get_for_engine(old_engine) new_conf = gconf.client_get_for_engine(new_engine) old_entry_dict = recurse_gconf(old_conf, '/', {}) new_entry_dict = recurse_gconf(new_conf, '/', {}) del_dict = {} add_dict = {} for (k, (t, v)) in old_entry_dict.items(): if not new_entry_dict.has_key(k): del_dict[k] = 1 continue for (k, (t,v)) in new_entry_dict.items(): if not old_entry_dict.has_key(k): add_dict[k] = (t,v) continue if new_entry_dict[k] != old_entry_dict[k]: add_dict[k] = (t,v) for k in del_dict.keys(): print '- %s' % k for k in add_dict.keys(): (t, v) = add_dict[k] print '! %s = %s' % (k, v)