gitrb 0.2.4 → 0.2.5
Sign up to get free protection for your applications and to get access to all the features.
- data/gitrb.gemspec +2 -1
- data/lib/gitrb/gitobject.rb +3 -0
- data/lib/gitrb/pack.rb +25 -38
- data/lib/gitrb/reference.rb +3 -0
- data/lib/gitrb/repository.rb +2 -0
- data/lib/gitrb/trie.rb +3 -0
- data/lib/gitrb/user.rb +2 -1
- data/lib/gitrb/version.rb +3 -0
- data/lib/gitrb.rb +1 -0
- metadata +12 -4
data/gitrb.gemspec
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
Gem::Specification.new do |s|
|
2
2
|
s.name = 'gitrb'
|
3
|
-
s.version = '0.2.
|
3
|
+
s.version = '0.2.5'
|
4
4
|
s.summary = 'Pure ruby git implementation'
|
5
5
|
s.author = 'Daniel Mendler'
|
6
6
|
s.email = 'mail@daniel-mendler.de'
|
@@ -27,6 +27,7 @@ lib/gitrb/tree.rb
|
|
27
27
|
lib/gitrb/trie.rb
|
28
28
|
lib/gitrb/user.rb
|
29
29
|
lib/gitrb/util.rb
|
30
|
+
lib/gitrb/version.rb
|
30
31
|
test/bare_repository_test.rb
|
31
32
|
test/benchmark.rb
|
32
33
|
test/commit_test.rb
|
data/lib/gitrb/gitobject.rb
CHANGED
data/lib/gitrb/pack.rb
CHANGED
@@ -10,16 +10,6 @@
|
|
10
10
|
#
|
11
11
|
|
12
12
|
module Gitrb
|
13
|
-
PACK_SIGNATURE = "PACK"
|
14
|
-
PACK_IDX_SIGNATURE = "\377tOc"
|
15
|
-
|
16
|
-
OBJ_NONE = 0
|
17
|
-
OBJ_COMMIT = 1
|
18
|
-
OBJ_TREE = 2
|
19
|
-
OBJ_BLOB = 3
|
20
|
-
OBJ_TAG = 4
|
21
|
-
|
22
|
-
OBJ_TYPES = [nil, 'commit', 'tree', 'blob', 'tag'].freeze
|
23
13
|
|
24
14
|
class FileWindow
|
25
15
|
def initialize(file, version = 1)
|
@@ -42,8 +32,15 @@ module Gitrb
|
|
42
32
|
class PackFormatError < StandardError; end
|
43
33
|
|
44
34
|
class Pack
|
35
|
+
PACK_IDX_SIGNATURE = "\377tOc"
|
36
|
+
|
37
|
+
OBJ_COMMIT = 1
|
38
|
+
OBJ_TREE = 2
|
39
|
+
OBJ_BLOB = 3
|
40
|
+
OBJ_TAG = 4
|
45
41
|
OBJ_OFS_DELTA = 6
|
46
42
|
OBJ_REF_DELTA = 7
|
43
|
+
OBJ_TYPES = [nil, 'commit', 'tree', 'blob', 'tag'].freeze
|
47
44
|
|
48
45
|
FanOutCount = 256
|
49
46
|
SHA1Size = 20
|
@@ -55,8 +52,6 @@ module Gitrb
|
|
55
52
|
EntrySize = OffsetSize + SHA1Size
|
56
53
|
EntrySizeV2 = SHA1Size + CrcSize + OffsetSize
|
57
54
|
|
58
|
-
attr_reader :name
|
59
|
-
|
60
55
|
def initialize(file)
|
61
56
|
file = file[0...-3] + 'pack' if file =~ /\.idx$/
|
62
57
|
@name = file
|
@@ -100,25 +95,23 @@ module Gitrb
|
|
100
95
|
ver = idxfile.read(4).unpack("N")[0]
|
101
96
|
|
102
97
|
if sig == PACK_IDX_SIGNATURE
|
103
|
-
if
|
104
|
-
raise PackFormatError, "pack #@name has unknown pack file version #{ver}"
|
105
|
-
end
|
98
|
+
raise PackFormatError, "pack #@name has unknown pack file version #{ver}" if ver != 2
|
106
99
|
@version = 2
|
107
100
|
else
|
108
101
|
@version = 1
|
109
102
|
end
|
110
103
|
|
111
104
|
idx = FileWindow.new(idxfile, @version)
|
112
|
-
|
105
|
+
yield idx
|
106
|
+
ensure
|
113
107
|
idxfile.close
|
114
|
-
result
|
115
108
|
end
|
116
109
|
|
117
110
|
def with_pack
|
118
111
|
packfile = File.open(@name, 'rb')
|
119
|
-
|
112
|
+
yield packfile
|
113
|
+
ensure
|
120
114
|
packfile.close
|
121
|
-
result
|
122
115
|
end
|
123
116
|
|
124
117
|
def init_pack
|
@@ -126,9 +119,7 @@ module Gitrb
|
|
126
119
|
@offsets = [0]
|
127
120
|
FanOutCount.times do |i|
|
128
121
|
pos = idx[i * IdxOffsetSize,IdxOffsetSize].unpack('N')[0]
|
129
|
-
if pos < @offsets[i]
|
130
|
-
raise PackFormatError, "pack #@name has discontinuous index #{i}"
|
131
|
-
end
|
122
|
+
raise PackFormatError, "pack #@name has discontinuous index #{i}" if pos < @offsets[i]
|
132
123
|
@offsets << pos
|
133
124
|
end
|
134
125
|
@size = @offsets[-1]
|
@@ -252,27 +243,24 @@ module Gitrb
|
|
252
243
|
outdata = ""
|
253
244
|
with_pack do |packfile|
|
254
245
|
packfile.seek(offset)
|
255
|
-
|
256
|
-
|
257
|
-
|
258
|
-
|
259
|
-
raise PackFormatError, 'error reading pack data'
|
246
|
+
begin
|
247
|
+
zstream = Zlib::Inflate.new
|
248
|
+
while outdata.size < destsize
|
249
|
+
indata = packfile.read(0xFFFF)
|
250
|
+
raise PackFormatError, 'error reading pack data' if indata.size == 0
|
251
|
+
outdata << zstream.inflate(indata)
|
260
252
|
end
|
261
|
-
outdata
|
262
|
-
|
263
|
-
|
264
|
-
raise PackFormatError, 'error reading pack data'
|
253
|
+
raise PackFormatError, 'error reading pack data' if outdata.size > destsize
|
254
|
+
ensure
|
255
|
+
zstream.close
|
265
256
|
end
|
266
|
-
zstr.close
|
267
257
|
end
|
268
258
|
outdata
|
269
259
|
end
|
270
260
|
|
271
261
|
def patch_delta(base, delta)
|
272
262
|
src_size, pos = patch_delta_header_size(delta, 0)
|
273
|
-
if src_size != base.size
|
274
|
-
raise PackFormatError, 'invalid delta data'
|
275
|
-
end
|
263
|
+
raise PackFormatError, 'invalid delta data' if src_size != base.size
|
276
264
|
|
277
265
|
dest_size, pos = patch_delta_header_size(delta, pos)
|
278
266
|
dest = ""
|
@@ -307,9 +295,7 @@ module Gitrb
|
|
307
295
|
shift = 0
|
308
296
|
begin
|
309
297
|
c = delta[pos].ord
|
310
|
-
if c == nil
|
311
|
-
raise PackFormatError, 'invalid delta header'
|
312
|
-
end
|
298
|
+
raise PackFormatError, 'invalid delta header' if c == nil
|
313
299
|
pos += 1
|
314
300
|
size |= (c & 0x7f) << shift
|
315
301
|
shift += 7
|
@@ -317,4 +303,5 @@ module Gitrb
|
|
317
303
|
[size, pos]
|
318
304
|
end
|
319
305
|
end
|
306
|
+
|
320
307
|
end
|
data/lib/gitrb/reference.rb
CHANGED
data/lib/gitrb/repository.rb
CHANGED
data/lib/gitrb/trie.rb
CHANGED
data/lib/gitrb/user.rb
CHANGED
data/lib/gitrb.rb
CHANGED
metadata
CHANGED
@@ -1,12 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: gitrb
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
+
hash: 29
|
4
5
|
prerelease: false
|
5
6
|
segments:
|
6
7
|
- 0
|
7
8
|
- 2
|
8
|
-
-
|
9
|
-
version: 0.2.
|
9
|
+
- 5
|
10
|
+
version: 0.2.5
|
10
11
|
platform: ruby
|
11
12
|
authors:
|
12
13
|
- Daniel Mendler
|
@@ -14,16 +15,18 @@ autorequire:
|
|
14
15
|
bindir: bin
|
15
16
|
cert_chain: []
|
16
17
|
|
17
|
-
date: 2010-09-
|
18
|
+
date: 2010-09-23 00:00:00 +02:00
|
18
19
|
default_executable:
|
19
20
|
dependencies:
|
20
21
|
- !ruby/object:Gem::Dependency
|
21
22
|
name: bacon
|
22
23
|
prerelease: false
|
23
24
|
requirement: &id001 !ruby/object:Gem::Requirement
|
25
|
+
none: false
|
24
26
|
requirements:
|
25
27
|
- - ">="
|
26
28
|
- !ruby/object:Gem::Version
|
29
|
+
hash: 3
|
27
30
|
segments:
|
28
31
|
- 0
|
29
32
|
version: "0"
|
@@ -54,6 +57,7 @@ files:
|
|
54
57
|
- lib/gitrb/trie.rb
|
55
58
|
- lib/gitrb/user.rb
|
56
59
|
- lib/gitrb/util.rb
|
60
|
+
- lib/gitrb/version.rb
|
57
61
|
- test/bare_repository_test.rb
|
58
62
|
- test/benchmark.rb
|
59
63
|
- test/commit_test.rb
|
@@ -73,23 +77,27 @@ rdoc_options: []
|
|
73
77
|
require_paths:
|
74
78
|
- lib
|
75
79
|
required_ruby_version: !ruby/object:Gem::Requirement
|
80
|
+
none: false
|
76
81
|
requirements:
|
77
82
|
- - ">="
|
78
83
|
- !ruby/object:Gem::Version
|
84
|
+
hash: 3
|
79
85
|
segments:
|
80
86
|
- 0
|
81
87
|
version: "0"
|
82
88
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
89
|
+
none: false
|
83
90
|
requirements:
|
84
91
|
- - ">="
|
85
92
|
- !ruby/object:Gem::Version
|
93
|
+
hash: 3
|
86
94
|
segments:
|
87
95
|
- 0
|
88
96
|
version: "0"
|
89
97
|
requirements: []
|
90
98
|
|
91
99
|
rubyforge_project: gitrb
|
92
|
-
rubygems_version: 1.3.
|
100
|
+
rubygems_version: 1.3.7
|
93
101
|
signing_key:
|
94
102
|
specification_version: 3
|
95
103
|
summary: Pure ruby git implementation
|