fork of go-git with some jj specific features
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

at main 163 lines 4.2 kB view raw
1package transactional 2 3import ( 4 "testing" 5 6 "github.com/go-git/go-git/v5/plumbing" 7 "github.com/go-git/go-git/v5/storage/memory" 8 "github.com/stretchr/testify/suite" 9) 10 11func TestReferenceSuite(t *testing.T) { 12 suite.Run(t, new(ReferenceSuite)) 13} 14 15type ReferenceSuite struct { 16 suite.Suite 17} 18 19func (s *ReferenceSuite) TestReference() { 20 base := memory.NewStorage() 21 temporal := memory.NewStorage() 22 23 rs := NewReferenceStorage(base, temporal) 24 25 refA := plumbing.NewReferenceFromStrings("refs/a", "bc9968d75e48de59f0870ffb71f5e160bbbdcf52") 26 refB := plumbing.NewReferenceFromStrings("refs/b", "bc9968d75e48de59f0870ffb71f5e160bbbdcf52") 27 28 err := base.SetReference(refA) 29 s.NoError(err) 30 31 err = rs.SetReference(refB) 32 s.NoError(err) 33 34 _, err = rs.Reference("refs/a") 35 s.NoError(err) 36 37 _, err = rs.Reference("refs/b") 38 s.NoError(err) 39 40 _, err = base.Reference("refs/b") 41 s.ErrorIs(err, plumbing.ErrReferenceNotFound) 42} 43 44func (s *ReferenceSuite) TestRemoveReferenceTemporal() { 45 base := memory.NewStorage() 46 temporal := memory.NewStorage() 47 48 ref := plumbing.NewReferenceFromStrings("refs/a", "bc9968d75e48de59f0870ffb71f5e160bbbdcf52") 49 50 rs := NewReferenceStorage(base, temporal) 51 err := rs.SetReference(ref) 52 s.NoError(err) 53 54 err = rs.RemoveReference("refs/a") 55 s.NoError(err) 56 57 _, err = rs.Reference("refs/a") 58 s.ErrorIs(err, plumbing.ErrReferenceNotFound) 59} 60 61func (s *ReferenceSuite) TestRemoveReferenceBase() { 62 base := memory.NewStorage() 63 temporal := memory.NewStorage() 64 65 ref := plumbing.NewReferenceFromStrings("refs/a", "bc9968d75e48de59f0870ffb71f5e160bbbdcf52") 66 67 rs := NewReferenceStorage(base, temporal) 68 err := base.SetReference(ref) 69 s.NoError(err) 70 71 err = rs.RemoveReference("refs/a") 72 s.NoError(err) 73 74 _, err = rs.Reference("refs/a") 75 s.ErrorIs(err, plumbing.ErrReferenceNotFound) 76} 77 78func (s *ReferenceSuite) TestCheckAndSetReferenceInBase() { 79 base := memory.NewStorage() 80 temporal := memory.NewStorage() 81 rs := NewReferenceStorage(base, temporal) 82 83 err := base.SetReference( 84 plumbing.NewReferenceFromStrings("foo", "482e0eada5de4039e6f216b45b3c9b683b83bfa"), 85 ) 86 s.NoError(err) 87 88 err = rs.CheckAndSetReference( 89 plumbing.NewReferenceFromStrings("foo", "bc9968d75e48de59f0870ffb71f5e160bbbdcf52"), 90 plumbing.NewReferenceFromStrings("foo", "482e0eada5de4039e6f216b45b3c9b683b83bfa"), 91 ) 92 s.NoError(err) 93 94 e, err := rs.Reference(plumbing.ReferenceName("foo")) 95 s.NoError(err) 96 s.Equal("bc9968d75e48de59f0870ffb71f5e160bbbdcf52", e.Hash().String()) 97} 98 99func (s *ReferenceSuite) TestCommit() { 100 base := memory.NewStorage() 101 temporal := memory.NewStorage() 102 103 refA := plumbing.NewReferenceFromStrings("refs/a", "bc9968d75e48de59f0870ffb71f5e160bbbdcf52") 104 refB := plumbing.NewReferenceFromStrings("refs/b", "b66c08ba28aa1f81eb06a1127aa3936ff77e5e2c") 105 refC := plumbing.NewReferenceFromStrings("refs/c", "c3f4688a08fd86f1bf8e055724c84b7a40a09733") 106 107 rs := NewReferenceStorage(base, temporal) 108 s.Nil(rs.SetReference(refA)) 109 s.Nil(rs.SetReference(refB)) 110 s.Nil(rs.SetReference(refC)) 111 112 err := rs.Commit() 113 s.NoError(err) 114 115 iter, err := base.IterReferences() 116 s.NoError(err) 117 118 var count int 119 iter.ForEach(func(ref *plumbing.Reference) error { 120 count++ 121 return nil 122 }) 123 124 s.Equal(3, count) 125} 126 127func (s *ReferenceSuite) TestCommitDelete() { 128 base := memory.NewStorage() 129 temporal := memory.NewStorage() 130 131 refA := plumbing.NewReferenceFromStrings("refs/a", "bc9968d75e48de59f0870ffb71f5e160bbbdcf52") 132 refB := plumbing.NewReferenceFromStrings("refs/b", "b66c08ba28aa1f81eb06a1127aa3936ff77e5e2c") 133 refC := plumbing.NewReferenceFromStrings("refs/c", "c3f4688a08fd86f1bf8e055724c84b7a40a09733") 134 135 rs := NewReferenceStorage(base, temporal) 136 s.Nil(base.SetReference(refA)) 137 s.Nil(base.SetReference(refB)) 138 s.Nil(base.SetReference(refC)) 139 140 s.Nil(rs.RemoveReference(refA.Name())) 141 s.Nil(rs.RemoveReference(refB.Name())) 142 s.Nil(rs.RemoveReference(refC.Name())) 143 s.Nil(rs.SetReference(refC)) 144 145 err := rs.Commit() 146 s.NoError(err) 147 148 iter, err := base.IterReferences() 149 s.NoError(err) 150 151 var count int 152 iter.ForEach(func(ref *plumbing.Reference) error { 153 count++ 154 return nil 155 }) 156 157 s.Equal(1, count) 158 159 ref, err := rs.Reference(refC.Name()) 160 s.NoError(err) 161 s.Equal("c3f4688a08fd86f1bf8e055724c84b7a40a09733", ref.Hash().String()) 162 163}