Commit 3355ffe0 authored by Jean-Philippe Lang's avatar Jean-Philippe Lang

Fixes git annotate (#3832).

git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@3531 e93f8b46-1217-0410-a6f0-8f06a7374b81
parent 6817a45e
...@@ -235,14 +235,15 @@ module Redmine ...@@ -235,14 +235,15 @@ module Redmine
# git annotates binary files # git annotates binary files
return nil if content.is_binary_data? return nil if content.is_binary_data?
identifier = '' identifier = ''
author = '' # git shows commit author on the first occurrence only
authors_by_commit = {}
content.split("\n").each do |line| content.split("\n").each do |line|
if line =~ /^([0-9a-f]{39,40})\s.*/ if line =~ /^([0-9a-f]{39,40})\s.*/
identifier = $1 identifier = $1
elsif line =~ /^author (.+)/ elsif line =~ /^author (.+)/
author = $1.strip authors_by_commit[identifier] = $1.strip
elsif line =~ /^\t(.*)/ elsif line =~ /^\t(.*)/
blame.add_line($1, Revision.new(:identifier => identifier, :author => author)) blame.add_line($1, Revision.new(:identifier => identifier, :author => authors_by_commit[identifier]))
identifier = '' identifier = ''
author = '' author = ''
end end
......
...@@ -20,14 +20,15 @@ class GitAdapterTest < ActiveSupport::TestCase ...@@ -20,14 +20,15 @@ class GitAdapterTest < ActiveSupport::TestCase
annotate = @adapter.annotate('sources/watchers_controller.rb') annotate = @adapter.annotate('sources/watchers_controller.rb')
assert_kind_of Redmine::Scm::Adapters::Annotate, annotate assert_kind_of Redmine::Scm::Adapters::Annotate, annotate
assert_equal 41, annotate.lines.size assert_equal 41, annotate.lines.size
assert_equal "# This program is free software; you can redistribute it and/or", annotate.lines[4].strip
assert_equal "7234cb2750b63f47bff735edc50a1c0a433c2518", annotate.revisions[4].identifier
assert_equal "jsmith", annotate.revisions[4].author
end end
def test_annotate_moved_file def test_annotate_moved_file
annotate = @adapter.annotate('renamed_test.txt') annotate = @adapter.annotate('renamed_test.txt')
assert_kind_of Redmine::Scm::Adapters::Annotate, annotate assert_kind_of Redmine::Scm::Adapters::Annotate, annotate
assert_equal 2, annotate.lines.size assert_equal 2, annotate.lines.size
assert_equal "Let's pretend I'm adding a new feature!", annotate.lines.second
assert_equal "7e61ac704deecde634b51e59daa8110435dcb3da", annotate.revisions.second.identifier
end end
else else
puts "Git test repository NOT FOUND. Skipping unit tests !!!" puts "Git test repository NOT FOUND. Skipping unit tests !!!"
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment