summaryrefslogtreecommitdiffstats
path: root/lib/redmine
diff options
context:
space:
mode:
Diffstat (limited to 'lib/redmine')
-rw-r--r--lib/redmine/scm/adapters/mercurial_adapter.rb20
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