diff options
author | Máximo Cuadros <mcuadros@gmail.com> | 2020-06-16 01:45:44 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2020-06-16 01:45:44 +0200 |
commit | 16918a5be9a2076bbb686b2580da1988d557da6d (patch) | |
tree | 41daf4cb42a97aa209f198e0b5299e048957d80f /storage/filesystem/dotgit/repository_filesystem_test.go | |
parent | 5cafe4097c72c0673255fdf8cac44fc513c6042c (diff) | |
parent | 63c42e530e9ffdf070f74a2674aa1a1fc24703a8 (diff) | |
download | go-git-16918a5be9a2076bbb686b2580da1988d557da6d.tar.gz |
Merge pull request #88 from distorhead/cherryPickCommonDirSupport
storage: filesystem, support .git/commondir repository layout
Diffstat (limited to 'storage/filesystem/dotgit/repository_filesystem_test.go')
-rw-r--r-- | storage/filesystem/dotgit/repository_filesystem_test.go | 124 |
1 files changed, 124 insertions, 0 deletions
diff --git a/storage/filesystem/dotgit/repository_filesystem_test.go b/storage/filesystem/dotgit/repository_filesystem_test.go new file mode 100644 index 0000000..880ec0d --- /dev/null +++ b/storage/filesystem/dotgit/repository_filesystem_test.go @@ -0,0 +1,124 @@ +package dotgit + +import ( + "io/ioutil" + "log" + "os" + + "github.com/go-git/go-billy/v5/osfs" + + . "gopkg.in/check.v1" +) + +func (s *SuiteDotGit) TestRepositoryFilesystem(c *C) { + dir, err := ioutil.TempDir("", "repository_filesystem") + if err != nil { + log.Fatal(err) + } + defer os.RemoveAll(dir) + + fs := osfs.New(dir) + + err = fs.MkdirAll("dotGit", 0777) + c.Assert(err, IsNil) + dotGitFs, err := fs.Chroot("dotGit") + c.Assert(err, IsNil) + + err = fs.MkdirAll("commonDotGit", 0777) + c.Assert(err, IsNil) + commonDotGitFs, err := fs.Chroot("commonDotGit") + c.Assert(err, IsNil) + + repositoryFs := NewRepositoryFilesystem(dotGitFs, commonDotGitFs) + c.Assert(repositoryFs.Root(), Equals, dotGitFs.Root()) + + somedir, err := repositoryFs.Chroot("somedir") + c.Assert(err, IsNil) + c.Assert(somedir.Root(), Equals, repositoryFs.Join(dotGitFs.Root(), "somedir")) + + _, err = repositoryFs.Create("somefile") + c.Assert(err, IsNil) + + _, err = repositoryFs.Stat("somefile") + c.Assert(err, IsNil) + + file, err := repositoryFs.Open("somefile") + c.Assert(err, IsNil) + err = file.Close() + c.Assert(err, IsNil) + + file, err = repositoryFs.OpenFile("somefile", os.O_RDONLY, 0666) + c.Assert(err, IsNil) + err = file.Close() + c.Assert(err, IsNil) + + file, err = repositoryFs.Create("somefile2") + c.Assert(err, IsNil) + err = file.Close() + c.Assert(err, IsNil) + _, err = repositoryFs.Stat("somefile2") + c.Assert(err, IsNil) + err = repositoryFs.Rename("somefile2", "newfile") + c.Assert(err, IsNil) + + tempDir, err := repositoryFs.TempFile("tmp", "myprefix") + c.Assert(err, IsNil) + c.Assert(repositoryFs.Join(repositoryFs.Root(), "tmp", tempDir.Name()), Equals, repositoryFs.Join(dotGitFs.Root(), "tmp", tempDir.Name())) + + err = repositoryFs.Symlink("newfile", "somelink") + c.Assert(err, IsNil) + + _, err = repositoryFs.Lstat("somelink") + c.Assert(err, IsNil) + + link, err := repositoryFs.Readlink("somelink") + c.Assert(err, IsNil) + c.Assert(link, Equals, "newfile") + + err = repositoryFs.Remove("somelink") + c.Assert(err, IsNil) + + _, err = repositoryFs.Stat("somelink") + c.Assert(os.IsNotExist(err), Equals, true) + + dirs := []string{objectsPath, refsPath, packedRefsPath, configPath, branchesPath, hooksPath, infoPath, remotesPath, logsPath, shallowPath, worktreesPath} + for _, dir := range dirs { + err := repositoryFs.MkdirAll(dir, 0777) + c.Assert(err, IsNil) + _, err = commonDotGitFs.Stat(dir) + c.Assert(err, IsNil) + _, err = dotGitFs.Stat(dir) + c.Assert(os.IsNotExist(err), Equals, true) + } + + exceptionsPaths := []string{repositoryFs.Join(logsPath, "HEAD"), repositoryFs.Join(refsPath, "bisect"), repositoryFs.Join(refsPath, "rewritten"), repositoryFs.Join(refsPath, "worktree")} + for _, path := range exceptionsPaths { + _, err := repositoryFs.Create(path) + c.Assert(err, IsNil) + _, err = commonDotGitFs.Stat(path) + c.Assert(os.IsNotExist(err), Equals, true) + _, err = dotGitFs.Stat(path) + c.Assert(err, IsNil) + } + + err = repositoryFs.MkdirAll("refs/heads", 0777) + c.Assert(err, IsNil) + _, err = commonDotGitFs.Stat("refs/heads") + c.Assert(err, IsNil) + _, err = dotGitFs.Stat("refs/heads") + c.Assert(os.IsNotExist(err), Equals, true) + + err = repositoryFs.MkdirAll("objects/pack", 0777) + c.Assert(err, IsNil) + _, err = commonDotGitFs.Stat("objects/pack") + c.Assert(err, IsNil) + _, err = dotGitFs.Stat("objects/pack") + c.Assert(os.IsNotExist(err), Equals, true) + + err = repositoryFs.MkdirAll("a/b/c", 0777) + c.Assert(err, IsNil) + _, err = commonDotGitFs.Stat("a/b/c") + c.Assert(os.IsNotExist(err), Equals, true) + _, err = dotGitFs.Stat("a/b/c") + c.Assert(err, IsNil) +} |