Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Fix bugs related to real_path() #575

Closed
Closed
Show file tree
Hide file tree
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
4 changes: 2 additions & 2 deletions builtin/init-db.c
Expand Up @@ -356,12 +356,12 @@ int init_db(const char *git_dir, const char *real_git_dir,
if (!exist_ok && !stat(real_git_dir, &st))
SyntevoAlex marked this conversation as resolved.
Show resolved Hide resolved
die(_("%s already exists"), real_git_dir);

set_git_dir(real_path(real_git_dir));
set_git_dir(real_git_dir, 1);
git_dir = get_git_dir();
separate_git_dir(git_dir, original_git_dir);
}
else {
set_git_dir(real_path(git_dir));
set_git_dir(git_dir, 1);
git_dir = get_git_dir();
}
startup_info->have_repository = 1;
Expand Down
2 changes: 1 addition & 1 deletion cache.h
Expand Up @@ -543,7 +543,7 @@ const char *get_git_common_dir(void);
char *get_object_directory(void);
char *get_index_file(void);
char *get_graft_file(struct repository *r);
void set_git_dir(const char *path);
void set_git_dir(const char *path, int make_realpath);
int get_common_dir_noenv(struct strbuf *sb, const char *gitdir);
int get_common_dir(struct strbuf *sb, const char *gitdir);
const char *get_git_namespace(void);
Expand Down
11 changes: 10 additions & 1 deletion environment.c
Expand Up @@ -345,11 +345,20 @@ static void update_relative_gitdir(const char *name,
free(path);
}

void set_git_dir(const char *path)
void set_git_dir(const char *path, int make_realpath)
{
struct strbuf realpath = STRBUF_INIT;

if (make_realpath) {
strbuf_realpath(&realpath, path, 1);
path = realpath.buf;
}

set_git_dir_1(path);
if (!is_absolute_path(path))
chdir_notify_register(NULL, update_relative_gitdir, NULL);

strbuf_release(&realpath);
}

const char *get_log_output_encoding(void)
Expand Down
2 changes: 1 addition & 1 deletion path.c
Expand Up @@ -850,7 +850,7 @@ const char *enter_repo(const char *path, int strict)
}

if (is_git_directory(".")) {
set_git_dir(".");
set_git_dir(".", 0);
check_repository_format();
return path;
}
Expand Down
18 changes: 9 additions & 9 deletions setup.c
Expand Up @@ -725,7 +725,7 @@ static const char *setup_explicit_git_dir(const char *gitdirenv,
}

/* #18, #26 */
set_git_dir(gitdirenv);
set_git_dir(gitdirenv, 0);
free(gitfile);
return NULL;
}
Expand All @@ -747,7 +747,7 @@ static const char *setup_explicit_git_dir(const char *gitdirenv,
}
else if (!git_env_bool(GIT_IMPLICIT_WORK_TREE_ENVIRONMENT, 1)) {
/* #16d */
set_git_dir(gitdirenv);
set_git_dir(gitdirenv, 0);
free(gitfile);
return NULL;
}
Expand All @@ -759,14 +759,14 @@ static const char *setup_explicit_git_dir(const char *gitdirenv,

/* both get_git_work_tree() and cwd are already normalized */
if (!strcmp(cwd->buf, worktree)) { /* cwd == worktree */
set_git_dir(gitdirenv);
set_git_dir(gitdirenv, 0);
free(gitfile);
return NULL;
}

offset = dir_inside_of(cwd->buf, worktree);
if (offset >= 0) { /* cwd inside worktree? */
set_git_dir(real_path(gitdirenv));
set_git_dir(gitdirenv, 1);
if (chdir(worktree))
die_errno(_("cannot chdir to '%s'"), worktree);
strbuf_addch(cwd, '/');
Expand All @@ -775,7 +775,7 @@ static const char *setup_explicit_git_dir(const char *gitdirenv,
}

/* cwd outside worktree */
set_git_dir(gitdirenv);
set_git_dir(gitdirenv, 0);
free(gitfile);
return NULL;
}
Expand Down Expand Up @@ -804,7 +804,7 @@ static const char *setup_discovered_git_dir(const char *gitdir,

/* #16.2, #17.2, #20.2, #21.2, #24, #25, #28, #29 (see t1510) */
if (is_bare_repository_cfg > 0) {
set_git_dir(offset == cwd->len ? gitdir : real_path(gitdir));
set_git_dir(gitdir, (offset != cwd->len));
if (chdir(cwd->buf))
die_errno(_("cannot come back to cwd"));
return NULL;
Expand All @@ -813,7 +813,7 @@ static const char *setup_discovered_git_dir(const char *gitdir,
/* #0, #1, #5, #8, #9, #12, #13 */
set_git_work_tree(".");
if (strcmp(gitdir, DEFAULT_GIT_DIR_ENVIRONMENT))
set_git_dir(gitdir);
set_git_dir(gitdir, 0);
inside_git_dir = 0;
inside_work_tree = 1;
if (offset >= cwd->len)
Expand Down Expand Up @@ -856,10 +856,10 @@ static const char *setup_bare_git_dir(struct strbuf *cwd, int offset,
die_errno(_("cannot come back to cwd"));
root_len = offset_1st_component(cwd->buf);
strbuf_setlen(cwd, offset > root_len ? offset : root_len);
set_git_dir(cwd->buf);
set_git_dir(cwd->buf, 0);
}
else
set_git_dir(".");
set_git_dir(".", 0);
return NULL;
}

Expand Down