the functions in this module intercept the calls to git binary made buy the grit objects and attempts to run them in pure ruby if it will be faster, or if the git binary is not available (!!TODO!!)
# File lib/grit/git-ruby/git_object.rb, line 181 def self.read_bytes_until(io, char) string = '' if RUBY_VERSION > '1.9' while ((next_char = io.getc) != char) && !io.eof string += next_char end else while ((next_char = io.getc.chr) != char) && !io.eof string += next_char end end string end
# File lib/grit/git-ruby.rb, line 20 def cat_file(options, sha) if options[:t] file_type(sha) elsif options[:s] file_size(sha) elsif options[:p] try_run { ruby_git.cat_file(sha) } end rescue Grit::GitRuby::Repository::NoSuchShaFound '' end
# File lib/grit/git-ruby.rb, line 32 def cat_ref(options, ref) sha = rev_parse({}, ref) cat_file(options, sha) end
git diff –full-index ‘ec037431382e83c3e95d4f2b3d145afbac8ea55d’ ‘f1ec1aea10986159456846b8a05615b87828d6c6’
# File lib/grit/git-ruby.rb, line 46 def diff(options, sha1, sha2 = nil) try_run { ruby_git.diff(sha1, sha2, options) } end
# File lib/grit/git-ruby.rb, line 194 def file_size(ref) try_run { ruby_git.cat_file_size(ref).to_s } end
# File lib/grit/git-ruby.rb, line 198 def file_type(ref) try_run { ruby_git.cat_file_type(ref).to_s } end
# File lib/grit/git-ruby.rb, line 12 def init(options, *args) if options.size == 0 Grit::GitRuby::Repository.init(@git_dir) else method_missing('init', options, *args) end end
lib/grit/tree.rb:16: output = repo.git.ls_tree({}, treeish, *paths)
# File lib/grit/git-ruby.rb, line 38 def ls_tree(options, treeish, *paths) sha = rev_parse({}, treeish) ruby_git.ls_tree(sha, paths.flatten, options.delete(:r)) rescue Grit::GitRuby::Repository::NoSuchShaFound '' end
# File lib/grit/git-ruby.rb, line 113 def refs(options, prefix) refs = [] already = {} Dir.chdir(@git_dir) do files = Dir.glob(prefix + '/**/*') files.each do |ref| next if !File.file?(ref) id = File.read(ref).chomp name = ref.sub("#{prefix}/", '') if !already[name] refs << "#{name} #{id}" already[name] = true end end if File.file?('packed-refs') File.readlines('packed-refs').each do |line| if m = /^(\w{40}) (.*?)$/.match(line) next if !Regexp.new('^' + prefix).match(m[2]) name = m[2].sub("#{prefix}/", '') if !already[name] refs << "#{name} #{m[1]}" already[name] = true end end end end end refs.join("\n") end
# File lib/grit/git-ruby.rb, line 50 def rev_list(options, *refs) refs = ['master'] if refs.empty? options.delete(:skip) if options[:skip].to_i == 0 allowed_options = [:max_count, :since, :until, :pretty] # this is all I can do right now if ((options.keys - allowed_options).size > 0) || refs.size > 1 method_missing('rev-list', options, *refs) elsif (options.size == 0) # pure rev-list ref = refs.first begin file_index.commits_from(rev_parse({}, ref)).join("\n") + "\n" rescue method_missing('rev-list', options, *refs) end else ref = refs.first aref = rev_parse({:verify => true}, ref) if aref.is_a? Array method_missing('rev-list', options, *refs) else try_run { ruby_git.rev_list(aref, options) } end end end
# File lib/grit/git-ruby.rb, line 75 def rev_parse(options, string) raise RuntimeError, "invalid string: #{string.inspect}" unless string.is_a?(String) if string =~ /\.\./ (sha1, sha2) = string.split('..') return [rev_parse({}, sha1), rev_parse({}, sha2)] end if /^[0-9a-f]{40}$/.match(string) # passing in a sha - just no-op it return string.chomp end head = File.join(@git_dir, 'refs', 'heads', string) return File.read(head).chomp if File.file?(head) head = File.join(@git_dir, 'refs', 'remotes', string) return File.read(head).chomp if File.file?(head) head = File.join(@git_dir, 'refs', 'tags', string) return File.read(head).chomp if File.file?(head) ## check packed-refs file, too packref = File.join(@git_dir, 'packed-refs') if File.file?(packref) File.readlines(packref).each do |line| if m = /^(\w{40}) refs\/.+?\/(.*?)$/.match(line) next if !Regexp.new(Regexp.escape(string) + '$').match(m[3]) return m[1].chomp end end end ## !! more - partials and such !! # revert to calling git - grr return method_missing('rev-parse', options, string).chomp end
Generated with the Darkfish Rdoc Generator 2.