gitrb 0.2.4 → 0.2.5
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.
- 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
|