static int inside_work_tree = -1;
static int work_tree_config_is_bogus;
+static struct startup_info the_startup_info;
+struct startup_info *startup_info = &the_startup_info;
+
/*
* The input parameter must contain an absolute path, and it must already be
* normalized.
return NULL;
}
} else {
- sanitized = xstrfmt("%.*s%s", len, prefix, path);
+ sanitized = xstrfmt("%.*s%s", len, len ? prefix : "", path);
if (remaining_prefix)
*remaining_prefix = len;
if (normalize_path_copy_len(sanitized, sanitized, remaining_prefix)) {
int diagnose_misspelt_rev)
{
if (!diagnose_misspelt_rev)
- die("%s: no such path in the working tree.\n"
- "Use 'git <command> -- <path>...' to specify paths that do not exist locally.",
+ die(_("%s: no such path in the working tree.\n"
+ "Use 'git <command> -- <path>...' to specify paths that do not exist locally."),
arg);
/*
* Saying "'(icase)foo' does not exist in the index" when the
maybe_die_on_misspelt_object_name(arg, prefix);
/* ... or fall back the most general message. */
- die("ambiguous argument '%s': unknown revision or path not in the working tree.\n"
- "Use '--' to separate paths from revisions, like this:\n"
- "'git <command> [<revision>...] -- [<file>...]'", arg);
+ die(_("ambiguous argument '%s': unknown revision or path not in the working tree.\n"
+ "Use '--' to separate paths from revisions, like this:\n"
+ "'git <command> [<revision>...] -- [<file>...]'"), arg);
}
return; /* flag */
if (!check_filename(prefix, arg))
return;
- die("ambiguous argument '%s': both revision and filename\n"
- "Use '--' to separate paths from revisions, like this:\n"
- "'git <command> [<revision>...] -- [<file>...]'", arg);
+ die(_("ambiguous argument '%s': both revision and filename\n"
+ "Use '--' to separate paths from revisions, like this:\n"
+ "'git <command> [<revision>...] -- [<file>...]'"), arg);
}
int get_common_dir(struct strbuf *sb, const char *gitdir)
data->precious_objects = git_config_bool(var, value);
else
string_list_append(&data->unknown_extensions, ext);
+ } else if (strcmp(var, "core.bare") == 0) {
+ data->is_bare = git_config_bool(var, value);
+ } else if (strcmp(var, "core.worktree") == 0) {
+ if (!value)
+ return config_error_nonbool(var);
+ data->work_tree = xstrdup(value);
}
return 0;
}
-static int read_repository_format_1(struct repository_format *, config_fn_t,
- const char *);
-
static int check_repository_format_gently(const char *gitdir, int *nongit_ok)
{
struct strbuf sb = STRBUF_INIT;
struct strbuf err = STRBUF_INIT;
struct repository_format candidate;
- config_fn_t fn;
-
- if (get_common_dir(&sb, gitdir))
- fn = check_repo_format;
- else
- fn = check_repository_format_version;
+ int has_common;
+ has_common = get_common_dir(&sb, gitdir);
strbuf_addstr(&sb, "/config");
- read_repository_format_1(&candidate, fn, sb.buf);
+ read_repository_format(&candidate, sb.buf);
strbuf_release(&sb);
/*
die("%s", err.buf);
}
- repository_format_version = candidate.version;
repository_format_precious_objects = candidate.precious_objects;
string_list_clear(&candidate.unknown_extensions, 0);
- if (candidate.is_bare != -1) {
- is_bare_repository_cfg = candidate.is_bare;
- if (is_bare_repository_cfg == 1)
+ if (!has_common) {
+ if (candidate.is_bare != -1) {
+ is_bare_repository_cfg = candidate.is_bare;
+ if (is_bare_repository_cfg == 1)
+ inside_work_tree = -1;
+ }
+ if (candidate.work_tree) {
+ free(git_work_tree_cfg);
+ git_work_tree_cfg = candidate.work_tree;
inside_work_tree = -1;
- }
- if (candidate.work_tree) {
- free(git_work_tree_cfg);
- git_work_tree_cfg = candidate.work_tree;
- inside_work_tree = -1;
+ }
+ } else {
+ free(candidate.work_tree);
}
return 0;
}
-static int read_repository_format_1(struct repository_format *format,
- config_fn_t fn, const char *path)
+int read_repository_format(struct repository_format *format, const char *path)
{
memset(format, 0, sizeof(*format));
format->version = -1;
format->is_bare = -1;
string_list_init(&format->unknown_extensions, 1);
- git_config_from_file(fn, path, format);
+ git_config_from_file(check_repo_format, path, format);
return format->version;
}
-int read_repository_format(struct repository_format *format, const char *path)
-{
- return read_repository_format_1(format, check_repository_format_version, path);
-}
-
int verify_repository_format(const struct repository_format *format,
struct strbuf *err)
{
if (GIT_REPO_VERSION_READ < format->version) {
- strbuf_addf(err, "Expected git repo version <= %d, found %d",
+ strbuf_addf(err, _("Expected git repo version <= %d, found %d"),
GIT_REPO_VERSION_READ, format->version);
return -1;
}
if (format->version >= 1 && format->unknown_extensions.nr) {
int i;
- strbuf_addstr(err, "unknown repository extensions found:");
+ strbuf_addstr(err, _("unknown repository extensions found:"));
for (i = 0; i < format->unknown_extensions.nr; i++)
strbuf_addf(err, "\n\t%s",
static const char *setup_nongit(const char *cwd, int *nongit_ok)
{
if (!nongit_ok)
- die("Not a git repository (or any of the parent directories): %s", DEFAULT_GIT_DIR_ENVIRONMENT);
+ die(_("Not a git repository (or any of the parent directories): %s"), DEFAULT_GIT_DIR_ENVIRONMENT);
if (chdir(cwd))
- die_errno("Cannot come back to cwd");
+ die_errno(_("Cannot come back to cwd"));
*nongit_ok = 1;
return NULL;
}
*nongit_ok = 0;
if (strbuf_getcwd(&cwd))
- die_errno("Unable to read current working directory");
+ die_errno(_("Unable to read current working directory"));
offset = cwd.len;
/*
if (parent_device != current_device) {
if (nongit_ok) {
if (chdir(cwd.buf))
- die_errno("Cannot come back to cwd");
+ die_errno(_("Cannot come back to cwd"));
*nongit_ok = 1;
return NULL;
}
strbuf_setlen(&cwd, offset);
- die("Not a git repository (or any parent up to mount point %s)\n"
- "Stopping at filesystem boundary (GIT_DISCOVERY_ACROSS_FILESYSTEM not set).",
+ die(_("Not a git repository (or any parent up to mount point %s)\n"
+ "Stopping at filesystem boundary (GIT_DISCOVERY_ACROSS_FILESYSTEM not set)."),
cwd.buf);
}
}
if (chdir("..")) {
strbuf_setlen(&cwd, offset);
- die_errno("Cannot change to '%s/..'", cwd.buf);
+ die_errno(_("Cannot change to '%s/..'"), cwd.buf);
}
offset = offset_parent;
}
else
setenv(GIT_PREFIX_ENVIRONMENT, "", 1);
- if (startup_info) {
- startup_info->have_repository = !nongit_ok || !*nongit_ok;
- startup_info->prefix = prefix;
- }
+ startup_info->have_repository = !nongit_ok || !*nongit_ok;
+ startup_info->prefix = prefix;
+
return prefix;
}
/* A filemode value was given: 0xxx */
if ((i & 0600) != 0600)
- die("Problem with core.sharedRepository filemode value "
+ die(_("Problem with core.sharedRepository filemode value "
"(0%.3o).\nThe owner of files must always have "
- "read and write permissions.", i);
+ "read and write permissions."), i);
/*
* Mask filemode value. Others can not get write permission.
return -(i & 0666);
}
-int check_repository_format_version(const char *var, const char *value, void *cb)
-{
- struct repository_format *data = cb;
- int ret = check_repo_format(var, value, cb);
- if (ret)
- return ret;
- if (strcmp(var, "core.bare") == 0) {
- data->is_bare = git_config_bool(var, value);
- } else if (strcmp(var, "core.worktree") == 0) {
- if (!value)
- return config_error_nonbool(var);
- data->work_tree = xstrdup(value);
- }
- return 0;
-}
-
void check_repository_format(void)
{
check_repository_format_gently(get_git_dir(), NULL);
+ startup_info->have_repository = 1;
}
/*