diff options
author | Timofey Kirillov <timofey.kirillov@flant.com> | 2019-03-28 20:32:01 +0000 |
---|---|---|
committer | Timofey Kirillov <timofey.kirillov@flant.com> | 2020-06-15 17:16:42 +0300 |
commit | 63c42e530e9ffdf070f74a2674aa1a1fc24703a8 (patch) | |
tree | 41daf4cb42a97aa209f198e0b5299e048957d80f /go.mod | |
parent | 5cafe4097c72c0673255fdf8cac44fc513c6042c (diff) | |
download | go-git-63c42e530e9ffdf070f74a2674aa1a1fc24703a8.tar.gz |
Support `.git/commondir` repository layout
Git creates `.git/commondir` when there are custom worktrees (see "git worktree add" related commands).
`.git/commondir` in such case contains a link to another dot-git repository tree, which could contain some folders like:
- objects;
- config;
- refs;
- etc.
In this PR a new dotgit.RepositoryFilesystem struct is defined, which is billy.Filesystem interface compatible object-wrapper, that can handle commondir and dispatch all operations to the correct file path.
`git.PlainOpen` remain unchanged, but `git.PlainOpenWithOptions` has a new option: `PlainOpenOptions.EnableDotGitCommonDir=true|false` (which is false by default). When `EnableDotGitCommonDir=true` repository-open procedure will read `.git/commondir` (if it exists) and then create dotgit.RepositoryFilesystem object initialized with 2 filesystems. This object then passed into storage and then into dotgit.DotGit as `billy.Filesystem` interface. This object will catch all filesystem operations and dispatch to the correct repository-filesystem (dot-git or common-dot-git) according to the rules described in the doc: https://git-scm.com/docs/gitrepository-layout#Documentation/gitrepository-layout.txt. EnableDotGitCommonDir option will only work with the filesystem-backed storage.
Also worktree_test.go has been adopted from an older, already existing existing PR: https://github.com/src-d/go-git/pull/1098. This PR needs new fixtures added in the following PR: https://github.com/go-git/go-git-fixtures/pull/1.
Diffstat (limited to 'go.mod')
-rw-r--r-- | go.mod | 2 |
1 files changed, 1 insertions, 1 deletions
@@ -8,7 +8,7 @@ require ( github.com/gliderlabs/ssh v0.2.2 github.com/go-git/gcfg v1.5.0 github.com/go-git/go-billy/v5 v5.0.0 - github.com/go-git/go-git-fixtures/v4 v4.0.1 + github.com/go-git/go-git-fixtures/v4 v4.0.2-0.20200613231340-f56387b50c12 github.com/google/go-cmp v0.3.0 github.com/imdario/mergo v0.3.9 github.com/jbenet/go-context v0.0.0-20150711004518-d14ea06fba99 |