aboutsummaryrefslogtreecommitdiffstats
path: root/storage/filesystem/dotgit/repository_filesystem_test.go
diff options
context:
space:
mode:
authorMáximo Cuadros <mcuadros@gmail.com>2020-06-16 01:45:44 +0200
committerGitHub <noreply@github.com>2020-06-16 01:45:44 +0200
commit16918a5be9a2076bbb686b2580da1988d557da6d (patch)
tree41daf4cb42a97aa209f198e0b5299e048957d80f /storage/filesystem/dotgit/repository_filesystem_test.go
parent5cafe4097c72c0673255fdf8cac44fc513c6042c (diff)
parent63c42e530e9ffdf070f74a2674aa1a1fc24703a8 (diff)
downloadgo-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.go124
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)
+}