git-object-browser 0.0.6 → 0.0.7

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (79) hide show
  1. data/README.md +17 -0
  2. data/htdocs/{css → common/css}/angular-ui.min.css +0 -0
  3. data/htdocs/{css → common/css}/bootstrap-responsive.css +0 -0
  4. data/htdocs/{css → common/css}/bootstrap-responsive.min.css +0 -0
  5. data/htdocs/{css → common/css}/bootstrap.css +0 -0
  6. data/htdocs/{css → common/css}/bootstrap.min.css +0 -0
  7. data/htdocs/{css → common/css}/font-awesome-ie7.css +0 -0
  8. data/htdocs/{css → common/css}/font-awesome.css +0 -0
  9. data/htdocs/{css → common/css}/main.css +0 -0
  10. data/htdocs/{font → common/font}/fontawesome-webfont.eot +0 -0
  11. data/htdocs/{font → common/font}/fontawesome-webfont.svg +0 -0
  12. data/htdocs/{font → common/font}/fontawesome-webfont.ttf +0 -0
  13. data/htdocs/{font → common/font}/fontawesome-webfont.woff +0 -0
  14. data/htdocs/{img → common/img}/glyphicons-halflings-white.png +0 -0
  15. data/htdocs/{img → common/img}/glyphicons-halflings.png +0 -0
  16. data/htdocs/common/js/main.js +495 -0
  17. data/htdocs/{js → common/js}/vendor/angular-bootstrap-prettify.min.js +0 -0
  18. data/htdocs/{js → common/js}/vendor/angular-bootstrap.min.js +0 -0
  19. data/htdocs/{js → common/js}/vendor/angular-cookies.min.js +0 -0
  20. data/htdocs/{js → common/js}/vendor/angular-loader.min.js +0 -0
  21. data/htdocs/{js → common/js}/vendor/angular-resource.min.js +0 -0
  22. data/htdocs/{js → common/js}/vendor/angular-sanitize.min.js +0 -0
  23. data/htdocs/{js → common/js}/vendor/angular-ui-ieshiv.min.js +0 -0
  24. data/htdocs/{js → common/js}/vendor/angular-ui.min.js +0 -0
  25. data/htdocs/{js → common/js}/vendor/angular.js +0 -0
  26. data/htdocs/{js → common/js}/vendor/angular.min.js +0 -0
  27. data/htdocs/{js → common/js}/vendor/bootstrap.js +0 -0
  28. data/htdocs/{js → common/js}/vendor/bootstrap.min.js +0 -0
  29. data/htdocs/{js → common/js}/vendor/html5shiv.js +0 -0
  30. data/htdocs/{js → common/js}/vendor/jquery-1.8.2.min.js +0 -0
  31. data/htdocs/{templates → common/templates}/directory.html +2 -2
  32. data/htdocs/common/templates/error.html +6 -0
  33. data/htdocs/{templates → common/templates}/file.html +0 -0
  34. data/htdocs/{templates → common/templates}/git.html +0 -0
  35. data/htdocs/{templates → common/templates}/index.html +1 -1
  36. data/htdocs/{templates → common/templates}/index_entry.html +0 -0
  37. data/htdocs/{templates → common/templates}/info_refs.html +2 -2
  38. data/htdocs/{templates → common/templates}/loading.html +0 -0
  39. data/htdocs/{templates → common/templates}/notfound.html +1 -2
  40. data/htdocs/{templates → common/templates}/object.html +1 -1
  41. data/htdocs/{templates → common/templates}/objects.html +3 -3
  42. data/htdocs/{templates → common/templates}/pack_file.html +1 -1
  43. data/htdocs/common/templates/pack_index.html +39 -0
  44. data/htdocs/{templates → common/templates}/packed_object.html +4 -4
  45. data/htdocs/{templates → common/templates}/packed_refs.html +2 -2
  46. data/htdocs/{templates → common/templates}/ref.html +0 -0
  47. data/htdocs/common/templates/reflog.html +29 -0
  48. data/htdocs/config.js +6 -0
  49. data/htdocs/default.js +7 -0
  50. data/htdocs/index.html +52 -20
  51. data/lib/git-object-browser.rb +12 -4
  52. data/lib/git-object-browser/dumper/directories_dumper.rb +42 -0
  53. data/lib/git-object-browser/dumper/index_dumper.rb +20 -7
  54. data/lib/git-object-browser/dumper/info_refs_dumper.rb +37 -0
  55. data/lib/git-object-browser/dumper/main.rb +188 -81
  56. data/lib/git-object-browser/dumper/objects_dumper.rb +46 -0
  57. data/lib/git-object-browser/dumper/pack_indexes_dumper.rb +85 -0
  58. data/lib/git-object-browser/dumper/packed_objects_dumper.rb +36 -0
  59. data/lib/git-object-browser/dumper/packed_refs_dumper.rb +37 -0
  60. data/lib/git-object-browser/dumper/plain_files_dumper.rb +74 -0
  61. data/lib/git-object-browser/dumper/refs_dumper.rb +46 -0
  62. data/lib/git-object-browser/main.rb +22 -6
  63. data/lib/git-object-browser/models/directory.rb +5 -3
  64. data/lib/git-object-browser/models/git_date.rb +26 -0
  65. data/lib/git-object-browser/models/git_object.rb +1 -1
  66. data/lib/git-object-browser/models/pack_file.rb +1 -1
  67. data/lib/git-object-browser/models/pack_index.rb +139 -25
  68. data/lib/git-object-browser/models/packed_object.rb +1 -1
  69. data/lib/git-object-browser/models/reflog.rb +54 -0
  70. data/lib/git-object-browser/models/wrapped_object.rb +40 -0
  71. data/lib/git-object-browser/server/git_servlet.rb +130 -100
  72. data/lib/git-object-browser/server/main.rb +1 -1
  73. data/lib/git-object-browser/version.rb +1 -1
  74. metadata +62 -50
  75. data/htdocs/js/main.js +0 -285
  76. data/htdocs/templates/pack_index.html +0 -37
  77. data/lib/git-object-browser/dumper/object_dumper.rb +0 -20
  78. data/lib/git-object-browser/dumper/pack_index_dumper.rb +0 -21
  79. data/lib/git-object-browser/dumper/packed_object_dumper.rb +0 -19
@@ -6,17 +6,30 @@ module GitObjectBrowser
6
6
 
7
7
  class IndexDumper
8
8
 
9
- def initialize(input, output)
10
- @index = GitObjectBrowser::Models::Index.new(input)
11
- @out = output
9
+ def initialize(root, outdir)
10
+ @root = root
11
+ @outdir = outdir
12
12
  end
13
13
 
14
+
14
15
  def dump
15
- @out << JSON.pretty_generate(@index.parse.to_hash)
16
+ index_file = File.join(@root, "index")
17
+ out_file = File.join(@outdir, "index.json")
18
+
19
+ return unless File.exist?(index_file)
20
+
21
+ puts "Write: index\n"
22
+ File.open(index_file) do |input|
23
+ File.open(out_file, "w") do |output|
24
+ dump_object(input, output)
25
+ end
26
+ end
27
+ end
16
28
 
17
- # template = File.join(GitObjectBrowser::Dumper::TEMPLATES_DIR, 'index.txt.erb')
18
- # index = @index.parse.to_hash
19
- # @out << ERB.new(File.read(template), nil, '-').result(binding)
29
+ def dump_object(input, output)
30
+ obj = GitObjectBrowser::Models::Index.new(input).parse
31
+ wrapped = GitObjectBrowser::Models::WrappedObject.new(nil, 'index', obj)
32
+ output << JSON.pretty_generate(wrapped.to_hash)
20
33
  end
21
34
 
22
35
  end
@@ -0,0 +1,37 @@
1
+ # -*- coding: utf-8 -*-
2
+
3
+ module GitObjectBrowser
4
+
5
+ module Dumper
6
+
7
+ class InfoRefsDumper
8
+
9
+ def initialize(root, outdir)
10
+ @root = root
11
+ @outdir = outdir
12
+ end
13
+
14
+ def dump
15
+ src_file = File.join(@root, "info/refs")
16
+ dst_file = File.join(@outdir, "info/refs.json")
17
+
18
+ return unless File.exist?(src_file)
19
+
20
+ puts "Write: info/refs\n"
21
+ File.open(src_file) do |input|
22
+ File.open(dst_file, "w") do |output|
23
+ dump_object(input, output)
24
+ end
25
+ end
26
+ end
27
+
28
+ def dump_object(input, output)
29
+ obj = GitObjectBrowser::Models::InfoRefs.new(input)
30
+ wrapped = GitObjectBrowser::Models::WrappedObject.new(nil, 'info/refs', obj)
31
+ output << JSON.pretty_generate(wrapped.to_hash)
32
+ end
33
+
34
+ end
35
+ end
36
+ end
37
+
@@ -1,124 +1,231 @@
1
1
  module GitObjectBrowser
2
2
  module Dumper
3
3
 
4
- # TEMPLATES_DIR = File.join(File.dirname(__FILE__), '../../../templates/dumper')
4
+ HTDOCS_DIR = File.join(File.dirname(__FILE__), '../../../htdocs')
5
5
 
6
6
  class Main
7
7
 
8
- def self.execute(target)
9
- new(target).dump
8
+ def self.execute(target, outdir, step, diff_dir)
9
+ outdir = File.expand_path(outdir)
10
+
11
+ if outdir =~ %r{(?:^|/).git(?:/|$)} && outdir !~ %r{/.git/dump/?\z}
12
+ raise 'Dump directory must be .git/dump if you dump into the .git directory.'
13
+ end
14
+
15
+ if File.exist?(outdir)
16
+ Dir.chdir(outdir) do
17
+ if !Dir.glob('*').empty? && Dir.glob('json/**/_git.json').empty?
18
+ raise 'dump directory exists but it may not be the old dump directory. json/**/_git.json doesn\'t exist.'
19
+ end
20
+ end
21
+ end
22
+
23
+ if diff_dir
24
+ diff_dir = File.expand_path(diff_dir)
25
+ raise "#{ diff_dir } must be directory." unless File.directory?(diff_dir)
26
+ raise "#{ diff_dir }/_git.json doesn't exist" unless File.exist?(File.join(diff_dir, '_git.json'))
27
+ end
28
+
29
+ new(target, outdir, step, diff_dir).dump
10
30
  end
11
31
 
12
- def initialize(target)
32
+ def initialize(target, outdir, step, diff_dir)
13
33
  @target = target
14
- @outdir = File.join(target, "dump")
34
+ @outdir = outdir
35
+ @step = step
36
+ @diff_dir = diff_dir
37
+
38
+ if @step
39
+ (@diff_dir, @step) = find_next_dir if @step == :next
40
+ @json_dir = File.join(@outdir, 'json', @step)
41
+ else
42
+ @json_dir = File.join(@outdir, 'json')
43
+ end
15
44
  end
16
45
 
46
+ def find_next_dir
47
+ json_dir = File.join(@outdir, 'json')
48
+ FileUtils.mkdir_p(json_dir) unless File.exist?(json_dir)
49
+ dir = Dir.open(json_dir).map do |dir|
50
+ if dir =~ /\Astep(\d+)\z/
51
+ [dir, $1.to_i]
52
+ else
53
+ nil
54
+ end
55
+ end.compact.sort {|a,b| a[1] <=> b[1] }.last
56
+ if dir
57
+ return [File.join(json_dir, dir[0]), "step#{dir[1] + 1}"]
58
+ else
59
+ return [nil, "step1"]
60
+ end
61
+ end
62
+ private :find_next_dir
63
+
17
64
  def dump
18
- Dir.mkdir(@outdir) unless File.exist?(@outdir)
19
- dump_index
20
65
  dump_objects
21
- dump_packed
66
+ copy_htdocs
67
+ create_config
68
+ create_diff_data
69
+ create_note
70
+ if @step
71
+ puts "-- Complete: #{ @step }"
72
+ else
73
+ puts "-- Complete"
74
+ end
22
75
  end
23
76
 
24
- def dump_index
25
- index_file = File.join(@target, "index")
26
- out_file = File.join(@outdir, "index")
77
+ def create_config
78
+ puts "-- Create config files"
79
+ unless File.exist?(File.join(@outdir, 'config.js'))
80
+ puts "Write: config.js"
81
+ FileUtils.copy_entry(File.join(HTDOCS_DIR, 'config.js'),
82
+ File.join(@outdir, 'config.js'))
83
+ end
27
84
 
28
- return unless File.exist?(index_file)
85
+ puts "Write: default.js"
86
+ default_file = File.join(@outdir, 'default.js')
87
+ if File.exist?(default_file)
88
+ conf = File.read(default_file)
89
+ create = false
90
+ else
91
+ conf = File.read(File.join(HTDOCS_DIR, 'default.js'))
92
+ create = true
93
+ end
94
+ if conf =~ /var config = (\{.+\});/m
95
+ json = $1
96
+ else
97
+ json = '{}'
98
+ end
99
+ conf = JSON.parse(json)
100
+ if create
101
+ conf['loadNote'] = true
102
+ conf['loadDiff'] = true
103
+ end
104
+ conf['steps'] = [] unless conf['steps'].is_a? Array
105
+ conf['steps'] << { 'name' => @step, 'label' => @step }
29
106
 
30
- STDERR << "Write: .git/dump/index\n"
31
- File.open(index_file) do |input|
32
- File.open(out_file, "w") do |output|
33
- dumper = GitObjectBrowser::Dumper::IndexDumper.new(input, output)
34
- dumper.dump
35
- end
107
+ File.open(default_file, 'w') do |io|
108
+ io << "// Edit config.js instead of this file.\n"
109
+ io << "// This file will be rewritten by git object-browser command.\n"
110
+ io << "var config = " + JSON.pretty_generate(conf) + ";\n"
36
111
  end
37
112
  end
38
113
 
39
- def dump_objects
40
- obj_files = []
41
- Dir.chdir(@target) do
42
- Dir.glob("objects/**/*") do |path|
43
- obj_files << path if File.file?(path) && path =~ %r{/[a-z0-9]{38}$}
114
+ def create_diff_data
115
+ return unless @step
116
+ unless @diff_dir
117
+ puts "-- Create empty diff data"
118
+ puts "Write: _diff.json"
119
+ File.open(File.join(@json_dir, '_diff.json'), 'w') do |io|
120
+ io << '[]'
44
121
  end
122
+ return
45
123
  end
46
- return if obj_files.empty?
47
124
 
48
- obj_dir = File.join(@outdir, "objects")
49
- Dir.mkdir(obj_dir) unless File.exist?(obj_dir)
125
+ puts "-- Create diff data"
126
+ old_files = []
127
+ Dir.chdir(@diff_dir) do
128
+ Dir.glob("**/*").each do |file|
129
+ next unless File.file?(file)
130
+ next if File.directory?(file.sub(/\.json\z/, ''))
131
+ next if %w{_git.json _diff.json}.include?(file)
132
+ old_files << file
133
+ end
134
+ end
50
135
 
51
- obj_files.each do |path|
52
- outfile = File.join(@outdir, path)
53
- next if File.exist?(outfile)
136
+ new_files = []
137
+ Dir.chdir(@json_dir) do
138
+ Dir.glob("**/*").each do |file|
139
+ next unless File.file?(file)
140
+ next if File.directory?(file.sub(/\.json\z/, ''))
141
+ next if %w{_git.json _diff.json}.include?(file)
142
+ new_files << file
143
+ end
144
+ end
54
145
 
55
- parent = File.dirname(outfile)
56
- Dir.mkdir(parent) unless File.exist?(parent)
146
+ diff_files = []
57
147
 
58
- STDERR << "Write: .git/dump/objects/#{path}\n"
59
- obj_file = File.join(@target, path)
60
- File.open(obj_file) do |input|
61
- File.open(outfile, "w") do |output|
62
- dumper = GitObjectBrowser::Dumper::ObjectDumper.new(input, output)
63
- dumper.dump
64
- end
148
+ common_files = old_files & new_files
149
+ common_files.each do |file|
150
+ a = File.join(@diff_dir, file)
151
+ b = File.join(@json_dir, file)
152
+ unless FileUtils.cmp(a, b)
153
+ diff_files << file.sub(/\.json\z/, '')
65
154
  end
66
155
  end
67
156
 
157
+ removed_files = old_files - new_files
158
+ removed_files.each do |file|
159
+ diff_files << file.sub(/\.json\z/, '')
160
+ end
161
+
162
+ added_files = new_files - old_files
163
+ added_files.each do |file|
164
+ diff_files << file.sub(/\.json\z/, '')
165
+ end
166
+
167
+ puts "Write: _diff.json"
168
+ File.open(File.join(@json_dir, '_diff.json'), 'w') do |io|
169
+ io << JSON.pretty_generate(diff_files)
170
+ end
68
171
  end
69
172
 
70
- def dump_packed
71
- files = []
72
- Dir.chdir(@target) do
73
- Dir.glob("objects/pack/*.idx") do |path|
74
- files << path
173
+ def dump_objects
174
+ if File.exist?(@json_dir)
175
+ puts "-- Remove old JSON files"
176
+ if @step
177
+ puts "Remove: json/#{ @step }"
178
+ else
179
+ puts "Remove: json/*"
75
180
  end
181
+ FileUtils.rm_r(@json_dir)
76
182
  end
77
- return if files.empty?
78
-
79
- obj_dir = File.join(@outdir, "objects")
80
- Dir.mkdir(obj_dir) unless File.exist?(obj_dir)
81
- pack_dir = File.join(@outdir, "objects/pack")
82
- Dir.mkdir(pack_dir) unless File.exist?(pack_dir)
83
-
84
- files.each do |path|
85
- outfile = File.join(@outdir, path)
86
- packpath = path.gsub(/\.idx\z/, '.pack')
87
-
88
- STDERR << "Write: .git/dump/#{path}\n"
89
- index_file = File.join(@target, path)
90
- File.open(index_file) do |input|
91
- File.open(outfile, "w") do |output|
92
- dumper = GitObjectBrowser::Dumper::PackIndexDumper.new(input, output)
93
- dumper.dump
94
- index = dumper.pack_index
95
- entries = index.to_hash[:entries]
96
-
97
- File.open(File.join(@target, packpath)) do |pack_input|
98
- object_dumper = GitObjectBrowser::Dumper::PackedObjectDumper.new(pack_input, index)
99
- entries.each do |entry|
100
- dump_packed_object(object_dumper, entry)
101
- end
102
- end
183
+ puts "-- Dump objects"
184
+ FileUtils.mkdir_p(@json_dir)
185
+ [IndexDumper,
186
+ ObjectsDumper,
187
+ RefsDumper,
188
+ DirectoriesDumper,
189
+ PlainFilesDumper,
190
+ PackIndexesDumper,
191
+ PackedRefsDumper,
192
+ InfoRefsDumper,
193
+ ].each do |dumper|
194
+ dumper.new(@target, @json_dir).dump
195
+ end
196
+ end
197
+ private :dump_objects
198
+
199
+ def copy_htdocs
200
+ puts "-- Copy htdocs"
201
+ Dir.chdir(HTDOCS_DIR) do
202
+ Dir.glob('*').each do |file|
203
+ next if %w{config.js default.js}.include?(file)
204
+ if File.directory?(file)
205
+ puts "Copy: #{file}/*"
206
+ else
207
+ puts "Copy: #{file}"
103
208
  end
209
+ FileUtils.copy_entry(file, File.join(@outdir, file))
104
210
  end
105
211
  end
106
212
  end
107
213
 
108
- def dump_packed_object(dumper, entry)
109
- sha1_1 = entry[:sha1][0..1]
110
- sha1_2 = entry[:sha1][2..-1]
111
- obj_dir = File.join(@outdir, "objects", sha1_1)
112
- Dir.mkdir(obj_dir) unless File.exist?(obj_dir)
113
-
114
- outfile = File.join(obj_dir, sha1_2)
115
- STDERR << "Write: .git/dump/objects/#{sha1_1}/#{sha1_2}\n"
116
-
117
- File.open(outfile, "w") do |output|
118
- dumper.dump(output, entry[:offset])
214
+ def create_note
215
+ if @step
216
+ FileUtils.mkdir_p(File.join(@outdir, 'notes'))
217
+ path = File.join(@outdir, 'notes', "#{ @step }.html")
218
+ msg = "Create: notes/#{ @step }.html"
219
+ else
220
+ path = File.join(@outdir, 'note.html')
221
+ msg = "Create: note.html"
222
+ end
223
+ unless File.exist?(path)
224
+ puts "-- Create note"
225
+ puts msg
226
+ File.open(path, 'w') {}
119
227
  end
120
228
  end
121
-
122
229
  end
123
230
  end
124
231
  end
@@ -0,0 +1,46 @@
1
+ # -*- coding: utf-8 -*-
2
+
3
+ module GitObjectBrowser
4
+
5
+ module Dumper
6
+
7
+ class ObjectsDumper
8
+
9
+ def initialize(root, outdir)
10
+ @root = root
11
+ @outdir = outdir
12
+ end
13
+
14
+ def dump
15
+ obj_files = []
16
+ Dir.chdir(@root) do
17
+ Dir.glob("objects/**/*") do |path|
18
+ obj_files << path if File.file?(path) && path =~ %r{/[a-z0-9]{38}$}
19
+ end
20
+ end
21
+ return if obj_files.empty?
22
+
23
+ obj_files.each do |path|
24
+ outfile = File.join(@outdir, "#{ path }.json")
25
+ next if File.exist?(outfile)
26
+
27
+ FileUtils.mkdir_p(File.dirname(outfile))
28
+
29
+ puts "Write: #{path}\n"
30
+ obj_file = File.join(@root, path)
31
+ File.open(obj_file) do |input|
32
+ File.open(outfile, "w") do |output|
33
+ dump_object(input, output, path)
34
+ end
35
+ end
36
+ end
37
+ end
38
+
39
+ def dump_object(input, output, path)
40
+ obj = GitObjectBrowser::Models::GitObject.new(input).parse
41
+ wrapped = GitObjectBrowser::Models::WrappedObject.new(nil, path, obj)
42
+ output << JSON.pretty_generate(wrapped.to_hash)
43
+ end
44
+ end
45
+ end
46
+ end
@@ -0,0 +1,85 @@
1
+ # -*- coding: utf-8 -*-
2
+
3
+ module GitObjectBrowser
4
+
5
+ module Dumper
6
+
7
+ class PackIndexesDumper
8
+
9
+ def initialize(root, outdir)
10
+ @root = root
11
+ @outdir = outdir
12
+ end
13
+
14
+ def dump
15
+ index_files = []
16
+ Dir.chdir(@root) do
17
+ Dir.glob('objects/pack/pack-*.idx') do |path|
18
+ next unless path =~ %r{/pack-[0-9a-f]{40}\.idx}
19
+ index_files << path
20
+ end
21
+ end
22
+ return if index_files.empty?
23
+
24
+ # digest, sha1 order, offset order
25
+ index_files.each do |path|
26
+ dump_digest(path)
27
+ dump_ordered(path, 'sha1')
28
+ dump_ordered(path, 'offset')
29
+ end
30
+ end
31
+
32
+ def dump_digest(path)
33
+ outfile = File.join(@outdir, "#{ path }.json")
34
+ infile = File.join(@root, path)
35
+ FileUtils.mkdir_p(File.dirname(outfile))
36
+ puts "Write: #{path}\n"
37
+
38
+ File.open(infile) do |input|
39
+ File.open(outfile, 'w') do |output|
40
+ dump_object(input, output, path, 'digest', nil)
41
+ end
42
+ end
43
+ end
44
+
45
+ def dump_object(input, output, path, order, page)
46
+ obj = GitObjectBrowser::Models::PackIndex.new(input).parse(order, page)
47
+ wrapped = GitObjectBrowser::Models::WrappedObject.new(nil, path, obj)
48
+ output << JSON.pretty_generate(wrapped.to_hash)
49
+ end
50
+
51
+ def dump_ordered(path, order)
52
+ FileUtils.mkdir_p(File.join(@outdir, "#{ path }/#{ order }"))
53
+ page = 1
54
+ loop do
55
+ outfile = File.join(@outdir, "#{ path }/#{ order }/#{ page }.json")
56
+ infile = File.join(@root, path)
57
+ obj = nil
58
+ File.open(infile) do |input|
59
+ obj = GitObjectBrowser::Models::PackIndex.new(input).parse(order, page)
60
+ end
61
+ break if obj.empty?
62
+
63
+ packpath = path.sub(/\.idx\z/, '.pack')
64
+ packfile = File.join(@root, packpath)
65
+ File.open(packfile) do |input|
66
+ obj.load_object_types(input)
67
+ end
68
+
69
+ puts "Write: #{ path }/#{ order }/#{ page }\n"
70
+ File.open(outfile, 'w') do |output|
71
+ wrapped = GitObjectBrowser::Models::WrappedObject.new(nil, path, obj)
72
+ output << JSON.pretty_generate(wrapped.to_hash)
73
+ end
74
+
75
+ if order == 'offset'
76
+ dumper = GitObjectBrowser::Dumper::PackedObjectsDumper.new(@root, @outdir)
77
+ dumper.dump(packpath, obj)
78
+ end
79
+ page += 1
80
+ end
81
+ end
82
+ end
83
+ end
84
+ end
85
+