summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rwxr-xr-xbin/gitr69
-rw-r--r--lib/git/base.rb4
-rw-r--r--lib/git/branches.rb12
-rw-r--r--lib/git/lib.rb5
4 files changed, 88 insertions, 2 deletions
diff --git a/bin/gitr b/bin/gitr
new file mode 100755
index 0000000..53c8055
--- /dev/null
+++ b/bin/gitr
@@ -0,0 +1,69 @@
+#!/usr/bin/env ruby
+
+# This is a command line client that can do a number of read operations
+# on a git repository in pure ruby. This may be helpful if you have access
+# to a computer that has no C compiler but you want to do some git stuff
+# on it. It's also helpful for me to test Git stuff with.
+#
+# author : Scott Chacon (schacon@gmail.com)
+#
+# todo:
+# add --git-dir
+# add --log-file
+# add --help
+
+#require 'lib/git'
+require 'rubygems'
+require 'git'
+require 'logger'
+
+command = ARGV[0]
+
+if !command
+ puts 'You have to provide a command'
+ puts 'usage: gitr (command) [args]'
+ puts
+ puts 'commands: log'
+ puts ' log-shas'
+ puts ' cat-file'
+ puts ' rev-parse'
+ puts ' branches'
+ puts ' config'
+ exit
+end
+
+git_dir = ENV['GIT_DIR'] || '.git'
+@git = Git.bare(git_dir, :log => Logger.new(STDOUT))
+
+case command
+when 'log'
+ # gitr log
+ @git.log.each do |l|
+ puts 'commit ' + l.sha
+ puts l.contents
+ puts
+ end
+when 'log-shas'
+ # gitr log-shas
+ puts @git.log
+when 'cat-file'
+ # gitr cat-file
+ puts @git.cat_file(ARGV[1])
+when 'rev-parse'
+ # gitr rev-parse
+ puts @git.revparse(ARGV[1])
+when 'branches'
+ # gitr branches
+ puts @git.branches
+when 'config'
+ # gitr config
+ @git.config.sort.each do |k,v|
+ puts "#{k} : #{v}"
+ end
+end
+
+# gitr ls-tree
+# gitr pack-browse
+
+# gitr diff / stats ?
+# output in yaml? \ No newline at end of file
diff --git a/lib/git/base.rb b/lib/git/base.rb
index 1820ee2..31ba9ff 100644
--- a/lib/git/base.rb
+++ b/lib/git/base.rb
@@ -429,6 +429,10 @@ module Git
self.lib.revparse(objectish)
end
+ def cat_file(objectish)
+ self.lib.object_contents(objectish)
+ end
+
# returns the name of the branch the working directory is currently on
def current_branch
self.lib.branch_current
diff --git a/lib/git/branches.rb b/lib/git/branches.rb
index 47d001a..60ab16b 100644
--- a/lib/git/branches.rb
+++ b/lib/git/branches.rb
@@ -41,5 +41,17 @@ module Git
@branches[symbol.to_s]
end
+ def to_s
+ out = ''
+ @branches.each do |k, b|
+ if b.current
+ out += "* " + b.to_s + "\n"
+ else
+ out += " " + b.to_s + "\n"
+ end
+ end
+ out
+ end
+
end
end \ No newline at end of file
diff --git a/lib/git/lib.rb b/lib/git/lib.rb
index 9c6a041..120d9ce 100644
--- a/lib/git/lib.rb
+++ b/lib/git/lib.rb
@@ -81,7 +81,7 @@ module Git
sha = revparse(opts[:object] || branch_current || 'master')
count = opts[:count] || 30
- repo = Git::Raw::Repository.new(@git_dir)
+ repo = get_raw_repo
return process_commit_data(repo.log(sha, count))
end
@@ -182,7 +182,8 @@ module Git
end
def object_contents(sha)
- command('cat-file', ['-p', sha])
+ #command('cat-file', ['-p', sha])
+ get_raw_repo.cat_file(revparse(sha))
end
def ls_tree(sha)