@@ -2,13 +2,13 @@ package git_test
22
33import (
44 "embed"
5+ _ "embed"
56 "fmt"
67 "io"
8+ "io/fs"
79 "os"
810 "time"
911
10- _ "embed"
11-
1212 . "github.com/mandelsoft/goutils/testutils"
1313 . "github.com/onsi/ginkgo/v2"
1414 . "github.com/onsi/gomega"
@@ -56,26 +56,39 @@ var _ = Describe("git Blob Access", func() {
5656 repoTestData , err := testData .ReadDir (repoBase )
5757 Expect (err ).ToNot (HaveOccurred ())
5858
59- for _ , entry := range repoTestData {
60- path := filepath .Join (repoBase , entry .Name ())
61- repoPath := filepath .Join (repoDir , entry .Name ())
62-
63- file , err := testData .Open (path )
64- Expect (err ).ToNot (HaveOccurred ())
65-
66- fileInRepo , err := os .OpenFile (
67- repoPath ,
68- os .O_CREATE | os .O_RDWR | os .O_TRUNC ,
69- 0o600 ,
70- )
71- Expect (err ).ToNot (HaveOccurred ())
72-
73- _ , err = io .Copy (fileInRepo , file )
74- Expect (err ).ToNot (HaveOccurred ())
75-
76- Expect (fileInRepo .Close ()).To (Succeed ())
77- Expect (file .Close ()).To (Succeed ())
59+ var process func (base string , entries []fs.DirEntry )
60+ process = func (base string , infos []fs.DirEntry ) {
61+ for _ , entry := range infos {
62+ path := filepath .Join (base , entry .Name ())
63+ repoPath := filepath .Join (repoDir , entry .Name ())
64+
65+ file , err := testData .Open (path )
66+ Expect (err ).ToNot (HaveOccurred ())
67+ fi , err := file .Stat ()
68+ Expect (err ).ToNot (HaveOccurred ())
69+ if fi .IsDir () {
70+ Expect (os .MkdirAll (repoPath , 0o700 )).ToNot (HaveOccurred ())
71+ entries , err := testData .ReadDir (path )
72+ Expect (err ).ToNot (HaveOccurred ())
73+ process (filepath .Join (base , fi .Name ()), entries )
74+ continue
75+ }
76+
77+ fileInRepo , err := os .OpenFile (
78+ repoPath ,
79+ os .O_CREATE | os .O_RDWR | os .O_TRUNC ,
80+ 0o600 ,
81+ )
82+ Expect (err ).ToNot (HaveOccurred ())
83+
84+ _ , err = io .Copy (fileInRepo , file )
85+ Expect (err ).ToNot (HaveOccurred ())
86+
87+ Expect (fileInRepo .Close ()).To (Succeed ())
88+ Expect (file .Close ()).To (Succeed ())
89+ }
7890 }
91+ process (repoBase , repoTestData )
7992
8093 wt , err := repo .Worktree ()
8194 Expect (err ).ToNot (HaveOccurred ())
@@ -100,7 +113,22 @@ var _ = Describe("git Blob Access", func() {
100113 ))
101114 defer Close (b )
102115 files := Must (tarutils .ListArchiveContentFromReader (Must (b .Reader ())))
103- Expect (files ).To (ConsistOf ("file_in_repo" ))
116+ Expect (files ).To (ConsistOf ("file_in_repo" , "file_in_dir_in_repo" ))
117+
118+ data1 , err := b .Reader ()
119+ Expect (err ).ToNot (HaveOccurred ())
120+
121+ By ("testing equivalence of byte streams from equivalent accesses" )
122+ b2 := Must (gitblob .BlobAccess (
123+ gitblob .WithURL (url ),
124+ gitblob .WithLoggingContext (ctx ),
125+ gitblob .WithCachingContext (ctx ),
126+ ))
127+ defer Close (b2 )
128+ data2 , err := b2 .Reader ()
129+ Expect (err ).ToNot (HaveOccurred ())
130+
131+ Expect (data1 ).ToNot (BeIdenticalTo (data2 ))
104132 })
105133 })
106134
@@ -151,4 +179,5 @@ var _ = Describe("git Blob Access", func() {
151179 Expect (files ).To (ConsistOf ("README" , "CONTRIBUTING.md" ))
152180 })
153181 })
182+
154183})
0 commit comments