aboutsummaryrefslogtreecommitdiff
blob: 4637ed02e4f6b47bd072a56c3b9dc87f4313c738 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
#include "conf-update.h"

void read_config() {
	extern struct configuration config;
	GKeyFile *conffile;
	GError *error = NULL;
	
	// set reasonable defaults
	config.check_actions = TRUE;
	
	if (getenv("EDITOR")) {
		config.edit_tool = strdup(getenv("EDITOR"));
	} else {
		fprintf(stderr, "!!! ERROR: environment variable EDITOR not set; edit your /etc/rc.conf\n"
				        "!!! If you are using sudo, make sure it doesn't clean out the env.\n");
		exit(EXIT_FAILURE);
	}
	
	conffile = g_key_file_new();
	if (!g_key_file_load_from_file(conffile, CONFIG_FILE, G_KEY_FILE_NONE, NULL)) {
		fprintf(stderr, "!!! ERROR: Could not load config file %s\n", CONFIG_FILE);
		exit(EXIT_FAILURE);
	} else {
		config.automerge_trivial = g_key_file_get_boolean(conffile, PROG_NAME, "autoreplace_trivial", &error);
		if (g_error_matches(error, G_KEY_FILE_ERROR, G_KEY_FILE_ERROR_INVALID_VALUE) || g_error_matches(error, G_KEY_FILE_ERROR, G_KEY_FILE_ERROR_KEY_NOT_FOUND)) {
			config.automerge_trivial = TRUE;
			g_clear_error(&error);
		}
		config.automerge_unmodified = g_key_file_get_boolean(conffile, PROG_NAME, "autoreplace_unmodified", &error);
		if (g_error_matches(error, G_KEY_FILE_ERROR, G_KEY_FILE_ERROR_INVALID_VALUE) || g_error_matches(error, G_KEY_FILE_ERROR, G_KEY_FILE_ERROR_KEY_NOT_FOUND)) {
			config.automerge_unmodified = FALSE;
			g_clear_error(&error);
		}
		config.check_actions = g_key_file_get_boolean(conffile, PROG_NAME, "confirm_actions", &error);
		if (g_error_matches(error, G_KEY_FILE_ERROR, G_KEY_FILE_ERROR_INVALID_VALUE) || g_error_matches(error, G_KEY_FILE_ERROR, G_KEY_FILE_ERROR_KEY_NOT_FOUND)) {
			config.check_actions = TRUE;
			g_clear_error(&error);
		}
		if (!(config.diff_tool = g_key_file_get_string(conffile, PROG_NAME, "diff_tool", NULL))) {
			config.diff_tool = strdup("diff -u");
		}
		if (!(config.pager = g_key_file_get_string(conffile, PROG_NAME, "pager", NULL))) {
			config.pager = strdup("");
		}
		if (!(config.merge_tool = g_key_file_get_string(conffile, PROG_NAME, "merge_tool", NULL))) {
			config.merge_tool = strdup("sdiff -s -o");
		}
	}
	g_key_file_free(conffile);
}