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