git.rb: test code showing the content of objects
[gitrb.git] / git.rb
blobd8e4185234cabf10cee4e632615b177ca77e7a71
1 require 'git/internal/object'
2 require 'git/internal/pack'
3 require 'git/internal/loose'
4 require 'git/object'
6 module Git
7   class Repository
8     def initialize(git_dir)
9       @git_dir = git_dir
10     end
12     def get_object_by_sha1(sha1)
13       r = get_raw_object_by_sha1(sha1)
14       return nil if !r
15       Object.from_raw(r, self)
16     end
18     def get_raw_object_by_sha1(sha1)
19       sha1 = [sha1].pack("H*")
20       packs = Dir.glob(@git_dir + '/objects/pack/pack-*.pack')
22       # try packs
23       packs.each do |pack|
24         storage = Git::Internal::PackStorage.new(pack)
25         o = storage[sha1]
26         return o if o
27       end
29       # try loose storage
30       storage = Git::Internal::LooseStorage.new(@git_dir+'/objects')
31       o = storage[sha1]
32       return o if o
34       # try packs again, maybe the object got packed in the meantime
35       packs.each do |pack|
36         storage = Git::Internal::PackStorage.new(pack)
37         o = storage[sha1]
38         return o if o
39       end
41       return nil
42     end
43   end
44 end
46 if $0 == __FILE__ 
47   require 'git' 
48   r = Git::Repository.new(ARGV[0]) 
49   ARGV[1..-1].each do |sha1| 
50     o = r.get_object_by_sha1(sha1) 
51     if !o 
52       puts 'no such object' 
53       next 
54     end 
55     puts o.type 
56     case o.type 
57     when :blob 
58       puts o.content 
59     when :tree 
60       puts o.entry.collect { |e| "%s %s" % [e.sha1, e.name] }.join("\n") 
61     when :commit 
62       puts o.raw_content 
63     when :tag 
64       puts o.raw_content 
65     end 
66   end 
67 end