summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/attr.c2
-rw-r--r--src/repository.c26
2 files changed, 28 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
diff --git a/src/repository.c b/src/repository.c
index d86d8905a..39a4f02b9 100644
--- a/src/repository.c
+++ b/src/repository.c
@@ -1681,6 +1681,32 @@ int git_repository_is_bare(git_repository *repo)
return repo->is_bare;
}
+int git_repository_set_bare(git_repository *repo)
+{
+ int error;
+ git_config *config;
+
+ assert(repo);
+
+ if (repo->is_bare)
+ return 0;
+
+ if ((error = git_repository_config__weakptr(&config, repo)) < 0 ||
+ (error = git_config_set_bool(config, "core.bare", false)) < 0)
+ goto done;
+
+ error = git_config__update_entry(config, "core.worktree", NULL, true, true);
+
+ git__free(repo->workdir);
+ repo->workdir = NULL;
+
+ repo->is_bare = 1;
+
+done:
+ git_config_free(config);
+ return error;
+}
+
int git_repository_head_tree(git_tree **tree, git_repository *repo)
{
git_reference *head;