diff options
Diffstat (limited to 'lib/redmine/scm/adapters')
-rw-r--r-- | lib/redmine/scm/adapters/mercurial_adapter.rb | 20 |
1 files changed, 14 insertions, 6 deletions
diff --git a/lib/redmine/scm/adapters/mercurial_adapter.rb b/lib/redmine/scm/adapters/mercurial_adapter.rb index 7607dd1ca..a493a94ee 100644 --- a/lib/redmine/scm/adapters/mercurial_adapter.rb +++ b/lib/redmine/scm/adapters/mercurial_adapter.rb @@ -183,25 +183,33 @@ module Redmine return nil if $? && $?.exitstatus != 0 cat end - + def annotate(path, identifier=nil) path ||= '' cmd = "#{HG_BIN} -R #{target('')}" - cmd << " annotate -n -u" - cmd << " -r " + shell_quote(identifier ? identifier.to_s : "tip") - cmd << " -r #{identifier.to_i}" if identifier + cmd << " annotate -ncu" + cmd << " -r #{hgrev(identifier)}" cmd << " #{target(path)}" blame = Annotate.new shellout(cmd) do |io| io.each_line do |line| - next unless line =~ %r{^([^:]+)\s(\d+):(.*)$} - blame.add_line($3.rstrip, Revision.new(:identifier => $2.to_i, :author => $1.strip)) + next unless line =~ %r{^([^:]+)\s(\d+)\s([0-9a-f]+):\s(.*)$} + r = Revision.new(:author => $1.strip, :revision => $2, :scmid => $3, + :identifier => $3) + blame.add_line($4.rstrip, r) end end return nil if $? && $?.exitstatus != 0 blame end + class Revision < Redmine::Scm::Adapters::Revision + # Returns the readable identifier + def format_identifier + "#{revision}:#{scmid}" + end + end + # Returns correct revision identifier def hgrev(identifier) identifier.blank? ? 'tip' : identifier.to_s |