summaryrefslogtreecommitdiff
path: root/refs
diff options
context:
space:
mode:
authorNguyễn Thái Ngọc Duy <pclouds@gmail.com>2018-09-29 19:10:23 (GMT)
committerJunio C Hamano <gitster@pobox.com>2018-10-06 23:21:18 (GMT)
commit8aff1a9ca5a266020fe5b1bd8c54228581e34530 (patch)
treec787fa8cda7dfe83b7439d691ddd25204afd4ae9 /refs
parent5c79f74f0514a29fe182b0a442406105fb6f1660 (diff)
downloadgit-8aff1a9ca5a266020fe5b1bd8c54228581e34530.zip
git-8aff1a9ca5a266020fe5b1bd8c54228581e34530.tar.gz
git-8aff1a9ca5a266020fe5b1bd8c54228581e34530.tar.bz2
Add a place for (not) sharing stuff between worktrees
When multiple worktrees are used, we need rules to determine if something belongs to one worktree or all of them. Instead of keeping adding rules when new stuff comes (*), have a generic rule: - Inside $GIT_DIR, which is per-worktree by default, add $GIT_DIR/common which is always shared. New features that want to share stuff should put stuff under this directory. - Inside refs/, which is shared by default except refs/bisect, add refs/worktree/ which is per-worktree. We may eventually move refs/bisect to this new location and remove the exception in refs code. (*) And it may also include stuff from external commands which will have no way to modify common/per-worktree rules. Signed-off-by: Nguyễn Thái Ngọc Duy <pclouds@gmail.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>
Diffstat (limited to 'refs')
-rw-r--r--refs/files-backend.c14
1 files changed, 11 insertions, 3 deletions
diff --git a/refs/files-backend.c b/refs/files-backend.c
index 16ef932..2dd77f9 100644
--- a/refs/files-backend.c
+++ b/refs/files-backend.c
@@ -269,9 +269,9 @@ static void loose_fill_ref_dir(struct ref_store *ref_store,
closedir(d);
/*
- * Manually add refs/bisect, which, being per-worktree, might
- * not appear in the directory listing for refs/ in the main
- * repo.
+ * Manually add refs/bisect and refs/worktree, which, being
+ * per-worktree, might not appear in the directory listing for
+ * refs/ in the main repo.
*/
if (!strcmp(dirname, "refs/")) {
int pos = search_ref_dir(dir, "refs/bisect/", 12);
@@ -281,6 +281,14 @@ static void loose_fill_ref_dir(struct ref_store *ref_store,
dir->cache, "refs/bisect/", 12, 1);
add_entry_to_dir(dir, child_entry);
}
+
+ pos = search_ref_dir(dir, "refs/worktree/", 11);
+
+ if (pos < 0) {
+ struct ref_entry *child_entry = create_dir_entry(
+ dir->cache, "refs/worktree/", 11, 1);
+ add_entry_to_dir(dir, child_entry);
+ }
}
}