Skip to content

Commit 6bbead0

Browse files
author
scott Chacon
committed
added ls-tree to gitr
1 parent b7a7d20 commit 6bbead0

File tree

3 files changed

+30
-17
lines changed

3 files changed

+30
-17
lines changed

bin/gitr

Lines changed: 20 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -12,9 +12,9 @@
1212
# add --log-file
1313
# add --help
1414

15-
#require 'lib/git'
16-
require 'rubygems'
17-
require 'git'
15+
require 'lib/git'
16+
#require 'rubygems'
17+
#require 'git'
1818
require 'logger'
1919

2020
command = ARGV[0]
@@ -25,15 +25,17 @@ if !command
2525
puts
2626
puts 'commands: log'
2727
puts ' log-shas'
28-
puts ' cat-file'
29-
puts ' rev-parse'
28+
puts ' cat-file (treeish)'
29+
puts ' rev-parse (treeish)'
3030
puts ' branches'
3131
puts ' config'
32+
puts ' ls-tree (tree)'
3233
exit
3334
end
3435

3536
git_dir = ENV['GIT_DIR'] || '.git'
36-
@git = Git.bare(git_dir, :log => Logger.new(STDOUT))
37+
#@git = Git.bare(git_dir, :log => Logger.new(STDOUT))
38+
@git = Git.bare(git_dir)
3739

3840
case command
3941
when 'log'
@@ -60,10 +62,17 @@ when 'config'
6062
@git.config.sort.each do |k,v|
6163
puts "#{k} : #{v}"
6264
end
65+
when 'ls-tree'
66+
# gitr ls-tree
67+
tree = @git.gtree(ARGV[1])
68+
tree.blobs.sort.each do |name, c|
69+
puts [[c.mode, c.type, c.sha].join(" "), name].join("\t")
70+
end
71+
tree.trees.sort.each do |name, c|
72+
puts [[c.mode, c.type, c.sha].join(" "), name].join("\t")
73+
end
6374
end
6475

65-
# gitr ls-tree
66-
# gitr pack-browse
67-
68-
# gitr diff / stats ?
69-
# output in yaml?
76+
# todo:
77+
# gitr pack-browse
78+
# gitr diff / stats ?

lib/git/base.rb

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -428,7 +428,11 @@ def with_temp_working &blk
428428
def revparse(objectish)
429429
self.lib.revparse(objectish)
430430
end
431-
431+
432+
def ls_tree(objectish)
433+
self.lib.ls_tree(objectish)
434+
end
435+
432436
def cat_file(objectish)
433437
self.lib.object_contents(objectish)
434438
end

lib/git/object.rb

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -136,8 +136,8 @@ def check_tree
136136
@trees = {}
137137
@blobs = {}
138138
data = @base.lib.ls_tree(@objectish)
139-
data['tree'].each { |k, d| @trees[k] = Tree.new(@base, d[:sha], d[:mode]) }
140-
data['blob'].each { |k, d| @blobs[k] = Blob.new(@base, d[:sha], d[:mode]) }
139+
data['tree'].each { |k, d| @trees[k] = Git::Object::Tree.new(@base, d[:sha], d[:mode]) }
140+
data['blob'].each { |k, d| @blobs[k] = Git::Object::Blob.new(@base, d[:sha], d[:mode]) }
141141
end
142142
end
143143

@@ -213,8 +213,8 @@ def set_commit(data)
213213
end
214214
@committer = Git::Author.new(data['committer'])
215215
@author = Git::Author.new(data['author'])
216-
@tree = Tree.new(@base, data['tree'])
217-
@parents = data['parent'].map{ |sha| Commit.new(@base, sha) }
216+
@tree = Git::Object::Tree.new(@base, data['tree'])
217+
@parents = data['parent'].map{ |sha| Git::Object::Commit.new(@base, sha) }
218218
@message = data['message'].chomp
219219
end
220220

@@ -259,7 +259,7 @@ def new(base, objectish, type = nil, is_tag = false)
259259
if sha == ''
260260
raise Git::GitTagNameDoesNotExist.new(objectish)
261261
end
262-
return Tag.new(base, sha, objectish)
262+
return Git::Object::Tag.new(base, sha, objectish)
263263
else
264264
if !type
265265
type = base.lib.object_type(objectish)

0 commit comments

Comments
 (0)