gitrb 0.0.8 → 0.0.9

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.8'
3
+ s.version = '0.0.9'
4
4
  s.summary = 'Pure ruby git implementation'
5
5
  s.author = 'Daniel Mendler'
6
6
  s.email = 'mail@daniel-mendler.de'
@@ -21,8 +21,9 @@ lib/gitrb.rb
21
21
  lib/gitrb/blob.rb
22
22
  lib/gitrb/commit.rb
23
23
  lib/gitrb/diff.rb
24
- lib/gitrb/object.rb
24
+ lib/gitrb/gitobject.rb
25
25
  lib/gitrb/pack.rb
26
+ lib/gitrb/reference.rb
26
27
  lib/gitrb/repository.rb
27
28
  lib/gitrb/tag.rb
28
29
  lib/gitrb/tree.rb
data/lib/gitrb/blob.rb CHANGED
@@ -1,7 +1,7 @@
1
1
  module Gitrb
2
2
 
3
3
  # This class stores the raw string data of a blob
4
- class Blob < Gitrb::Object
4
+ class Blob < GitObject
5
5
 
6
6
  attr_accessor :data, :mode
7
7
 
@@ -9,15 +9,15 @@ module Gitrb
9
9
  def initialize(options = {})
10
10
  super(options)
11
11
  @data = options[:data]
12
- @mode = options[:mode] || "100644"
12
+ @mode = options[:mode] || '100644'
13
13
  end
14
14
 
15
15
  def type
16
- 'blob'
16
+ :blob
17
17
  end
18
18
 
19
19
  def ==(other)
20
- Blob === other and id == other.id
20
+ Blob === other && id == other.id
21
21
  end
22
22
 
23
23
  def dump
data/lib/gitrb/commit.rb CHANGED
@@ -1,11 +1,11 @@
1
1
  module Gitrb
2
2
 
3
- class Commit < Gitrb::Object
4
- attr_accessor :tree, :parent, :author, :committer, :message
3
+ class Commit < GitObject
4
+ attr_accessor :tree, :parents, :author, :committer, :message
5
5
 
6
6
  def initialize(options = {})
7
7
  super(options)
8
- @parent = [options[:parent]].flatten.compact
8
+ @parents = [options[:parents]].flatten.compact
9
9
  @tree = options[:tree]
10
10
  @author = options[:author]
11
11
  @committer = options[:committer]
@@ -14,7 +14,7 @@ module Gitrb
14
14
  end
15
15
 
16
16
  def type
17
- 'commit'
17
+ :commit
18
18
  end
19
19
 
20
20
  def date
@@ -22,7 +22,7 @@ module Gitrb
22
22
  end
23
23
 
24
24
  def ==(other)
25
- Commit === other and id == other.id
25
+ Commit === other && id == other.id
26
26
  end
27
27
 
28
28
  def save
@@ -32,7 +32,7 @@ module Gitrb
32
32
 
33
33
  def dump
34
34
  [ "tree #{tree.id}",
35
- @parent.map { |p| "parent #{p.id}" },
35
+ @parents.map { |p| "parent #{p.id}" },
36
36
  "author #{author.dump}",
37
37
  "committer #{committer.dump}",
38
38
  '',
@@ -54,7 +54,7 @@ module Gitrb
54
54
 
55
55
  case key
56
56
  when 'parent'
57
- @parent << Reference.new(:repository => repository, :id => repository.set_encoding(value))
57
+ @parents << Reference.new(:repository => repository, :id => repository.set_encoding(value))
58
58
  when 'author'
59
59
  @author = User.parse(repository.set_encoding(value))
60
60
  when 'committer'
data/lib/gitrb/diff.rb CHANGED
@@ -1,21 +1,3 @@
1
1
  module Gitrb
2
-
3
- class Diff
4
- attr_reader :from, :to, :patch, :deletions, :insertions
5
-
6
- def initialize(from, to, patch)
7
- @from = from
8
- @to = to
9
- @patch = patch
10
- @deletions = @insertions = 0
11
- @patch.split("\n").each do |line|
12
- if line[0..0] == '-'
13
- @deletions += 1
14
- elsif line[0..0] == '+'
15
- @insertions += 1
16
- end
17
- end
18
- end
19
- end
20
-
2
+ Diff = Struct.new(:from, :to, :patch)
21
3
  end
@@ -0,0 +1,26 @@
1
+ module Gitrb
2
+ class GitObject
3
+ attr_accessor :repository, :id
4
+
5
+ def initialize(options = {})
6
+ @repository = options[:repository]
7
+ @id = options[:id]
8
+ end
9
+
10
+ def object
11
+ self
12
+ end
13
+
14
+ @types = {}
15
+
16
+ def self.inherited(subclass)
17
+ @types[subclass.name[7..-1].downcase] = subclass
18
+ end
19
+
20
+ def self.factory(type, *args)
21
+ klass = @types[type]
22
+ raise NotImplementedError, "Object type not supported: #{type}" if !klass
23
+ klass.new(*args)
24
+ end
25
+ end
26
+ end
data/lib/gitrb/pack.rb CHANGED
@@ -9,8 +9,6 @@
9
9
  # provides native ruby access to git objects and pack files
10
10
  #
11
11
 
12
- require 'zlib'
13
-
14
12
  module Gitrb
15
13
  PACK_SIGNATURE = "PACK"
16
14
  PACK_IDX_SIGNATURE = "\377tOc"
@@ -1,36 +1,7 @@
1
1
  module Gitrb
2
- class Object
3
- attr_accessor :repository, :id
4
- alias sha id
5
-
6
- def initialize(options = {})
7
- @repository = options[:repository]
8
- @id = options[:id] || options[:sha]
9
- end
10
-
11
- CLASS = {}
12
-
13
- def object
14
- self
15
- end
16
-
17
- def self.inherited(subclass)
18
- CLASS[subclass.name[7..-1].downcase] = subclass
19
- end
20
-
21
- def self.factory(type, *args)
22
- klass = CLASS[type] or raise NotImplementedError, "Object type not supported: #{type}"
23
- klass.new(*args)
24
- end
25
- end
26
-
27
2
  class Reference
28
3
  undef_method :id, :type rescue nil
29
4
 
30
- def sha
31
- id
32
- end
33
-
34
5
  def initialize(properties = {})
35
6
  @properties = properties
36
7
  @object = nil
@@ -42,7 +13,7 @@ module Gitrb
42
13
  @object.send(name, *args, &block)
43
14
  elsif name == :type && (mode = @properties['mode'] || @properties[:mode])
44
15
  mode = mode.to_i(8)
45
- return (mode & 0x4000 == 0x4000) ? 'tree' : 'blob'
16
+ return (mode & 0x4000 == 0x4000) ? :tree : :blob
46
17
  elsif @properties.include?(name)
47
18
  return @properties[name]
48
19
  elsif @properties.include?(name.to_s)
@@ -1,33 +1,25 @@
1
- require 'zlib'
2
- require 'digest/sha1'
3
- require 'yaml'
4
- require 'fileutils'
5
- require 'logger'
6
- require 'enumerator'
7
-
8
- require 'gitrb/util'
9
- require 'gitrb/repository'
10
- require 'gitrb/object'
11
- require 'gitrb/blob'
12
- require 'gitrb/diff'
13
- require 'gitrb/tree'
14
- require 'gitrb/tag'
15
- require 'gitrb/user'
16
- require 'gitrb/pack'
17
- require 'gitrb/commit'
18
- require 'gitrb/trie'
19
-
20
1
  module Gitrb
21
2
  class NotFound < StandardError; end
22
3
 
23
- class Repository
24
- attr_reader :path, :index, :root, :branch, :lock_file, :head, :encoding
4
+ class CommandError < StandardError
5
+ attr_reader :command, :args, :output
6
+
7
+ def initialize(command, args, output)
8
+ super("#{command} failed")
9
+ @command = command
10
+ @args = args
11
+ @output = output
12
+ end
13
+ end
25
14
 
26
- SHA_PATTERN = /[A-Fa-f0-9]{5,40}/
27
- REVISION_PATTERN = /[\w\-\.]+([\^~](\d+)?)*/
15
+ class Repository
16
+ attr_reader :path, :root, :branch, :head, :encoding
28
17
 
29
- # Encoding stuff
18
+ SHA_PATTERN = /^[A-Fa-f0-9]{5,40}$/
19
+ REVISION_PATTERN = /^[\w\-\.]+([\^~](\d+)?)*$/
30
20
  DEFAULT_ENCODING = 'utf-8'
21
+ MIN_GIT_VERSION = '1.6.0'
22
+ LOCK = 'Gitrb.Repository.lock'
31
23
 
32
24
  if RUBY_VERSION > '1.9'
33
25
  def set_encoding(s); s.force_encoding(@encoding); end
@@ -46,17 +38,8 @@ module Gitrb
46
38
  @path.chomp!('/')
47
39
  @path += '/.git' if !@bare
48
40
 
49
- if options[:create] && !File.exists?("#{@path}/objects")
50
- FileUtils.mkpath(@path) if !File.exists?(@path)
51
- raise ArgumentError, "Not a valid Git repository: '#{@path}'" if !File.directory?(@path)
52
- if @bare
53
- Dir.chdir(@path) { git_init('--bare') }
54
- else
55
- Dir.chdir(@path[0..-6]) { git_init }
56
- end
57
- else
58
- raise ArgumentError, "Not a valid Git repository: '#{@path}'" if !File.directory?("#{@path}/objects")
59
- end
41
+ check_git_version if !options[:ignore_version]
42
+ open_repository(options[:create])
60
43
 
61
44
  load_packs
62
45
  load
@@ -75,7 +58,7 @@ module Gitrb
75
58
 
76
59
  # Has our repository been changed on disk?
77
60
  def changed?
78
- head.nil? or head.id != read_head_id
61
+ head.nil? || head.id != read_head_id
79
62
  end
80
63
 
81
64
  # Load the repository, if it has been changed on disk.
@@ -85,17 +68,17 @@ module Gitrb
85
68
 
86
69
  # Is there any transaction going on?
87
70
  def in_transaction?
88
- Thread.current['gitrb_repository_lock']
71
+ Thread.current[LOCK]
89
72
  end
90
73
 
91
74
  # Diff
92
75
  def diff(from, to, path = nil)
93
76
  if from && !(Commit === from)
94
- raise ArgumentError if !(String === from)
77
+ raise ArgumentError, "Invalid sha: #{from}" if from !~ SHA_PATTERN
95
78
  from = Reference.new(:repository => self, :id => from)
96
79
  end
97
80
  if !(Commit === to)
98
- raise ArgumentError if !(String === to)
81
+ raise ArgumentError, "Invalid sha: #{to}" if to !~ SHA_PATTERN
99
82
  to = Reference.new(:repository => self, :id => to)
100
83
  end
101
84
  Diff.new(from, to, git_diff_tree('--root', '-u', '--full-index', from && from.id, to.id, '--', path))
@@ -131,7 +114,7 @@ module Gitrb
131
114
 
132
115
  commit = Commit.new(:repository => self,
133
116
  :tree => root,
134
- :parent => head,
117
+ :parents => head,
135
118
  :author => author,
136
119
  :committer => committer,
137
120
  :message => message)
@@ -145,17 +128,21 @@ module Gitrb
145
128
 
146
129
  # Returns a list of commits starting from head commit.
147
130
  def log(limit = 10, start = nil, path = nil)
148
- ### FIX: tformat need --pretty option
149
- args = ['--pretty=tformat:%H%n%P%n%T%n%an%n%ae%n%at%n%cn%n%ce%n%ct%n%x00%s%n%b%x00', "-#{limit}", ]
150
- args << start if start
151
- args << "--" << path if path && !path.empty?
131
+ limit = limit.to_s
132
+ start = start.to_s
133
+ raise ArgumentError, "Invalid limit: #{limit}" if limit !~ /^\d+$/
134
+ raise ArgumentError, "Invalid commit: #{start}" if start =~ /^\-/
135
+ args = ['--pretty=tformat:%H%n%P%n%T%n%an%n%ae%n%at%n%cn%n%ce%n%ct%n%x00%s%n%b%x00', "-#{limit}" ]
136
+ args << start if !start.empty?
137
+ args << '--' << path if path && !path.empty?
152
138
  log = git_log(*args).split(/\n*\x00\n*/)
153
139
  commits = []
154
140
  log.each_slice(2) do |data, message|
155
141
  data = data.split("\n")
142
+ parents = data[1].empty? ? nil : data[1].split(' ').map {|id| Reference.new(:repository => self, :id => id) }
156
143
  commits << Commit.new(:repository => self,
157
144
  :id => data[0],
158
- :parent => data[1].empty? ? nil : Reference.new(:repository => self, :id => data[1]),
145
+ :parents => parents,
159
146
  :tree => Reference.new(:repository => self, :id => data[2]),
160
147
  :author => User.new(data[3], data[4], Time.at(data[5].to_i)),
161
148
  :committer => User.new(data[6], data[7], Time.at(data[8].to_i)),
@@ -171,15 +158,17 @@ module Gitrb
171
158
  #
172
159
  # Returns a tree, blob, commit or tag object.
173
160
  def get(id)
174
- raise NotFound, "No id given" if id.nil?
161
+ raise ArgumentError, 'No id given' if !(String === id)
162
+
175
163
  if id =~ SHA_PATTERN
176
- raise NotFound, "Sha too short" if id.length < 5
164
+ raise NotFound, "Sha too short: #{id}" if id.length < 5
177
165
  list = @objects.find(id).to_a
166
+ raise NotFound, "Sha is ambiguous: #{id}" if list.size > 1
178
167
  return list.first if list.size == 1
179
168
  elsif id =~ REVISION_PATTERN
180
169
  list = git_rev_parse(id).split("\n") rescue nil
181
- raise NotFound, "Revision not found" if !list || list.empty?
182
- raise NotFound, "Revision is ambiguous" if list.size > 1
170
+ raise NotFound, "Revision not found: #{id}" if !list || list.empty?
171
+ raise NotFound, "Revision is ambiguous: #{id}" if list.size > 1
183
172
  id = list.first
184
173
  end
185
174
 
@@ -188,7 +177,7 @@ module Gitrb
188
177
  path = object_path(id)
189
178
  if File.exists?(path) || (glob = Dir.glob(path + '*')).size >= 1
190
179
  if glob
191
- raise NotFound, "Sha is ambiguous" if glob.size > 1
180
+ raise NotFound, "Sha is ambiguous: #{id}" if glob.size > 1
192
181
  path = glob.first
193
182
  id = path[-41..-40] + path[-38..-1]
194
183
  end
@@ -203,12 +192,12 @@ module Gitrb
203
192
  raise NotFound, "Bad object: #{id}" if content.length != size.to_i
204
193
  else
205
194
  trie = @packs.find(id)
206
- raise NotFound, "Object not found" if !trie
195
+ raise NotFound, "Object not found: #{id}" if !trie
207
196
 
208
197
  id += trie.key[-(41 - id.length)...-1]
209
198
 
210
199
  list = trie.to_a
211
- raise NotFound, "Sha is ambiguous" if list.size > 1
200
+ raise NotFound, "Sha is ambiguous: #{id}" if list.size > 1
212
201
 
213
202
  pack, offset = list.first
214
203
  content, type = pack.get_object(offset)
@@ -217,14 +206,14 @@ module Gitrb
217
206
  @logger.debug "gitrb: Loaded #{id}"
218
207
 
219
208
  set_encoding(id)
220
- object = Gitrb::Object.factory(type, :repository => self, :id => id, :data => content)
209
+ object = GitObject.factory(type, :repository => self, :id => id, :data => content)
221
210
  @objects.insert(id, object)
222
211
  object
223
212
  end
224
213
 
225
- def get_tree(id) get_type(id, 'tree') end
226
- def get_blob(id) get_type(id, 'blob') end
227
- def get_commit(id) get_type(id, 'commit') end
214
+ def get_tree(id) get_type(id, :tree) end
215
+ def get_blob(id) get_type(id, :blob) end
216
+ def get_commit(id) get_type(id, :commit) end
228
217
 
229
218
  # Write a raw object to the repository.
230
219
  #
@@ -258,22 +247,22 @@ module Gitrb
258
247
  cmd = name.to_s
259
248
  if cmd[0..3] == 'git_'
260
249
  ENV['GIT_DIR'] = path
261
- args = args.flatten.compact.map {|s| "'" + s.to_s.gsub("'", "'\\\\''") + "'" }.join(' ')
262
250
  cmd = cmd[4..-1].tr('_', '-')
263
- cmd = "git #{cmd} #{args} 2>&1"
251
+ args = args.flatten.compact.map {|s| "'" + s.to_s.gsub("'", "'\\\\''") + "'" }.join(' ')
252
+ cmdline = "git #{cmd} #{args} 2>&1"
264
253
 
265
- @logger.debug "gitrb: #{cmd}"
254
+ @logger.debug "gitrb: #{cmdline}"
266
255
 
267
256
  # Read in binary mode (ascii-8bit) and convert afterwards
268
257
  out = if block_given?
269
- IO.popen(cmd, 'rb', &block)
258
+ IO.popen(cmdline, 'rb', &block)
270
259
  else
271
- set_encoding IO.popen(cmd, 'rb') {|io| io.read }
260
+ set_encoding IO.popen(cmdline, 'rb') {|io| io.read }
272
261
  end
273
262
 
274
263
  if $?.exitstatus > 0
275
264
  return '' if $?.exitstatus == 1 && out == ''
276
- raise RuntimeError, "#{cmd}: #{out}"
265
+ raise CommandError.new("git #{cmd}", args, out)
277
266
  end
278
267
 
279
268
  out
@@ -305,16 +294,42 @@ module Gitrb
305
294
  end
306
295
  end
307
296
 
308
- protected
297
+ private
298
+
299
+ def check_git_version
300
+ version = git_version
301
+ raise "Invalid git version: #{version}" if version !~ /^git version ([\d\.]+)$/
302
+ a = $1.split('.').map {|s| s.to_i }
303
+ b = MIN_GIT_VERSION.split('.').map {|s| s.to_i }
304
+ while !a.empty? && !b.empty? && a.first == b.first
305
+ a.shift
306
+ b.shift
307
+ end
308
+ raise "Minimum required git version is #{MIN_GIT_VERSION}" if a.first.to_i < b.first.to_i
309
+ end
310
+
311
+ def open_repository(create)
312
+ if create && !File.exists?("#{@path}/objects")
313
+ FileUtils.mkpath(@path) if !File.exists?(@path)
314
+ raise ArgumentError, "Not a valid Git repository: '#{@path}'" if !File.directory?(@path)
315
+ if @bare
316
+ Dir.chdir(@path) { git_init '--bare' }
317
+ else
318
+ Dir.chdir(@path[0..-6]) { git_init }
319
+ end
320
+ else
321
+ raise ArgumentError, "Not a valid Git repository: '#{@path}'" if !File.directory?("#{@path}/objects")
322
+ end
323
+ end
309
324
 
310
325
  # Start a transaction.
311
326
  #
312
327
  # Tries to get lock on lock file, load the this repository if
313
328
  # has changed in the repository.
314
329
  def start_transaction
315
- file = File.open("#{head_path}.lock", "w")
330
+ file = File.open("#{head_path}.lock", 'w')
316
331
  file.flock(File::LOCK_EX)
317
- Thread.current['gitrb_repository_lock'] = file
332
+ Thread.current[LOCK] = file
318
333
  refresh
319
334
  end
320
335
 
@@ -331,8 +346,8 @@ module Gitrb
331
346
  #
332
347
  # Release the lock file.
333
348
  def finish_transaction
334
- Thread.current['gitrb_repository_lock'].close rescue nil
335
- Thread.current['gitrb_repository_lock'] = nil
349
+ Thread.current[LOCK].close rescue nil
350
+ Thread.current[LOCK] = nil
336
351
  File.unlink("#{head_path}.lock") rescue nil
337
352
  end
338
353
 
@@ -392,7 +407,7 @@ module Gitrb
392
407
  if File.exists?(head_path)
393
408
  File.read(head_path).strip
394
409
  elsif File.exists?("#{path}/packed-refs")
395
- File.open("#{path}/packed-refs", "rb") do |io|
410
+ File.open("#{path}/packed-refs", 'rb') do |io|
396
411
  while line = io.gets
397
412
  line.strip!
398
413
  next if line[0..0] == '#'
@@ -404,7 +419,7 @@ module Gitrb
404
419
  end
405
420
 
406
421
  def write_head_id(id)
407
- File.open(head_path, "wb") {|file| file.write(id) }
422
+ File.open(head_path, 'wb') {|file| file.write(id) }
408
423
  end
409
424
 
410
425
  def legacy_loose_object?(buf)
data/lib/gitrb/tag.rb CHANGED
@@ -1,6 +1,6 @@
1
1
  module Gitrb
2
2
 
3
- class Tag < Gitrb::Object
3
+ class Tag < GitObject
4
4
  attr_accessor :object, :tagtype, :tagger, :message
5
5
 
6
6
  def initialize(options = {})
@@ -9,7 +9,7 @@ module Gitrb
9
9
  end
10
10
 
11
11
  def ==(other)
12
- Tag === other and id == other.id
12
+ Tag === other && id == other.id
13
13
  end
14
14
 
15
15
  def parse(data)
data/lib/gitrb/tree.rb CHANGED
@@ -1,6 +1,6 @@
1
1
  module Gitrb
2
2
 
3
- class Tree < Gitrb::Object
3
+ class Tree < GitObject
4
4
  include Enumerable
5
5
 
6
6
  attr_accessor :mode, :repository
@@ -15,7 +15,7 @@ module Gitrb
15
15
  end
16
16
 
17
17
  def type
18
- 'tree'
18
+ :tree
19
19
  end
20
20
 
21
21
  def ==(other)
@@ -30,7 +30,7 @@ module Gitrb
30
30
 
31
31
  # Has this tree been modified?
32
32
  def modified?
33
- @modified || @children.values.any? { |entry| entry.type == 'tree' && entry.modified? }
33
+ @modified || @children.values.any? { |entry| entry.type == :tree && entry.modified? }
34
34
  end
35
35
 
36
36
  def dump
@@ -61,7 +61,7 @@ module Gitrb
61
61
  if path.size == 1
62
62
  entry
63
63
  elsif entry
64
- raise RuntimeError, 'Not a tree' if entry.type != 'tree'
64
+ raise 'Not a tree' if entry.type != :tree
65
65
  entry[path[1..-1]]
66
66
  end
67
67
  end
@@ -70,9 +70,9 @@ module Gitrb
70
70
  def []=(path, entry)
71
71
  path = normalize_path(path)
72
72
  if path.empty?
73
- raise RuntimeError, 'Empty path'
73
+ raise 'Empty path'
74
74
  elsif path.size == 1
75
- raise RuntimeError, 'No blob or tree' if entry.type != 'tree' && entry.type != 'blob'
75
+ raise 'No blob or tree' if entry.type != :tree && entry.type != :blob
76
76
  entry.repository = repository
77
77
  @modified = true
78
78
  @children[path.first] = entry
@@ -82,7 +82,7 @@ module Gitrb
82
82
  tree = @children[path.first] = Tree.new(:repository => repository)
83
83
  @modified = true
84
84
  end
85
- raise RuntimeError, 'Not a tree' if tree.type != 'tree'
85
+ raise 'Not a tree' if tree.type != :tree
86
86
  tree[path[1..-1]] = entry
87
87
  end
88
88
  end
@@ -91,13 +91,13 @@ module Gitrb
91
91
  def delete(path)
92
92
  path = normalize_path(path)
93
93
  if path.empty?
94
- raise RuntimeError, 'Empty path'
94
+ raise 'Empty path'
95
95
  elsif path.size == 1
96
96
  @modified = true
97
97
  @children.delete(path.first)
98
98
  else
99
99
  tree = @children[path.first]
100
- raise RuntimeError, 'Not a tree' if tree.type != 'tree'
100
+ raise 'Not a tree' if tree.type != :tree
101
101
  tree.delete(path[1..-1])
102
102
  end
103
103
  end
data/lib/gitrb/user.rb CHANGED
@@ -1,14 +1,13 @@
1
1
  module Gitrb
2
2
 
3
- class User
4
- attr_accessor :name, :email, :date
5
-
3
+ class User < Struct.new(:name, :email, :date)
6
4
  def initialize(name, email, date = Time.now)
7
- @name, @email, @date = name, email, date
5
+ super
8
6
  end
9
7
 
10
8
  def dump
11
- "#{name} <#{email}> #{date.localtime.to_i} #{date.gmt_offset < 0 ? '-' : '+'}#{date.gmt_offset / 60}"
9
+ off = date.gmt_offset / 60
10
+ '%s <%s> %d %s%02d%02d' % [name, email, date.to_i, off < 0 ? '-' : '+', off / 60, off % 60]
12
11
  end
13
12
 
14
13
  def self.parse(user)
data/lib/gitrb.rb CHANGED
@@ -1 +1,18 @@
1
+ require 'zlib'
2
+ require 'digest/sha1'
3
+ require 'fileutils'
4
+ require 'logger'
5
+ require 'enumerator'
6
+
7
+ require 'gitrb/util'
8
+ require 'gitrb/gitobject'
9
+ require 'gitrb/reference'
10
+ require 'gitrb/blob'
11
+ require 'gitrb/diff'
12
+ require 'gitrb/tree'
13
+ require 'gitrb/tag'
14
+ require 'gitrb/user'
15
+ require 'gitrb/pack'
16
+ require 'gitrb/commit'
17
+ require 'gitrb/trie'
1
18
  require 'gitrb/repository'
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.8
4
+ version: 0.0.9
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: 2010-03-09 00:00:00 +01:00
12
+ date: 2010-05-21 00:00:00 +02:00
13
13
  default_executable:
14
14
  dependencies: []
15
15
 
@@ -30,8 +30,9 @@ files:
30
30
  - lib/gitrb/blob.rb
31
31
  - lib/gitrb/commit.rb
32
32
  - lib/gitrb/diff.rb
33
- - lib/gitrb/object.rb
33
+ - lib/gitrb/gitobject.rb
34
34
  - lib/gitrb/pack.rb
35
+ - lib/gitrb/reference.rb
35
36
  - lib/gitrb/repository.rb
36
37
  - lib/gitrb/tag.rb
37
38
  - lib/gitrb/tree.rb