Name make_*_path functions more accurately
Rename the make_*_path functions so it's clearer what they do, in particlar make clear what the differnce between make_absolute_path and make_nonrelative_path is by renaming them real_path and absolute_path respectively. make_relative_path has an understandable name and is renamed to relative_path to maintain the name convention. The function calls have been replaced 1-to-1 in their usage. Signed-off-by: Carlos Martín Nieto <cmn@elego.de> Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
parent
a3ca9b0fbe
commit
e2a57aac8a
18
abspath.c
18
abspath.c
@ -14,7 +14,14 @@ int is_directory(const char *path)
|
|||||||
/* We allow "recursive" symbolic links. Only within reason, though. */
|
/* We allow "recursive" symbolic links. Only within reason, though. */
|
||||||
#define MAXDEPTH 5
|
#define MAXDEPTH 5
|
||||||
|
|
||||||
const char *make_absolute_path(const char *path)
|
/*
|
||||||
|
* Use this to get the real path, i.e. resolve links. If you want an
|
||||||
|
* absolute path but don't mind links, use absolute_path.
|
||||||
|
*
|
||||||
|
* If path is our buffer, then return path, as it's already what the
|
||||||
|
* user wants.
|
||||||
|
*/
|
||||||
|
const char *real_path(const char *path)
|
||||||
{
|
{
|
||||||
static char bufs[2][PATH_MAX + 1], *buf = bufs[0], *next_buf = bufs[1];
|
static char bufs[2][PATH_MAX + 1], *buf = bufs[0], *next_buf = bufs[1];
|
||||||
char cwd[1024] = "";
|
char cwd[1024] = "";
|
||||||
@ -104,7 +111,14 @@ static const char *get_pwd_cwd(void)
|
|||||||
return cwd;
|
return cwd;
|
||||||
}
|
}
|
||||||
|
|
||||||
const char *make_nonrelative_path(const char *path)
|
/*
|
||||||
|
* Use this to get an absolute path from a relative one. If you want
|
||||||
|
* to resolve links, you should use real_path.
|
||||||
|
*
|
||||||
|
* If the path is already absolute, then return path. As the user is
|
||||||
|
* never meant to free the return value, we're safe.
|
||||||
|
*/
|
||||||
|
const char *absolute_path(const char *path)
|
||||||
{
|
{
|
||||||
static char buf[PATH_MAX + 1];
|
static char buf[PATH_MAX + 1];
|
||||||
|
|
||||||
|
@ -100,7 +100,7 @@ static char *get_repo_path(const char *repo, int *is_bundle)
|
|||||||
path = mkpath("%s%s", repo, suffix[i]);
|
path = mkpath("%s%s", repo, suffix[i]);
|
||||||
if (is_directory(path)) {
|
if (is_directory(path)) {
|
||||||
*is_bundle = 0;
|
*is_bundle = 0;
|
||||||
return xstrdup(make_nonrelative_path(path));
|
return xstrdup(absolute_path(path));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -109,7 +109,7 @@ static char *get_repo_path(const char *repo, int *is_bundle)
|
|||||||
path = mkpath("%s%s", repo, bundle_suffix[i]);
|
path = mkpath("%s%s", repo, bundle_suffix[i]);
|
||||||
if (!stat(path, &st) && S_ISREG(st.st_mode)) {
|
if (!stat(path, &st) && S_ISREG(st.st_mode)) {
|
||||||
*is_bundle = 1;
|
*is_bundle = 1;
|
||||||
return xstrdup(make_nonrelative_path(path));
|
return xstrdup(absolute_path(path));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -203,7 +203,7 @@ static void setup_reference(const char *repo)
|
|||||||
struct transport *transport;
|
struct transport *transport;
|
||||||
const struct ref *extra;
|
const struct ref *extra;
|
||||||
|
|
||||||
ref_git = make_absolute_path(option_reference);
|
ref_git = real_path(option_reference);
|
||||||
|
|
||||||
if (is_directory(mkpath("%s/.git/objects", ref_git)))
|
if (is_directory(mkpath("%s/.git/objects", ref_git)))
|
||||||
ref_git = mkpath("%s/.git", ref_git);
|
ref_git = mkpath("%s/.git", ref_git);
|
||||||
@ -411,7 +411,7 @@ int cmd_clone(int argc, const char **argv, const char *prefix)
|
|||||||
|
|
||||||
path = get_repo_path(repo_name, &is_bundle);
|
path = get_repo_path(repo_name, &is_bundle);
|
||||||
if (path)
|
if (path)
|
||||||
repo = xstrdup(make_nonrelative_path(repo_name));
|
repo = xstrdup(absolute_path(repo_name));
|
||||||
else if (!strchr(repo_name, ':'))
|
else if (!strchr(repo_name, ':'))
|
||||||
die("repository '%s' does not exist", repo_name);
|
die("repository '%s' does not exist", repo_name);
|
||||||
else
|
else
|
||||||
@ -466,7 +466,7 @@ int cmd_clone(int argc, const char **argv, const char *prefix)
|
|||||||
|
|
||||||
if (safe_create_leading_directories_const(git_dir) < 0)
|
if (safe_create_leading_directories_const(git_dir) < 0)
|
||||||
die("could not create leading directories of '%s'", git_dir);
|
die("could not create leading directories of '%s'", git_dir);
|
||||||
set_git_dir(make_absolute_path(git_dir));
|
set_git_dir(real_path(git_dir));
|
||||||
|
|
||||||
if (0 <= option_verbosity)
|
if (0 <= option_verbosity)
|
||||||
printf("Cloning into %s%s...\n",
|
printf("Cloning into %s%s...\n",
|
||||||
|
@ -501,7 +501,7 @@ int cmd_init_db(int argc, const char **argv, const char *prefix)
|
|||||||
const char *git_dir_parent = strrchr(git_dir, '/');
|
const char *git_dir_parent = strrchr(git_dir, '/');
|
||||||
if (git_dir_parent) {
|
if (git_dir_parent) {
|
||||||
char *rel = xstrndup(git_dir, git_dir_parent - git_dir);
|
char *rel = xstrndup(git_dir, git_dir_parent - git_dir);
|
||||||
git_work_tree_cfg = xstrdup(make_absolute_path(rel));
|
git_work_tree_cfg = xstrdup(real_path(rel));
|
||||||
free(rel);
|
free(rel);
|
||||||
}
|
}
|
||||||
if (!git_work_tree_cfg) {
|
if (!git_work_tree_cfg) {
|
||||||
@ -510,7 +510,7 @@ int cmd_init_db(int argc, const char **argv, const char *prefix)
|
|||||||
die_errno ("Cannot access current working directory");
|
die_errno ("Cannot access current working directory");
|
||||||
}
|
}
|
||||||
if (work_tree)
|
if (work_tree)
|
||||||
set_git_work_tree(make_absolute_path(work_tree));
|
set_git_work_tree(real_path(work_tree));
|
||||||
else
|
else
|
||||||
set_git_work_tree(git_work_tree_cfg);
|
set_git_work_tree(git_work_tree_cfg);
|
||||||
if (access(get_git_work_tree(), X_OK))
|
if (access(get_git_work_tree(), X_OK))
|
||||||
@ -519,10 +519,10 @@ int cmd_init_db(int argc, const char **argv, const char *prefix)
|
|||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
if (work_tree)
|
if (work_tree)
|
||||||
set_git_work_tree(make_absolute_path(work_tree));
|
set_git_work_tree(real_path(work_tree));
|
||||||
}
|
}
|
||||||
|
|
||||||
set_git_dir(make_absolute_path(git_dir));
|
set_git_dir(real_path(git_dir));
|
||||||
|
|
||||||
return init_db(template_dir, flags);
|
return init_db(template_dir, flags);
|
||||||
}
|
}
|
||||||
|
@ -740,7 +740,7 @@ static int add_refs_from_alternate(struct alternate_object_database *e, void *un
|
|||||||
const struct ref *extra;
|
const struct ref *extra;
|
||||||
|
|
||||||
e->name[-1] = '\0';
|
e->name[-1] = '\0';
|
||||||
other = xstrdup(make_absolute_path(e->base));
|
other = xstrdup(real_path(e->base));
|
||||||
e->name[-1] = '/';
|
e->name[-1] = '/';
|
||||||
len = strlen(other);
|
len = strlen(other);
|
||||||
|
|
||||||
|
6
cache.h
6
cache.h
@ -731,9 +731,9 @@ static inline int is_absolute_path(const char *path)
|
|||||||
return path[0] == '/' || has_dos_drive_prefix(path);
|
return path[0] == '/' || has_dos_drive_prefix(path);
|
||||||
}
|
}
|
||||||
int is_directory(const char *);
|
int is_directory(const char *);
|
||||||
const char *make_absolute_path(const char *path);
|
const char *real_path(const char *path);
|
||||||
const char *make_nonrelative_path(const char *path);
|
const char *absolute_path(const char *path);
|
||||||
const char *make_relative_path(const char *abs, const char *base);
|
const char *relative_path(const char *abs, const char *base);
|
||||||
int normalize_path_copy(char *dst, const char *src);
|
int normalize_path_copy(char *dst, const char *src);
|
||||||
int longest_ancestor_length(const char *path, const char *prefix_list);
|
int longest_ancestor_length(const char *path, const char *prefix_list);
|
||||||
char *strip_path_suffix(const char *path, const char *suffix);
|
char *strip_path_suffix(const char *path, const char *suffix);
|
||||||
|
2
dir.c
2
dir.c
@ -1128,7 +1128,7 @@ char *get_relative_cwd(char *buffer, int size, const char *dir)
|
|||||||
die_errno("can't find the current directory");
|
die_errno("can't find the current directory");
|
||||||
|
|
||||||
if (!is_absolute_path(dir))
|
if (!is_absolute_path(dir))
|
||||||
dir = make_absolute_path(dir);
|
dir = real_path(dir);
|
||||||
|
|
||||||
while (*dir && *dir == *cwd) {
|
while (*dir && *dir == *cwd) {
|
||||||
dir++;
|
dir++;
|
||||||
|
@ -139,7 +139,7 @@ static int git_work_tree_initialized;
|
|||||||
void set_git_work_tree(const char *new_work_tree)
|
void set_git_work_tree(const char *new_work_tree)
|
||||||
{
|
{
|
||||||
if (git_work_tree_initialized) {
|
if (git_work_tree_initialized) {
|
||||||
new_work_tree = make_absolute_path(new_work_tree);
|
new_work_tree = real_path(new_work_tree);
|
||||||
if (strcmp(new_work_tree, work_tree))
|
if (strcmp(new_work_tree, work_tree))
|
||||||
die("internal error: work tree has already been set\n"
|
die("internal error: work tree has already been set\n"
|
||||||
"Current worktree: %s\nNew worktree: %s",
|
"Current worktree: %s\nNew worktree: %s",
|
||||||
@ -147,7 +147,7 @@ void set_git_work_tree(const char *new_work_tree)
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
git_work_tree_initialized = 1;
|
git_work_tree_initialized = 1;
|
||||||
work_tree = xstrdup(make_absolute_path(new_work_tree));
|
work_tree = xstrdup(real_path(new_work_tree));
|
||||||
}
|
}
|
||||||
|
|
||||||
const char *get_git_work_tree(void)
|
const char *get_git_work_tree(void)
|
||||||
|
@ -89,7 +89,7 @@ static void add_path(struct strbuf *out, const char *path)
|
|||||||
if (is_absolute_path(path))
|
if (is_absolute_path(path))
|
||||||
strbuf_addstr(out, path);
|
strbuf_addstr(out, path);
|
||||||
else
|
else
|
||||||
strbuf_addstr(out, make_nonrelative_path(path));
|
strbuf_addstr(out, absolute_path(path));
|
||||||
|
|
||||||
strbuf_addch(out, PATH_SEP);
|
strbuf_addch(out, PATH_SEP);
|
||||||
}
|
}
|
||||||
|
@ -164,10 +164,10 @@ static char *unable_to_lock_message(const char *path, int err)
|
|||||||
"If no other git process is currently running, this probably means a\n"
|
"If no other git process is currently running, this probably means a\n"
|
||||||
"git process crashed in this repository earlier. Make sure no other git\n"
|
"git process crashed in this repository earlier. Make sure no other git\n"
|
||||||
"process is running and remove the file manually to continue.",
|
"process is running and remove the file manually to continue.",
|
||||||
make_nonrelative_path(path), strerror(err));
|
absolute_path(path), strerror(err));
|
||||||
} else
|
} else
|
||||||
strbuf_addf(&buf, "Unable to create '%s.lock': %s",
|
strbuf_addf(&buf, "Unable to create '%s.lock': %s",
|
||||||
make_nonrelative_path(path), strerror(err));
|
absolute_path(path), strerror(err));
|
||||||
return strbuf_detach(&buf, NULL);
|
return strbuf_detach(&buf, NULL);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
2
path.c
2
path.c
@ -397,7 +397,7 @@ int set_shared_perm(const char *path, int mode)
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
const char *make_relative_path(const char *abs, const char *base)
|
const char *relative_path(const char *abs, const char *base)
|
||||||
{
|
{
|
||||||
static char buf[PATH_MAX + 1];
|
static char buf[PATH_MAX + 1];
|
||||||
int i = 0, j = 0;
|
int i = 0, j = 0;
|
||||||
|
14
setup.c
14
setup.c
@ -9,7 +9,7 @@ char *prefix_path(const char *prefix, int len, const char *path)
|
|||||||
const char *orig = path;
|
const char *orig = path;
|
||||||
char *sanitized;
|
char *sanitized;
|
||||||
if (is_absolute_path(orig)) {
|
if (is_absolute_path(orig)) {
|
||||||
const char *temp = make_absolute_path(path);
|
const char *temp = real_path(path);
|
||||||
sanitized = xmalloc(len + strlen(temp) + 1);
|
sanitized = xmalloc(len + strlen(temp) + 1);
|
||||||
strcpy(sanitized, temp);
|
strcpy(sanitized, temp);
|
||||||
} else {
|
} else {
|
||||||
@ -221,7 +221,7 @@ void setup_work_tree(void)
|
|||||||
work_tree = get_git_work_tree();
|
work_tree = get_git_work_tree();
|
||||||
git_dir = get_git_dir();
|
git_dir = get_git_dir();
|
||||||
if (!is_absolute_path(git_dir))
|
if (!is_absolute_path(git_dir))
|
||||||
git_dir = make_absolute_path(git_dir);
|
git_dir = real_path(get_git_dir());
|
||||||
if (!work_tree || chdir(work_tree))
|
if (!work_tree || chdir(work_tree))
|
||||||
die("This operation must be run in a work tree");
|
die("This operation must be run in a work tree");
|
||||||
|
|
||||||
@ -232,7 +232,7 @@ void setup_work_tree(void)
|
|||||||
if (getenv(GIT_WORK_TREE_ENVIRONMENT))
|
if (getenv(GIT_WORK_TREE_ENVIRONMENT))
|
||||||
setenv(GIT_WORK_TREE_ENVIRONMENT, ".", 1);
|
setenv(GIT_WORK_TREE_ENVIRONMENT, ".", 1);
|
||||||
|
|
||||||
set_git_dir(make_relative_path(git_dir, work_tree));
|
set_git_dir(relative_path(git_dir, work_tree));
|
||||||
initialized = 1;
|
initialized = 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -312,7 +312,7 @@ const char *read_gitfile_gently(const char *path)
|
|||||||
|
|
||||||
if (!is_git_directory(dir))
|
if (!is_git_directory(dir))
|
||||||
die("Not a git repository: %s", dir);
|
die("Not a git repository: %s", dir);
|
||||||
path = make_absolute_path(dir);
|
path = real_path(dir);
|
||||||
|
|
||||||
free(buf);
|
free(buf);
|
||||||
return path;
|
return path;
|
||||||
@ -392,7 +392,7 @@ static const char *setup_explicit_git_dir(const char *gitdirenv,
|
|||||||
|
|
||||||
if (!prefixcmp(cwd, worktree) &&
|
if (!prefixcmp(cwd, worktree) &&
|
||||||
cwd[strlen(worktree)] == '/') { /* cwd inside worktree */
|
cwd[strlen(worktree)] == '/') { /* cwd inside worktree */
|
||||||
set_git_dir(make_absolute_path(gitdirenv));
|
set_git_dir(real_path(gitdirenv));
|
||||||
if (chdir(worktree))
|
if (chdir(worktree))
|
||||||
die_errno("Could not chdir to '%s'", worktree);
|
die_errno("Could not chdir to '%s'", worktree);
|
||||||
cwd[len++] = '/';
|
cwd[len++] = '/';
|
||||||
@ -417,7 +417,7 @@ static const char *setup_discovered_git_dir(const char *gitdir,
|
|||||||
/* --work-tree is set without --git-dir; use discovered one */
|
/* --work-tree is set without --git-dir; use discovered one */
|
||||||
if (getenv(GIT_WORK_TREE_ENVIRONMENT) || git_work_tree_cfg) {
|
if (getenv(GIT_WORK_TREE_ENVIRONMENT) || git_work_tree_cfg) {
|
||||||
if (offset != len && !is_absolute_path(gitdir))
|
if (offset != len && !is_absolute_path(gitdir))
|
||||||
gitdir = xstrdup(make_absolute_path(gitdir));
|
gitdir = xstrdup(real_path(gitdir));
|
||||||
if (chdir(cwd))
|
if (chdir(cwd))
|
||||||
die_errno("Could not come back to cwd");
|
die_errno("Could not come back to cwd");
|
||||||
return setup_explicit_git_dir(gitdir, cwd, len, nongit_ok);
|
return setup_explicit_git_dir(gitdir, cwd, len, nongit_ok);
|
||||||
@ -425,7 +425,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) */
|
/* #16.2, #17.2, #20.2, #21.2, #24, #25, #28, #29 (see t1510) */
|
||||||
if (is_bare_repository_cfg > 0) {
|
if (is_bare_repository_cfg > 0) {
|
||||||
set_git_dir(offset == len ? gitdir : make_absolute_path(gitdir));
|
set_git_dir(offset == len ? gitdir : real_path(gitdir));
|
||||||
if (chdir(cwd))
|
if (chdir(cwd))
|
||||||
die_errno("Could not come back to cwd");
|
die_errno("Could not come back to cwd");
|
||||||
return NULL;
|
return NULL;
|
||||||
|
@ -435,7 +435,7 @@ test_expect_success 'update-index D/F conflict' '
|
|||||||
test $numpath0 = 1
|
test $numpath0 = 1
|
||||||
'
|
'
|
||||||
|
|
||||||
test_expect_success SYMLINKS 'absolute path works as expected' '
|
test_expect_success SYMLINKS 'real path works as expected' '
|
||||||
mkdir first &&
|
mkdir first &&
|
||||||
ln -s ../.git first/.git &&
|
ln -s ../.git first/.git &&
|
||||||
mkdir second &&
|
mkdir second &&
|
||||||
@ -443,14 +443,14 @@ test_expect_success SYMLINKS 'absolute path works as expected' '
|
|||||||
mkdir third &&
|
mkdir third &&
|
||||||
dir="$(cd .git; pwd -P)" &&
|
dir="$(cd .git; pwd -P)" &&
|
||||||
dir2=third/../second/other/.git &&
|
dir2=third/../second/other/.git &&
|
||||||
test "$dir" = "$(test-path-utils make_absolute_path $dir2)" &&
|
test "$dir" = "$(test-path-utils real_path $dir2)" &&
|
||||||
file="$dir"/index &&
|
file="$dir"/index &&
|
||||||
test "$file" = "$(test-path-utils make_absolute_path $dir2/index)" &&
|
test "$file" = "$(test-path-utils real_path $dir2/index)" &&
|
||||||
basename=blub &&
|
basename=blub &&
|
||||||
test "$dir/$basename" = "$(cd .git && test-path-utils make_absolute_path "$basename")" &&
|
test "$dir/$basename" = "$(cd .git && test-path-utils real_path "$basename")" &&
|
||||||
ln -s ../first/file .git/syml &&
|
ln -s ../first/file .git/syml &&
|
||||||
sym="$(cd first; pwd -P)"/file &&
|
sym="$(cd first; pwd -P)"/file &&
|
||||||
test "$sym" = "$(test-path-utils make_absolute_path "$dir2/syml")"
|
test "$sym" = "$(test-path-utils real_path "$dir2/syml")"
|
||||||
'
|
'
|
||||||
|
|
||||||
test_expect_success 'very long name in the index handled sanely' '
|
test_expect_success 'very long name in the index handled sanely' '
|
||||||
|
@ -11,9 +11,9 @@ int main(int argc, char **argv)
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (argc >= 2 && !strcmp(argv[1], "make_absolute_path")) {
|
if (argc >= 2 && !strcmp(argv[1], "real_path")) {
|
||||||
while (argc > 2) {
|
while (argc > 2) {
|
||||||
puts(make_absolute_path(argv[2]));
|
puts(real_path(argv[2]));
|
||||||
argc--;
|
argc--;
|
||||||
argv++;
|
argv++;
|
||||||
}
|
}
|
||||||
|
@ -209,7 +209,7 @@ int xmkstemp(char *template)
|
|||||||
if (!template[0])
|
if (!template[0])
|
||||||
template = origtemplate;
|
template = origtemplate;
|
||||||
|
|
||||||
nonrelative_template = make_nonrelative_path(template);
|
nonrelative_template = absolute_path(template);
|
||||||
errno = saved_errno;
|
errno = saved_errno;
|
||||||
die_errno("Unable to create temporary file '%s'",
|
die_errno("Unable to create temporary file '%s'",
|
||||||
nonrelative_template);
|
nonrelative_template);
|
||||||
@ -344,7 +344,7 @@ int xmkstemp_mode(char *template, int mode)
|
|||||||
if (!template[0])
|
if (!template[0])
|
||||||
template = origtemplate;
|
template = origtemplate;
|
||||||
|
|
||||||
nonrelative_template = make_nonrelative_path(template);
|
nonrelative_template = absolute_path(template);
|
||||||
errno = saved_errno;
|
errno = saved_errno;
|
||||||
die_errno("Unable to create temporary file '%s'",
|
die_errno("Unable to create temporary file '%s'",
|
||||||
nonrelative_template);
|
nonrelative_template);
|
||||||
|
Loading…
Reference in New Issue
Block a user