look_for_commits

in lib/grit/git-ruby/repository.rb [597:642]


      def look_for_commits(commit_sha, path, looking_for, options = {})
        return [] if @already_searched[commit_sha] 

        @already_searched[commit_sha] = true

        commit = get_object_by_sha1(commit_sha)
        tree_sha = get_subtree(commit_sha, path)

        found_data = []

        
        if commit.parent.size == 0
          looking_for.each do |search|
            
            
            if found_data.assoc(search)
              found_data << [search, commit_sha]
            end
          end
          return found_data
        end

        
        commit.parent.each do |pc|
          diff = quick_diff(tree_sha, get_subtree(pc, path), '.', false)

          
          looking_for.each do |search|
            if match = diff.assoc(search)
              found_data << [search, commit_sha, match]
              looking_for.delete(search)
            end
          end

          if looking_for.size <= 0  
            return found_data
          end

          found_data += look_for_commits(pc, path, looking_for)  
          return found_data if options[:first_parent]
        end

        
        found_data
      end