@@ -7,6 +7,9 @@ module Git
class Repository
def initialize(git_dir)
@git_dir = git_dir
+ @loose = Internal::LooseStorage.new("#@git_dir/objects")
+ @packs = []
+ initpacks
end
def get_object_by_sha1(sha1)
@@ -17,28 +20,35 @@ module Git
def get_raw_object_by_sha1(sha1)
sha1 = [sha1].pack("H*")
- packs = Dir.glob(@git_dir + '/objects/pack/pack-*.pack')
# try packs
- packs.each do |pack|
- storage = Git::Internal::PackStorage.new(pack)
- o = storage[sha1]
+ @packs.each do |pack|
+ o = pack[sha1]
return o if o
end
# try loose storage
- storage = Git::Internal::LooseStorage.new(@git_dir+'/objects')
- o = storage[sha1]
+ o = @loose[sha1]
return o if o
# try packs again, maybe the object got packed in the meantime
- packs.each do |pack|
- storage = Git::Internal::PackStorage.new(pack)
- o = storage[sha1]
+ initpacks
+ @packs.each do |pack|
+ o = pack[sha1]
return o if o
end
- return nil
+ nil
+ end
+
+ def initpacks
+ @packs.each do |pack|
+ pack.close
+ end
+ @packs = []
+ Dir.glob("#@git_dir/objects/pack/pack-*.pack").each do |pack|
+ @packs << Git::Internal::PackStorage.new(pack)
+ end
end
end
end