Skip to content

Commit 07ebb95

Browse files
author
scott Chacon
committed
added Matthias and Simon to credits for the gitrb code
fixed an issue with raw object tree formatting added ls_tree implementation in raw git
1 parent 3fddf30 commit 07ebb95

File tree

12 files changed

+139
-21
lines changed

12 files changed

+139
-21
lines changed

camping/gitweb.rb

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -107,10 +107,7 @@ def get repo_id, path
107107
class Commit < R '/commit/(\d+)/(\w+)'
108108
def get repo_id, sha
109109
@repo = Repository.find repo_id
110-
logger = Logger.new('/tmp/git.log')
111-
logger.level = Logger::INFO
112-
113-
@git = Git.bare(@repo.path, :log => logger)
110+
@git = Git.bare(@repo.path)
114111
@commit = @git.gcommit(sha)
115112
render :commit
116113
end
@@ -119,7 +116,10 @@ def get repo_id, sha
119116
class Tree < R '/tree/(\d+)/(\w+)'
120117
def get repo_id, sha
121118
@repo = Repository.find repo_id
122-
@git = Git.bare(@repo.path)
119+
logger = Logger.new('/tmp/git.log')
120+
logger.level = Logger::INFO
121+
122+
@git = Git.bare(@repo.path, :log => logger)
123123
@tree = @git.gtree(sha)
124124
render :tree
125125
end

lib/git/lib.rb

Lines changed: 11 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -183,16 +183,22 @@ def process_commit_data(data, sha = nil)
183183

184184
def object_contents(sha)
185185
#command('cat-file', ['-p', sha])
186-
get_raw_repo.cat_file(revparse(sha))
186+
get_raw_repo.cat_file(revparse(sha)).chomp
187187
end
188188

189189
def ls_tree(sha)
190190
data = {'blob' => {}, 'tree' => {}}
191-
command_lines('ls-tree', sha.to_s).each do |line|
192-
(info, filenm) = line.split("\t")
193-
(mode, type, sha) = info.split
194-
data[type][filenm] = {:mode => mode, :sha => sha}
191+
192+
get_raw_repo.object(revparse(sha)).entry.each do |e|
193+
data[e.format_type][e.name] = {:mode => e.format_mode, :sha => e.sha1}
195194
end
195+
196+
#command_lines('ls-tree', sha.to_s).each do |line|
197+
# (info, filenm) = line.split("\t")
198+
# (mode, type, sha) = info.split
199+
# data[type][filenm] = {:mode => mode, :sha => sha}
200+
#end
201+
196202
data
197203
end
198204

lib/git/raw/internal/loose.rb

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,13 @@
1+
#
2+
# converted from the gitrb project
3+
#
4+
# authors:
5+
# Matthias Lederhofer <matled@gmx.net>
6+
# Simon 'corecode' Schubert <corecode@fs.ei.tum.de>
7+
#
8+
# provides native ruby access to git objects and pack files
9+
#
10+
111
require 'zlib'
212
require 'digest/sha1'
313

lib/git/raw/internal/mmap.rb

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,13 @@
1+
#
2+
# converted from the gitrb project
3+
#
4+
# authors:
5+
# Matthias Lederhofer <matled@gmx.net>
6+
# Simon 'corecode' Schubert <corecode@fs.ei.tum.de>
7+
#
8+
# provides native ruby access to git objects and pack files
9+
#
10+
111
begin
212
require 'mmap'
313
rescue LoadError

lib/git/raw/internal/object.rb

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,13 @@
1+
#
2+
# converted from the gitrb project
3+
#
4+
# authors:
5+
# Matthias Lederhofer <matled@gmx.net>
6+
# Simon 'corecode' Schubert <corecode@fs.ei.tum.de>
7+
#
8+
# provides native ruby access to git objects and pack files
9+
#
10+
111
require 'digest/sha1'
212

313
module Git

lib/git/raw/internal/pack.rb

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,13 @@
1+
#
2+
# converted from the gitrb project
3+
#
4+
# authors:
5+
# Matthias Lederhofer <matled@gmx.net>
6+
# Simon 'corecode' Schubert <corecode@fs.ei.tum.de>
7+
#
8+
# provides native ruby access to git objects and pack files
9+
#
10+
111
require 'zlib'
212
require 'git/raw/internal/object'
313
require 'git/raw/internal/mmap'

lib/git/raw/object.rb

Lines changed: 26 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,13 @@
1+
#
2+
# converted from the gitrb project
3+
#
4+
# authors:
5+
# Matthias Lederhofer <matled@gmx.net>
6+
# Simon 'corecode' Schubert <corecode@fs.ei.tum.de>
7+
#
8+
# provides native ruby access to git objects and pack files
9+
#
10+
111
require 'digest/sha1'
212

313
module Git
@@ -132,6 +142,21 @@ def type=(type)
132142
end
133143
end
134144

145+
def format_type
146+
case type
147+
when :link
148+
'link'
149+
when :directory
150+
'tree'
151+
when :file
152+
'blob'
153+
end
154+
end
155+
156+
def format_mode
157+
"%06o" % @mode
158+
end
159+
135160
def raw
136161
"%o %s\0%s" % [@mode, @name, [@sha1].pack("H*")]
137162
end
@@ -160,8 +185,7 @@ def type
160185
def raw_content
161186
# TODO: sort correctly
162187
#@entry.sort { |a,b| a.name <=> b.name }.
163-
@entry.
164-
collect { |e| e.raw }.join
188+
@entry.collect { |e| [[e.format_mode, e.format_type, e.sha1].join(' '), e.name].join("\t") }.join("\n")
165189
end
166190
end
167191

lib/git/raw/repository.rb

Lines changed: 17 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,13 @@
1+
#
2+
# converted from the gitrb project
3+
#
4+
# authors:
5+
# Matthias Lederhofer <matled@gmx.net>
6+
# Simon 'corecode' Schubert <corecode@fs.ei.tum.de>
7+
#
8+
# provides native ruby access to git objects and pack files
9+
#
10+
111
require 'git/raw/internal/object'
212
require 'git/raw/internal/pack'
313
require 'git/raw/internal/loose'
@@ -28,9 +38,14 @@ def show
2838
puts
2939
end
3040
end
31-
41+
42+
def object(sha)
43+
o = get_raw_object_by_sha1(sha)
44+
c = Git::Raw::Object.from_raw(o)
45+
end
46+
3247
def cat_file(sha)
33-
get_raw_object_by_sha1(sha).content rescue nil
48+
object(sha).raw_content
3449
end
3550

3651
def log(sha, count = 30)

tests/test_helper.rb

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,16 @@ def teardown
2828
end
2929
end
3030

31+
32+
def with_temp_bare
33+
in_temp_dir do |path|
34+
g = Git.clone(@wbare, 'new')
35+
Dir.chdir('new') do
36+
yield g
37+
end
38+
end
39+
end
40+
3141
def create_temp_repo(clone_path)
3242
filename = 'git_test' + Time.now.to_i.to_s + rand(300).to_s.rjust(3, '0')
3343
@tmp_path = File.join("/tmp/", filename)

tests/units/test_index_ops.rb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ def setup
1010
end
1111

1212
def test_add
13-
in_temp_dir(false) do |path|
13+
in_temp_dir do |path|
1414
g = Git.clone(@wbare, 'new')
1515
Dir.chdir('new') do
1616
assert_equal('100644', g.status['example.txt'].mode_index)

0 commit comments

Comments
 (0)