Commit 3ea514188523ae9e8ecd603f760442f147042d6c

add alternates getter and setter

Commit diff

lib/grit/repo.rb

 
245245 end
246246 end
247247
248 # The list of alternates for this repo
249 #
250 # Returns Array[String] (pathnames of alternates)
251 def alternates
252 alternates_path = File.join(self.path, *%w{objects info alternates})
253
254 if File.exist?(alternates_path)
255 File.read(alternates_path).strip.split("\n")
256 else
257 []
258 end
259 end
260
261 # Sets the alternates
262 # +alts+ is the Array of String paths representing the alternates
263 #
264 # Returns nothing
265 def alternates=(alts)
266 alts.each do |alt|
267 unless File.exist?(alt)
268 raise "Could not set alternates. Alternate path #{alt} must exist"
269 end
270 end
271
272 File.open(File.join(self.path, *%w{objects info alternates}), 'w') do |f|
273 f.write alts.join("\n")
274 end
275 end
276
248277 # Pretty object inspection
249278 def inspect
250279 %Q{#<Grit::Repo "#{@path}">}
toggle raw diff

test/test_repo.rb

 
196196 @r.disable_daemon_serve
197197 end
198198
199 # alternates
200
201 def test_alternates_with_two_alternates
202 File.expects(:exist?).with('/Users/tom/dev/mojombo/grit/.git/objects/info/alternates').returns(true)
203 File.expects(:read).returns("/path/to/repo1/.git/objects\n/path/to/repo2.git/objects\n")
204
205 assert_equal ["/path/to/repo1/.git/objects", "/path/to/repo2.git/objects"], @r.alternates
206 end
207
208 def test_alternates_no_file
209 File.expects(:exist?).returns(false)
210
211 assert_equal [], @r.alternates
212 end
213
214 # alternates=
215
216 def test_alternates_setter_ok
217 alts = %w{/path/to/repo.git/objects /path/to/repo2.git/objects}
218
219 alts.each do |alt|
220 File.expects(:exist?).with(alt).returns(true)
221 end
222
223 File.any_instance.expects(:write).with(alts.join("\n"))
224
225 assert_nothing_raised do
226 @r.alternates = alts
227 end
228 end
229
230 def test_alternates_setter_bad
231 alts = %w{/path/to/repo.git/objects}
232
233 alts.each do |alt|
234 File.expects(:exist?).with(alt).returns(false)
235 end
236
237 File.any_instance.expects(:write).never
238
239 assert_raise RuntimeError do
240 @r.alternates = alts
241 end
242 end
243
199244 # inspect
200245
201246 def test_inspect
toggle raw diff