aboutsummaryrefslogtreecommitdiff
path: root/config.c
diff options
context:
space:
mode:
authorJunio C Hamano <junkio@cox.net>2005-11-25 16:03:56 -0800
committerJunio C Hamano <junkio@cox.net>2005-11-27 01:32:59 -0800
commit4f629539cd99fb9fc68dbdc56812f291565d0f87 (patch)
treebcc44b56add5e3dd2be9cbe187c9b99e9c153185 /config.c
parent1644162ad53da1d0107c5c45c866e75ef95660bb (diff)
downloadgit-4f629539cd99fb9fc68dbdc56812f291565d0f87.tar.gz
git-4f629539cd99fb9fc68dbdc56812f291565d0f87.tar.xz
init-db: check template and repository format.
This makes init-db repository version aware. It checks if an existing config file says the repository being reinitialized is of a wrong version and aborts before doing further harm. When copying the templates, it makes sure the they are of the right repository format version. Otherwise the templates are ignored with an warning message. It copies the templates before creating the HEAD, and if the config file is copied from the template directory, reads it, primarily to pick up the value of core.symrefsonly. It changes the way the result of the filemode reliability test is written to the configuration file using git_config_set(). The test is done even if the config file was copied from the templates. And finally, our own repository format version is written to the config file. Signed-off-by: Junio C Hamano <junkio@cox.net>
Diffstat (limited to 'config.c')
-rw-r--r--config.c16
1 files changed, 12 insertions, 4 deletions
diff --git a/config.c b/config.c
index 5cc853508..0c43d7615 100644
--- a/config.c
+++ b/config.c
@@ -11,6 +11,7 @@
#define MAXNAME (256)
static FILE *config_file;
+static char *config_file_name;
static int config_linenr;
static int get_next_char(void)
{
@@ -186,7 +187,7 @@ static int git_parse_file(config_fn_t fn)
if (get_value(fn, var, baselen+1) < 0)
break;
}
- die("bad config file line %d", config_linenr);
+ die("bad config file line %d in %s", config_linenr, config_file_name);
}
int git_config_int(const char *name, const char *value)
@@ -197,7 +198,7 @@ int git_config_int(const char *name, const char *value)
if (!*end)
return val;
}
- die("bad config value for '%s'", name);
+ die("bad config value for '%s' in %s", name, config_file_name);
}
int git_config_bool(const char *name, const char *value)
@@ -240,21 +241,28 @@ int git_default_config(const char *var, const char *value)
return 0;
}
-int git_config(config_fn_t fn)
+int git_config_from_file(config_fn_t fn, const char *filename)
{
int ret;
- FILE *f = fopen(git_path("config"), "r");
+ FILE *f = fopen(filename, "r");
ret = -1;
if (f) {
config_file = f;
+ config_file_name = filename;
config_linenr = 1;
ret = git_parse_file(fn);
fclose(f);
+ config_file_name = NULL;
}
return ret;
}
+int git_config(config_fn_t fn)
+{
+ return git_config_from_file(fn, git_path("config"));
+}
+
/*
* Find all the stuff for git_config_set() below.
*/