}
if (!strcmp(arg, "--show-cdup")) {
const char *pfx = prefix;
- if (!is_inside_work_tree()) {
+ if (!is_inside_work_tree(the_repository)) {
const char *work_tree =
repo_get_work_tree(the_repository);
if (work_tree)
continue;
}
if (!strcmp(arg, "--is-inside-work-tree")) {
- printf("%s\n", is_inside_work_tree() ? "true"
+ printf("%s\n", is_inside_work_tree(the_repository) ? "true"
: "false");
continue;
}
if (!starts_with(rel, "./") && !starts_with(rel, "../"))
return NULL;
- if (r != the_repository || !is_inside_work_tree())
+ if (r != the_repository || !is_inside_work_tree(the_repository))
die(_("relative path syntax can't be used outside working tree"));
/* die() inside prefix_path() if resolved path is outside worktree */
#include "trace2.h"
#include "worktree.h"
-static int inside_work_tree = -1;
static int work_tree_config_is_bogus;
enum allowed_bare_repo {
ALLOWED_BARE_REPO_EXPLICIT = 0,
*/
void verify_non_filename(const char *prefix, const char *arg)
{
- if (!is_inside_work_tree() || is_inside_git_dir(the_repository))
+ if (!is_inside_work_tree(the_repository) || is_inside_git_dir(the_repository))
return;
if (*arg == '-')
return; /* flag */
return ret;
}
-int is_inside_work_tree(void)
+int is_inside_work_tree(struct repository *repo)
{
- if (inside_work_tree < 0)
- inside_work_tree = is_inside_dir(repo_get_work_tree(the_repository));
- return inside_work_tree;
+ struct strbuf buf = STRBUF_INIT;
+ const char *worktree;
+ int ret;
+
+ worktree = repo_get_work_tree(repo);
+ if (!worktree)
+ return 0;
+
+ ret = is_inside_dir(strbuf_realpath(&buf, worktree, 1));
+
+ strbuf_release(&buf);
+ return ret;
}
void setup_work_tree(void)
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 = xstrdup(candidate->work_tree);
- inside_work_tree = -1;
}
}
set_git_work_tree(".");
if (strcmp(gitdir, DEFAULT_GIT_DIR_ENVIRONMENT))
set_git_dir(repo, gitdir, 0);
- inside_work_tree = 1;
if (offset >= cwd->len)
return NULL;
return setup_explicit_git_dir(repo, gitdir, cwd, repo_fmt, nongit_ok);
}
- inside_work_tree = 0;
if (offset != cwd->len) {
if (chdir(cwd->buf))
die_errno(_("cannot come back to cwd"));
#include "string-list.h"
int is_inside_git_dir(struct repository *repo);
-int is_inside_work_tree(void);
+int is_inside_work_tree(struct repository *repo);
int get_common_dir_noenv(struct strbuf *sb, const char *gitdir);
int get_common_dir(struct strbuf *sb, const char *gitdir);