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!!)
git_file_index | [RW] | |
ruby_git_repo | [RW] |
# File lib/grit/git-ruby/object.rb, line 164 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/git_object.rb, line 180 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 114 def blame_tree(commit, path = nil) begin path = [path].join('/').to_s + '/' if (path && path != '') path = '' if !path.is_a? String commits = file_index.last_commits(rev_parse({}, commit), looking_for(commit, path)) clean_paths(commits) rescue FileIndex::IndexFileNotFound {} end end
# File lib/grit/git-ruby.rb, line 21 def cat_file(options, ref) if options[:t] file_type(ref) elsif options[:s] file_size(ref) elsif options[:p] try_run { ruby_git.cat_file(ref) } end rescue Grit::GitRuby::Repository::NoSuchShaFound '' end
# File lib/grit/git-ruby.rb, line 125 def file_index @git_file_index ||= FileIndex.new(@git_dir) end
# File lib/grit/git-ruby.rb, line 106 def file_size(ref) try_run { ruby_git.cat_file_size(ref).to_s } end
# File lib/grit/git-ruby.rb, line 110 def file_type(ref) try_run { ruby_git.cat_file_type(ref).to_s } end
# File lib/grit/git-ruby.rb, line 13 def init(options) if options.size == 0 Grit::GitRuby::Repository.init(@git_dir) else method_missing('init', options) end end
# File lib/grit/git-ruby.rb, line 46 def rev_list(options, ref = 'master') 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) return method_missing('rev-list', options, ref) elsif (options.size == 0) # pure rev-list begin return file_index.commits_from(rev_parse({}, ref)).join("\n") + "\n" rescue return method_missing('rev-list', options, ref) end else aref = rev_parse({}, ref) if aref.is_a? Array return method_missing('rev-list', options, ref) else return try_run { ruby_git.rev_list(aref, options) } end end end
# File lib/grit/git-ruby.rb, line 68 def rev_parse(options, string) raise RuntimeError, "invalid string: #{string}" 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', {}, string).chomp end