fork of go-git with some jj specific features
at v4.1.1 4.4 kB view raw
1package git 2 3import ( 4 "context" 5 "io/ioutil" 6 "os" 7 "path/filepath" 8 9 "gopkg.in/src-d/go-git.v4/plumbing" 10 11 . "gopkg.in/check.v1" 12 "gopkg.in/src-d/go-git-fixtures.v3" 13) 14 15type SubmoduleSuite struct { 16 BaseSuite 17 Worktree *Worktree 18 path string 19} 20 21var _ = Suite(&SubmoduleSuite{}) 22 23func (s *SubmoduleSuite) SetUpTest(c *C) { 24 path := fixtures.ByTag("submodule").One().Worktree().Root() 25 26 dir, err := ioutil.TempDir("", "submodule") 27 c.Assert(err, IsNil) 28 29 r, err := PlainClone(filepath.Join(dir, "worktree"), false, &CloneOptions{ 30 URL: path, 31 }) 32 33 c.Assert(err, IsNil) 34 35 s.Repository = r 36 s.Worktree, err = r.Worktree() 37 c.Assert(err, IsNil) 38 39 s.path = dir 40} 41 42func (s *SubmoduleSuite) TearDownTest(c *C) { 43 err := os.RemoveAll(s.path) 44 c.Assert(err, IsNil) 45} 46 47func (s *SubmoduleSuite) TestInit(c *C) { 48 sm, err := s.Worktree.Submodule("basic") 49 c.Assert(err, IsNil) 50 51 c.Assert(sm.initialized, Equals, false) 52 err = sm.Init() 53 c.Assert(err, IsNil) 54 55 c.Assert(sm.initialized, Equals, true) 56 57 cfg, err := s.Repository.Config() 58 c.Assert(err, IsNil) 59 60 c.Assert(cfg.Submodules, HasLen, 1) 61 c.Assert(cfg.Submodules["basic"], NotNil) 62 63 status, err := sm.Status() 64 c.Assert(err, IsNil) 65 c.Assert(status.IsClean(), Equals, false) 66} 67 68func (s *SubmoduleSuite) TestUpdate(c *C) { 69 sm, err := s.Worktree.Submodule("basic") 70 c.Assert(err, IsNil) 71 72 err = sm.Update(&SubmoduleUpdateOptions{ 73 Init: true, 74 }) 75 76 c.Assert(err, IsNil) 77 78 r, err := sm.Repository() 79 c.Assert(err, IsNil) 80 81 ref, err := r.Reference(plumbing.HEAD, true) 82 c.Assert(err, IsNil) 83 c.Assert(ref.Hash().String(), Equals, "6ecf0ef2c2dffb796033e5a02219af86ec6584e5") 84 85 status, err := sm.Status() 86 c.Assert(err, IsNil) 87 c.Assert(status.IsClean(), Equals, true) 88} 89 90func (s *SubmoduleSuite) TestRepositoryWithoutInit(c *C) { 91 sm, err := s.Worktree.Submodule("basic") 92 c.Assert(err, IsNil) 93 94 r, err := sm.Repository() 95 c.Assert(err, Equals, ErrSubmoduleNotInitialized) 96 c.Assert(r, IsNil) 97} 98 99func (s *SubmoduleSuite) TestUpdateWithoutInit(c *C) { 100 sm, err := s.Worktree.Submodule("basic") 101 c.Assert(err, IsNil) 102 103 err = sm.Update(&SubmoduleUpdateOptions{}) 104 c.Assert(err, Equals, ErrSubmoduleNotInitialized) 105} 106 107func (s *SubmoduleSuite) TestUpdateWithNotFetch(c *C) { 108 sm, err := s.Worktree.Submodule("basic") 109 c.Assert(err, IsNil) 110 111 err = sm.Update(&SubmoduleUpdateOptions{ 112 Init: true, 113 NoFetch: true, 114 }) 115 116 // Since we are not fetching, the object is not there 117 c.Assert(err, Equals, plumbing.ErrObjectNotFound) 118} 119 120func (s *SubmoduleSuite) TestUpdateWithRecursion(c *C) { 121 sm, err := s.Worktree.Submodule("itself") 122 c.Assert(err, IsNil) 123 124 err = sm.Update(&SubmoduleUpdateOptions{ 125 Init: true, 126 RecurseSubmodules: 2, 127 }) 128 129 c.Assert(err, IsNil) 130 131 fs := s.Worktree.Filesystem 132 _, err = fs.Stat(fs.Join("itself", "basic", "LICENSE")) 133 c.Assert(err, IsNil) 134} 135 136func (s *SubmoduleSuite) TestUpdateWithInitAndUpdate(c *C) { 137 sm, err := s.Worktree.Submodule("basic") 138 c.Assert(err, IsNil) 139 140 err = sm.Update(&SubmoduleUpdateOptions{ 141 Init: true, 142 }) 143 c.Assert(err, IsNil) 144 145 idx, err := s.Repository.Storer.Index() 146 c.Assert(err, IsNil) 147 148 for i, e := range idx.Entries { 149 if e.Name == "basic" { 150 e.Hash = plumbing.NewHash("b029517f6300c2da0f4b651b8642506cd6aaf45d") 151 } 152 153 idx.Entries[i] = e 154 } 155 156 err = s.Repository.Storer.SetIndex(idx) 157 c.Assert(err, IsNil) 158 159 err = sm.Update(&SubmoduleUpdateOptions{}) 160 c.Assert(err, IsNil) 161 162 r, err := sm.Repository() 163 c.Assert(err, IsNil) 164 165 ref, err := r.Reference(plumbing.HEAD, true) 166 c.Assert(err, IsNil) 167 c.Assert(ref.Hash().String(), Equals, "b029517f6300c2da0f4b651b8642506cd6aaf45d") 168 169} 170 171func (s *SubmoduleSuite) TestSubmodulesInit(c *C) { 172 sm, err := s.Worktree.Submodules() 173 c.Assert(err, IsNil) 174 175 err = sm.Init() 176 c.Assert(err, IsNil) 177 178 sm, err = s.Worktree.Submodules() 179 c.Assert(err, IsNil) 180 181 for _, m := range sm { 182 c.Assert(m.initialized, Equals, true) 183 } 184} 185 186func (s *SubmoduleSuite) TestSubmodulesStatus(c *C) { 187 sm, err := s.Worktree.Submodules() 188 c.Assert(err, IsNil) 189 190 status, err := sm.Status() 191 c.Assert(err, IsNil) 192 c.Assert(status, HasLen, 2) 193} 194 195func (s *SubmoduleSuite) TestSubmodulesUpdateContext(c *C) { 196 sm, err := s.Worktree.Submodules() 197 c.Assert(err, IsNil) 198 199 ctx, cancel := context.WithCancel(context.Background()) 200 cancel() 201 202 err = sm.UpdateContext(ctx, &SubmoduleUpdateOptions{Init: true}) 203 c.Assert(err, NotNil) 204}