gitrb 0.0.3 → 0.0.4

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 CHANGED
@@ -1,6 +1,6 @@
1
1
  Gem::Specification.new do |s|
2
2
  s.name = 'gitrb'
3
- s.version = '0.0.3'
3
+ s.version = '0.0.4'
4
4
  s.summary = 'Pure ruby git implementation'
5
5
  s.author = 'Daniel Mendler'
6
6
  s.email = 'mail@daniel-mendler.de'
@@ -28,6 +28,7 @@ lib/gitrb/tag.rb
28
28
  lib/gitrb/tree.rb
29
29
  lib/gitrb/trie.rb
30
30
  lib/gitrb/user.rb
31
+ lib/gitrb/util.rb
31
32
  test/bare_repository_spec.rb
32
33
  test/benchmark.rb
33
34
  test/commit_spec.rb
data/lib/gitrb/commit.rb CHANGED
@@ -47,19 +47,20 @@ module Gitrb
47
47
 
48
48
  def parse(data)
49
49
  headers, @message = data.split("\n\n", 2)
50
+ repository.encode(@message)
50
51
 
51
52
  headers.split("\n").each do |header|
52
53
  key, value = header.split(' ', 2)
53
54
 
54
55
  case key
55
56
  when 'parent'
56
- @parent << Reference.new(:repository => repository, :id => value)
57
+ @parent << Reference.new(:repository => repository, :id => repository.encode(value))
57
58
  when 'author'
58
- @author = User.parse(value)
59
+ @author = User.parse(repository.encode(value))
59
60
  when 'committer'
60
- @committer = User.parse(value)
61
+ @committer = User.parse(repository.encode(value))
61
62
  when 'tree'
62
- @tree = Reference.new(:repository => repository, :id => value)
63
+ @tree = Reference.new(:repository => repository, :id => repository.encode(value))
63
64
  end
64
65
  end
65
66
 
data/lib/gitrb/object.rb CHANGED
@@ -27,6 +27,10 @@ module Gitrb
27
27
  class Reference
28
28
  undef_method :id, :type rescue nil
29
29
 
30
+ def sha
31
+ id
32
+ end
33
+
30
34
  def initialize(properties = {})
31
35
  @properties = properties
32
36
  @object = nil
data/lib/gitrb/pack.rb CHANGED
@@ -1,5 +1,3 @@
1
- # -*- coding: us-ascii -*-
2
-
3
1
  #
4
2
  # converted from the gitrb project
5
3
  #
@@ -13,10 +11,6 @@
13
11
 
14
12
  require 'zlib'
15
13
 
16
- class String
17
- def getord(i); self[i].ord; end
18
- end
19
-
20
14
  module Gitrb
21
15
  PACK_SIGNATURE = "PACK"
22
16
  PACK_IDX_SIGNATURE = "\377tOc"
@@ -165,7 +159,7 @@ module Gitrb
165
159
 
166
160
  def find_object(sha1)
167
161
  with_idx do |idx|
168
- slot = sha1.getord(0)
162
+ slot = Util.ord(sha1, 0)
169
163
  return nil if !slot
170
164
  first, last = @offsets[slot,2]
171
165
  while first < last
@@ -206,13 +200,13 @@ module Gitrb
206
200
  obj_offset = offset
207
201
  packfile.seek(offset)
208
202
 
209
- c = packfile.read(1).getord(0)
203
+ c = Util.ord(packfile.read(1), 0)
210
204
  size = c & 0xf
211
205
  type = (c >> 4) & 7
212
206
  shift = 4
213
207
  offset += 1
214
208
  while c & 0x80 != 0
215
- c = packfile.read(1).getord(0)
209
+ c = Util.ord(packfile.read(1), 0)
216
210
  size |= ((c & 0x7f) << shift)
217
211
  shift += 7
218
212
  offset += 1
@@ -235,10 +229,10 @@ module Gitrb
235
229
 
236
230
  if type == OBJ_OFS_DELTA
237
231
  i = 0
238
- c = data.getord(i)
232
+ c = Util.ord(data, i)
239
233
  base_offset = c & 0x7f
240
234
  while c & 0x80 != 0
241
- c = data.getord(i += 1)
235
+ c = Util.ord(data, i += 1)
242
236
  base_offset += 1
243
237
  base_offset <<= 7
244
238
  base_offset |= c & 0x7f
@@ -285,18 +279,18 @@ module Gitrb
285
279
  dest_size, pos = patch_delta_header_size(delta, pos)
286
280
  dest = ""
287
281
  while pos < delta.size
288
- c = delta.getord(pos)
282
+ c = Util.ord(delta, pos)
289
283
  pos += 1
290
284
  if c & 0x80 != 0
291
285
  pos -= 1
292
286
  cp_off = cp_size = 0
293
- cp_off = delta.getord(pos += 1) if c & 0x01 != 0
294
- cp_off |= delta.getord(pos += 1) << 8 if c & 0x02 != 0
295
- cp_off |= delta.getord(pos += 1) << 16 if c & 0x04 != 0
296
- cp_off |= delta.getord(pos += 1) << 24 if c & 0x08 != 0
297
- cp_size = delta.getord(pos += 1) if c & 0x10 != 0
298
- cp_size |= delta.getord(pos += 1) << 8 if c & 0x20 != 0
299
- cp_size |= delta.getord(pos += 1) << 16 if c & 0x40 != 0
287
+ cp_off = Util.ord(delta, pos += 1) if c & 0x01 != 0
288
+ cp_off |= Util.ord(delta, pos += 1) << 8 if c & 0x02 != 0
289
+ cp_off |= Util.ord(delta, pos += 1) << 16 if c & 0x04 != 0
290
+ cp_off |= Util.ord(delta, pos += 1) << 24 if c & 0x08 != 0
291
+ cp_size = Util.ord(delta, pos += 1) if c & 0x10 != 0
292
+ cp_size |= Util.ord(delta, pos += 1) << 8 if c & 0x20 != 0
293
+ cp_size |= Util.ord(delta, pos += 1) << 16 if c & 0x40 != 0
300
294
  cp_size = 0x10000 if cp_size == 0
301
295
  pos += 1
302
296
  dest << base[cp_off,cp_size]
@@ -314,7 +308,7 @@ module Gitrb
314
308
  size = 0
315
309
  shift = 0
316
310
  begin
317
- c = delta.getord(pos)
311
+ c = Util.ord(delta, pos)
318
312
  if c == nil
319
313
  raise PackFormatError, 'invalid delta header'
320
314
  end
@@ -4,6 +4,7 @@ require 'yaml'
4
4
  require 'fileutils'
5
5
  require 'logger'
6
6
 
7
+ require 'gitrb/util'
7
8
  require 'gitrb/repository'
8
9
  require 'gitrb/object'
9
10
  require 'gitrb/blob'
@@ -19,13 +20,14 @@ module Gitrb
19
20
  class NotFound < StandardError; end
20
21
 
21
22
  class Repository
22
- attr_reader :path, :index, :root, :branch, :lock_file, :head, :bare
23
+ attr_reader :path, :index, :root, :branch, :lock_file, :head, :encoding
23
24
 
24
25
  # Initialize a repository.
25
26
  def initialize(options = {})
26
27
  @bare = options[:bare] || false
27
28
  @branch = options[:branch] || 'master'
28
29
  @logger = options[:logger] || Logger.new(nil)
30
+ @encoding = options[:encoding] || 'utf-8'
29
31
 
30
32
  @path = options[:path]
31
33
  @path.chomp!('/')
@@ -47,6 +49,23 @@ module Gitrb
47
49
  load
48
50
  end
49
51
 
52
+ # Encode string
53
+ if RUBY_VERSION > '1.9'
54
+ def encode(s)
55
+ # We have binary data which has to be encoded
56
+ s.force_encoding(@encoding)
57
+ end
58
+ else
59
+ def encode(s)
60
+ s
61
+ end
62
+ end
63
+
64
+ # Bare repository?
65
+ def bare?
66
+ @bare
67
+ end
68
+
50
69
  # Switch branch
51
70
  def branch=(branch)
52
71
  @branch = branch
@@ -167,7 +186,7 @@ module Gitrb
167
186
  raise NotFound, "Bad object: #{id}" if content.length != size.to_i
168
187
  else
169
188
  list = @packs.find(id).to_a
170
- return nil if list.size != 1
189
+ raise NotFound, "Object not found" if list.size != 1
171
190
 
172
191
  pack, offset = list.first
173
192
  content, type = pack.get_object(offset)
@@ -177,7 +196,7 @@ module Gitrb
177
196
 
178
197
  @logger.debug "gitrb: Loaded #{id}"
179
198
 
180
- object = Gitrb::Object.factory(type, :repository => self, :id => id, :data => content)
199
+ object = Gitrb::Object.factory(type, :repository => self, :id => encode(id), :data => content)
181
200
  @objects.insert(id, object)
182
201
  object
183
202
  end
@@ -366,7 +385,7 @@ module Gitrb
366
385
  end
367
386
 
368
387
  def legacy_loose_object?(buf)
369
- buf.getord(0) == 0x78 && ((buf.getord(0) << 8) + buf.getord(1)) % 31 == 0
388
+ Util.ord(buf, 0) == 0x78 && ((Util.ord(buf, 0) << 8) + Util.ord(buf, 1)) % 31 == 0
370
389
  end
371
390
 
372
391
  end
data/lib/gitrb/tag.rb CHANGED
@@ -21,9 +21,9 @@ module Gitrb
21
21
  when 'type'
22
22
  @tagtype = value
23
23
  when 'object'
24
- @object = Reference.new(:repository => repository, :id => value)
24
+ @object = Reference.new(:repository => repository, :id => repository.encode(value))
25
25
  when 'tagger'
26
- @tagger = User.parse(value)
26
+ @tagger = User.parse(repository.encode(value))
27
27
  end
28
28
  end
29
29
 
data/lib/gitrb/tree.rb CHANGED
@@ -1,23 +1,3 @@
1
- class StringIO
2
- if RUBY_VERSION > '1.9'
3
- def read_bytes_until(char)
4
- str = ''
5
- while ((ch = getc) != char) && !eof
6
- str << ch
7
- end
8
- str
9
- end
10
- else
11
- def read_bytes_until(char)
12
- str = ''
13
- while ((ch = getc.chr) != char) && !eof
14
- str << ch
15
- end
16
- str
17
- end
18
- end
19
- end
20
-
21
1
  module Gitrb
22
2
 
23
3
  class Tree < Gitrb::Object
@@ -157,9 +137,9 @@ module Gitrb
157
137
  @children.clear
158
138
  data = StringIO.new(data)
159
139
  while !data.eof?
160
- mode = data.read_bytes_until(' ')
161
- name = data.read_bytes_until("\0")
162
- id = data.read(20).unpack("H*").first
140
+ mode = repository.encode Util.read_bytes_until(data, ' ')
141
+ name = repository.encode Util.read_bytes_until(data, "\0")
142
+ id = repository.encode data.read(20).unpack("H*").first
163
143
  @children[name] = Reference.new(:repository => repository, :id => id, :mode => mode)
164
144
  end
165
145
  end
data/lib/gitrb/util.rb ADDED
@@ -0,0 +1,25 @@
1
+ module Gitrb
2
+ module Util
3
+ if RUBY_VERSION > '1.9'
4
+ def self.read_bytes_until(io, char)
5
+ str = ''
6
+ while ((ch = io.getc) != char) && !io.eof
7
+ str << ch
8
+ end
9
+ str
10
+ end
11
+ else
12
+ def self.read_bytes_until(io, char)
13
+ str = ''
14
+ while ((ch = io.getc.chr) != char) && !io.eof
15
+ str << ch
16
+ end
17
+ str
18
+ end
19
+ end
20
+
21
+ def self.ord(s, i)
22
+ s[i].ord
23
+ end
24
+ end
25
+ end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: gitrb
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.3
4
+ version: 0.0.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - Daniel Mendler
@@ -9,7 +9,7 @@ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
11
 
12
- date: 2009-12-15 00:00:00 +01:00
12
+ date: 2009-12-20 00:00:00 +01:00
13
13
  default_executable:
14
14
  dependencies: []
15
15
 
@@ -37,6 +37,7 @@ files:
37
37
  - lib/gitrb/tree.rb
38
38
  - lib/gitrb/trie.rb
39
39
  - lib/gitrb/user.rb
40
+ - lib/gitrb/util.rb
40
41
  - test/bare_repository_spec.rb
41
42
  - test/benchmark.rb
42
43
  - test/commit_spec.rb