started the ruby-only command line git client
authorscott Chacon <schacon@agadorsparticus.(none)>
Fri, 23 Nov 2007 19:50:02 +0000 (23 11:50 -0800)
committerscott Chacon <schacon@agadorsparticus.(none)>
Fri, 23 Nov 2007 19:50:02 +0000 (23 11:50 -0800)
bin/gitr [new file with mode: 0755]
lib/git/base.rb
lib/git/branches.rb
lib/git/lib.rb

diff --git a/bin/gitr b/bin/gitr
new file mode 100755 (executable)
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
index 1820ee2..31ba9ff 100644 (file)
@@ -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
index 47d001a..60ab16b 100644 (file)
@@ -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
index 9c6a041..120d9ce 100644 (file)
@@ -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)