diff --git a/cache.h b/cache.h index 6ac94c5a1f..de53f41287 100644 --- a/cache.h +++ b/cache.h @@ -182,6 +182,10 @@ extern int trust_executable_bit; extern int only_use_symrefs; extern int diff_rename_limit_default; +#define GIT_REPO_VERSION 0 +extern int repository_format_version; +extern int check_repository_format(void); + #define MTIME_CHANGED 0x0001 #define CTIME_CHANGED 0x0002 #define OWNER_CHANGED 0x0004 @@ -388,6 +392,7 @@ extern int git_config_int(const char *, const char *); extern int git_config_bool(const char *, const char *); extern int git_config_set(const char *, const char *); extern int git_config_set_multivar(const char *, const char *, const char *, int); +extern int check_repository_format_version(const char *var, const char *value); #define MAX_GITNAME (1000) extern char git_default_email[MAX_GITNAME]; diff --git a/environment.c b/environment.c index b5026f1265..3f194732e5 100644 --- a/environment.c +++ b/environment.c @@ -13,6 +13,7 @@ char git_default_email[MAX_GITNAME]; char git_default_name[MAX_GITNAME]; int trust_executable_bit = 1; int only_use_symrefs = 0; +int repository_format_version = 0; static char *git_dir, *git_object_dir, *git_index_file, *git_refs_dir, *git_graft_file; diff --git a/setup.c b/setup.c index ab3c778e80..0e2e3c8c3c 100644 --- a/setup.c +++ b/setup.c @@ -154,6 +154,22 @@ static const char *setup_git_directory_1(void) return cwd + offset; } +int check_repository_format_version(const char *var, const char *value) +{ + if (strcmp(var, "core.repositoryformatversion") == 0) + repository_format_version = git_config_int(var, value); + return 0; +} + +int check_repository_format(void) +{ + git_config(check_repository_format_version); + if (GIT_REPO_VERSION < repository_format_version) + die ("Expected git repo version <= %d, found %d", + GIT_REPO_VERSION, repository_format_version); + return 0; +} + const char *setup_git_directory(void) { const char *retval = setup_git_directory_1();