summaryrefslogtreecommitdiff
path: root/src/attr.c
diff options
context:
space:
mode:
authorRussell Belfer <rb@github.com>2014-09-15 21:59:23 -0700
committerRussell Belfer <rb@github.com>2014-09-15 21:59:23 -0700
commit1fbeb2f04c9a81a0fcacee5042d9e12a1e90052b (patch)
treee988bdf1b2a488efd9310b1d50abc2b512f3df80 /src/attr.c
parent910cd2daa6af0f3af97d283eb4c6a0452688d067 (diff)
downloadlibgit2-1fbeb2f04c9a81a0fcacee5042d9e12a1e90052b.tar.gz
Fix attribute lookup in index for bare reposrb/attr-with-bare
When using a bare repo with an index, libgit2 attempts to read files from the index. It caches those files based on the path to the file, specifically the path to the directory that contains the file. If there is no working directory, we use `git_path_dirname_r` to get the path to the containing directory. However, for the `.gitattributes` file in the root of the repository, this ends up normalizing the containing path to `"."` instead of the empty string and the lookup the `.gitattributes` data fails. This adds a test of attribute lookups on bare repos and also fixes the problem by simply rewriting `"."` to be `""`.
Diffstat (limited to 'src/attr.c')
-rw-r--r--src/attr.c2
1 files changed, 2 insertions, 0 deletions
diff --git a/src/attr.c b/src/attr.c
index 05b0c1b3c..1decb5ba8 100644
--- a/src/attr.c
+++ b/src/attr.c
@@ -426,6 +426,8 @@ static int collect_attr_files(
error = git_path_dirname_r(&dir, path);
if (error < 0)
goto cleanup;
+ if (dir.size == 1 && dir.ptr[0] == '.')
+ git_buf_clear(&dir);
/* in precendence order highest to lowest:
* - $GIT_DIR/info/attributes