]> source.dussan.org Git - redmine.git/commitdiff
scm: mercurial: annotate accepts both of revision number and changeset id (#3724).
authorToshi MARUYAMA <marutosijp2@yahoo.co.jp>
Sun, 9 Jan 2011 01:30:18 +0000 (01:30 +0000)
committerToshi MARUYAMA <marutosijp2@yahoo.co.jp>
Sun, 9 Jan 2011 01:30:18 +0000 (01:30 +0000)
Change annotate revision label to Mercurial style '4:def6d2f1254a'
and use identifier.

git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@4663 e93f8b46-1217-0410-a6f0-8f06a7374b81

lib/redmine/scm/adapters/mercurial_adapter.rb
test/functional/repositories_mercurial_controller_test.rb
test/unit/lib/redmine/scm/adapters/mercurial_adapter_test.rb

index 7607dd1cac2fedc76eb321a0c2137bf22282d6bf..a493a94eeb7ed93a930497914c3b8a910f87e4c1 100644 (file)
@@ -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
index b577da87e427343b02ff43d09b0272b53c3a38c6..41f5462fd06c29ee35f7a1d6d53ebea229290389 100644 (file)
@@ -134,7 +134,7 @@ class RepositoriesMercurialControllerTest < ActionController::TestCase
                                :attributes => { :class => /diff_out/ },
                                :content => /def remove/ }
     end
-    
+
     def test_annotate
       get :annotate, :id => 3, :path => ['sources', 'watchers_controller.rb']
       assert_response :success
@@ -147,8 +147,7 @@ class RepositoriesMercurialControllerTest < ActionController::TestCase
                        {
                          :tag => 'td',
                          :attributes => { :class => 'revision' },
-                         :child => { :tag => 'a', :content => '4' }
-                         # :child => { :tag => 'a', :content => /4:def6d2f1/ }
+                         :child => { :tag => 'a', :content => '4:def6d2f1254a' }
                        }
       assert_tag :tag => 'th',
                  :content => '23',
index 088664bddfa6c5034aa18791565d48bb20b001b6..2285d92b6c1e2e78cdb8537fbf12fe0e89464b99 100644 (file)
@@ -71,6 +71,19 @@ begin
         assert_nil @adapter.cat('sources/welcome_controller.rb')
       end
 
+      def test_annotate
+        assert_equal [], @adapter.annotate("sources/welcome_controller.rb").lines
+        [2, '400bb8672109', '400', 400].each do |r|
+          ann = @adapter.annotate('sources/welcome_controller.rb', r)
+          assert ann
+          assert_equal '1', ann.revisions[17].revision
+          assert_equal '9d5b5b004199', ann.revisions[17].identifier
+          assert_equal 'jsmith', ann.revisions[0].author
+          assert_equal 25, ann.lines.length
+          assert_equal 'class WelcomeController < ApplicationController', ann.lines[17]
+        end
+      end
+
       def test_access_by_nodeid
         path = 'sources/welcome_controller.rb'
         assert_equal @adapter.cat(path, 2), @adapter.cat(path, '400bb8672109')