Skip to content
/ git Public
forked from git/git

Commit

Permalink
Name make_*_path functions more accurately
Browse files Browse the repository at this point in the history
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>
  • Loading branch information
carlosmn authored and gitster committed Mar 17, 2011
1 parent a3ca9b0 commit e2a57aa
Show file tree
Hide file tree
Showing 14 changed files with 52 additions and 38 deletions.
18 changes: 16 additions & 2 deletions abspath.c
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,14 @@ int is_directory(const char *path)
/* We allow "recursive" symbolic links. Only within reason, though. */
#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];
char cwd[1024] = "";
Expand Down Expand Up @@ -104,7 +111,14 @@ static const char *get_pwd_cwd(void)
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];

Expand Down
10 changes: 5 additions & 5 deletions builtin/clone.c
Original file line number Diff line number Diff line change
Expand Up @@ -100,7 +100,7 @@ static char *get_repo_path(const char *repo, int *is_bundle)
path = mkpath("%s%s", repo, suffix[i]);
if (is_directory(path)) {
*is_bundle = 0;
return xstrdup(make_nonrelative_path(path));
return xstrdup(absolute_path(path));
}
}

Expand All @@ -109,7 +109,7 @@ static char *get_repo_path(const char *repo, int *is_bundle)
path = mkpath("%s%s", repo, bundle_suffix[i]);
if (!stat(path, &st) && S_ISREG(st.st_mode)) {
*is_bundle = 1;
return xstrdup(make_nonrelative_path(path));
return xstrdup(absolute_path(path));
}
}

Expand Down Expand Up @@ -203,7 +203,7 @@ static void setup_reference(const char *repo)
struct transport *transport;
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)))
ref_git = mkpath("%s/.git", ref_git);
Expand Down Expand Up @@ -411,7 +411,7 @@ int cmd_clone(int argc, const char **argv, const char *prefix)

path = get_repo_path(repo_name, &is_bundle);
if (path)
repo = xstrdup(make_nonrelative_path(repo_name));
repo = xstrdup(absolute_path(repo_name));
else if (!strchr(repo_name, ':'))
die("repository '%s' does not exist", repo_name);
else
Expand Down Expand Up @@ -466,7 +466,7 @@ int cmd_clone(int argc, const char **argv, const char *prefix)

if (safe_create_leading_directories_const(git_dir) < 0)
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)
printf("Cloning into %s%s...\n",
Expand Down
8 changes: 4 additions & 4 deletions builtin/init-db.c
Original file line number Diff line number Diff line change
Expand Up @@ -501,7 +501,7 @@ int cmd_init_db(int argc, const char **argv, const char *prefix)
const char *git_dir_parent = strrchr(git_dir, '/');
if (git_dir_parent) {
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);
}
if (!git_work_tree_cfg) {
Expand All @@ -510,7 +510,7 @@ int cmd_init_db(int argc, const char **argv, const char *prefix)
die_errno ("Cannot access current working directory");
}
if (work_tree)
set_git_work_tree(make_absolute_path(work_tree));
set_git_work_tree(real_path(work_tree));
else
set_git_work_tree(git_work_tree_cfg);
if (access(get_git_work_tree(), X_OK))
Expand All @@ -519,10 +519,10 @@ int cmd_init_db(int argc, const char **argv, const char *prefix)
}
else {
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);
}
2 changes: 1 addition & 1 deletion builtin/receive-pack.c
Original file line number Diff line number Diff line change
Expand Up @@ -740,7 +740,7 @@ static int add_refs_from_alternate(struct alternate_object_database *e, void *un
const struct ref *extra;

e->name[-1] = '\0';
other = xstrdup(make_absolute_path(e->base));
other = xstrdup(real_path(e->base));
e->name[-1] = '/';
len = strlen(other);

Expand Down
6 changes: 3 additions & 3 deletions cache.h
Original file line number Diff line number Diff line change
Expand Up @@ -731,9 +731,9 @@ static inline int is_absolute_path(const char *path)
return path[0] == '/' || has_dos_drive_prefix(path);
}
int is_directory(const char *);
const char *make_absolute_path(const char *path);
const char *make_nonrelative_path(const char *path);
const char *make_relative_path(const char *abs, const char *base);
const char *real_path(const char *path);
const char *absolute_path(const char *path);
const char *relative_path(const char *abs, const char *base);
int normalize_path_copy(char *dst, const char *src);
int longest_ancestor_length(const char *path, const char *prefix_list);
char *strip_path_suffix(const char *path, const char *suffix);
Expand Down
2 changes: 1 addition & 1 deletion dir.c
Original file line number Diff line number Diff line change
Expand Up @@ -1128,7 +1128,7 @@ char *get_relative_cwd(char *buffer, int size, const char *dir)
die_errno("can't find the current directory");

if (!is_absolute_path(dir))
dir = make_absolute_path(dir);
dir = real_path(dir);

while (*dir && *dir == *cwd) {
dir++;
Expand Down
4 changes: 2 additions & 2 deletions environment.c
Original file line number Diff line number Diff line change
Expand Up @@ -139,15 +139,15 @@ static int git_work_tree_initialized;
void set_git_work_tree(const char *new_work_tree)
{
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))
die("internal error: work tree has already been set\n"
"Current worktree: %s\nNew worktree: %s",
work_tree, new_work_tree);
return;
}
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)
Expand Down
2 changes: 1 addition & 1 deletion exec_cmd.c
Original file line number Diff line number Diff line change
Expand Up @@ -89,7 +89,7 @@ static void add_path(struct strbuf *out, const char *path)
if (is_absolute_path(path))
strbuf_addstr(out, path);
else
strbuf_addstr(out, make_nonrelative_path(path));
strbuf_addstr(out, absolute_path(path));

strbuf_addch(out, PATH_SEP);
}
Expand Down
4 changes: 2 additions & 2 deletions lockfile.c
Original file line number Diff line number Diff line change
Expand Up @@ -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"
"git process crashed in this repository earlier. Make sure no other git\n"
"process is running and remove the file manually to continue.",
make_nonrelative_path(path), strerror(err));
absolute_path(path), strerror(err));
} else
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);
}

Expand Down
2 changes: 1 addition & 1 deletion path.c
Original file line number Diff line number Diff line change
Expand Up @@ -397,7 +397,7 @@ int set_shared_perm(const char *path, int mode)
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];
int i = 0, j = 0;
Expand Down
14 changes: 7 additions & 7 deletions setup.c
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ char *prefix_path(const char *prefix, int len, const char *path)
const char *orig = path;
char *sanitized;
if (is_absolute_path(orig)) {
const char *temp = make_absolute_path(path);
const char *temp = real_path(path);
sanitized = xmalloc(len + strlen(temp) + 1);
strcpy(sanitized, temp);
} else {
Expand Down Expand Up @@ -221,7 +221,7 @@ void setup_work_tree(void)
work_tree = get_git_work_tree();
git_dir = get_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))
die("This operation must be run in a work tree");

Expand All @@ -232,7 +232,7 @@ void setup_work_tree(void)
if (getenv(GIT_WORK_TREE_ENVIRONMENT))
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;
}

Expand Down Expand Up @@ -312,7 +312,7 @@ const char *read_gitfile_gently(const char *path)

if (!is_git_directory(dir))
die("Not a git repository: %s", dir);
path = make_absolute_path(dir);
path = real_path(dir);

free(buf);
return path;
Expand Down Expand Up @@ -392,7 +392,7 @@ static const char *setup_explicit_git_dir(const char *gitdirenv,

if (!prefixcmp(cwd, worktree) &&
cwd[strlen(worktree)] == '/') { /* cwd inside worktree */
set_git_dir(make_absolute_path(gitdirenv));
set_git_dir(real_path(gitdirenv));
if (chdir(worktree))
die_errno("Could not chdir to '%s'", worktree);
cwd[len++] = '/';
Expand All @@ -417,15 +417,15 @@ static const char *setup_discovered_git_dir(const char *gitdir,
/* --work-tree is set without --git-dir; use discovered one */
if (getenv(GIT_WORK_TREE_ENVIRONMENT) || git_work_tree_cfg) {
if (offset != len && !is_absolute_path(gitdir))
gitdir = xstrdup(make_absolute_path(gitdir));
gitdir = xstrdup(real_path(gitdir));
if (chdir(cwd))
die_errno("Could not come back to cwd");
return setup_explicit_git_dir(gitdir, cwd, len, nongit_ok);
}

/* #16.2, #17.2, #20.2, #21.2, #24, #25, #28, #29 (see t1510) */
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))
die_errno("Could not come back to cwd");
return NULL;
Expand Down
10 changes: 5 additions & 5 deletions t/t0000-basic.sh
Original file line number Diff line number Diff line change
Expand Up @@ -435,22 +435,22 @@ test_expect_success 'update-index D/F conflict' '
test $numpath0 = 1
'

test_expect_success SYMLINKS 'absolute path works as expected' '
test_expect_success SYMLINKS 'real path works as expected' '
mkdir first &&
ln -s ../.git first/.git &&
mkdir second &&
ln -s ../first second/other &&
mkdir third &&
dir="$(cd .git; pwd -P)" &&
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 &&
test "$file" = "$(test-path-utils make_absolute_path $dir2/index)" &&
test "$file" = "$(test-path-utils real_path $dir2/index)" &&
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 &&
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' '
Expand Down
4 changes: 2 additions & 2 deletions test-path-utils.c
Original file line number Diff line number Diff line change
Expand Up @@ -11,9 +11,9 @@ int main(int argc, char **argv)
return 0;
}

if (argc >= 2 && !strcmp(argv[1], "make_absolute_path")) {
if (argc >= 2 && !strcmp(argv[1], "real_path")) {
while (argc > 2) {
puts(make_absolute_path(argv[2]));
puts(real_path(argv[2]));
argc--;
argv++;
}
Expand Down
4 changes: 2 additions & 2 deletions wrapper.c
Original file line number Diff line number Diff line change
Expand Up @@ -209,7 +209,7 @@ int xmkstemp(char *template)
if (!template[0])
template = origtemplate;

nonrelative_template = make_nonrelative_path(template);
nonrelative_template = absolute_path(template);
errno = saved_errno;
die_errno("Unable to create temporary file '%s'",
nonrelative_template);
Expand Down Expand Up @@ -344,7 +344,7 @@ int xmkstemp_mode(char *template, int mode)
if (!template[0])
template = origtemplate;

nonrelative_template = make_nonrelative_path(template);
nonrelative_template = absolute_path(template);
errno = saved_errno;
die_errno("Unable to create temporary file '%s'",
nonrelative_template);
Expand Down

0 comments on commit e2a57aa

Please sign in to comment.