This is a listing of all the places I can find that Grit actually does a 'git' system call. My goal is to add native Ruby versions of all of them. Completed =========================== ** lib/grit/blob.rb:36: @size ||= @repo.git.cat_file({:s => true}, id).chomp.to_i ** lib/grit/blob.rb:43: @data ||= @repo.git.cat_file({:p => true}, id) ** lib/grit/tree.rb:16: output = repo.git.ls_tree({}, treeish, *paths) lib/grit/commit.rb:74: repo.git.rev_list({}, ref).strip.split("\n").size lib/grit/commit.rb:92: output = repo.git.rev_list(actual_options, ref) lib/grit/commit.rb:94: output = repo.git.rev_list(actual_options.merge(:all => true)) Next to do =========================== lib/grit/tag.rb:28: output = repo.git.for_each_ref(actual_options, "refs/tags") lib/grit/head.rb:37: output = repo.git.for_each_ref(actual_options, HEAD_PREFIX) lib/grit/head.rb:50: self.new($1, repo.git.rev_parse(options, 'HEAD')) lib/grit/config.rb:9: @repo.git.config({}, key, value) lib/grit/config.rb:40: @repo.git.config(:list => true).split(/\n/) May not be fast enough ============================= lib/grit/blob.rb:58: data = repo.git.blame({:p => true}, commit, '--', file) More Difficult =========================== lib/grit/commit.rb:39: @id_abbrev ||= @repo.git.rev_parse({:short => true}, self.id).chomp lib/grit/commit.rb:150: text = repo.git.diff({:full_index => true}, *paths) lib/grit/commit.rb:156: diff = @repo.git.show({:full_index => true, :pretty => 'raw'}, @id)