diff options
author | Carlos Martín Nieto <cmn@dwim.me> | 2016-04-01 14:33:42 +0200 |
---|---|---|
committer | Carlos Martín Nieto <carlosmn@github.com> | 2016-04-02 21:32:28 +0200 |
commit | d364dc8b39095061ba930e713335d4398cc4d977 (patch) | |
tree | 518081177e5e6913a33b531855390c14465617dd /src/ignore.c | |
parent | 36fc25572ca042372b1a58f07bc721b2b827e8be (diff) | |
download | libgit2-d364dc8b39095061ba930e713335d4398cc4d977.tar.gz |
ignore: don't use realpath to canonicalize pathcmn/ignore-symlink
If we're looking for a symlink, realpath will give us the resolved path,
which is not what we're after, but a canonicalized version of the path
the user asked for.
Diffstat (limited to 'src/ignore.c')
-rw-r--r-- | src/ignore.c | 14 |
1 files changed, 11 insertions, 3 deletions
diff --git a/src/ignore.c b/src/ignore.c index aedc1401e..ac2af4f58 100644 --- a/src/ignore.c +++ b/src/ignore.c @@ -263,10 +263,18 @@ int git_ignore__for_path( goto cleanup; /* given a unrooted path in a non-bare repo, resolve it */ - if (workdir && git_path_root(path) < 0) - error = git_path_find_dir(&ignores->dir, path, workdir); - else + if (workdir && git_path_root(path) < 0) { + git_buf local = GIT_BUF_INIT; + + if ((error = git_path_dirname_r(&local, path)) < 0 || + (error = git_path_resolve_relative(&local, 0)) < 0 || + (error = git_path_to_dir(&local)) < 0 || + (error = git_buf_joinpath(&ignores->dir, workdir, local.ptr)) < 0) + {;} /* Nothing, we just want to stop on the first error */ + git_buf_free(&local); + } else { error = git_buf_joinpath(&ignores->dir, path, ""); + } if (error < 0) goto cleanup; |