diff options
author | Toshi MARUYAMA <marutosijp2@yahoo.co.jp> | 2012-02-10 22:56:54 +0000 |
---|---|---|
committer | Toshi MARUYAMA <marutosijp2@yahoo.co.jp> | 2012-02-10 22:56:54 +0000 |
commit | d90cdb1b1073c38c498caf79d6cac39e19c16992 (patch) | |
tree | 6e1e036d47ea5802237defa14f43ae793e1b3f38 | |
parent | c5c8cd43c03f28add2ee3dce549f704cd19a224e (diff) | |
download | redmine-d90cdb1b1073c38c498caf79d6cac39e19c16992.tar.gz redmine-d90cdb1b1073c38c498caf79d6cac39e19c16992.zip |
scm: git: raise exception if "git log" is error and block is given in lib revision method (#8857)
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@8837 e93f8b46-1217-0410-a6f0-8f06a7374b81
-rw-r--r-- | app/models/repository/git.rb | 28 | ||||
-rw-r--r-- | lib/redmine/scm/adapters/git_adapter.rb | 9 | ||||
-rw-r--r-- | test/unit/lib/redmine/scm/adapters/git_adapter_test.rb | 30 |
3 files changed, 42 insertions, 25 deletions
diff --git a/app/models/repository/git.rb b/app/models/repository/git.rb index 7532bcd6a..c5606f240 100644 --- a/app/models/repository/git.rb +++ b/app/models/repository/git.rb @@ -153,21 +153,25 @@ class Repository::Git < Repository from_scmid = nil from_scmid = h["branches"][br]["last_scmid"] if h["branches"][br] h["branches"][br] ||= {} - scm.revisions('', from_scmid, br, {:reverse => true}) do |rev| - db_rev = find_changeset_by_name(rev.revision) - transaction do - if db_rev.nil? - db_saved_rev = save_revision(rev) - parents = {} - parents[db_saved_rev] = rev.parents unless rev.parents.nil? - parents.each do |ch, chparents| - ch.parents = chparents.collect{|rp| find_changeset_by_name(rp)}.compact + begin + scm.revisions('', from_scmid, br, {:reverse => true}) do |rev| + db_rev = find_changeset_by_name(rev.revision) + transaction do + if db_rev.nil? + db_saved_rev = save_revision(rev) + parents = {} + parents[db_saved_rev] = rev.parents unless rev.parents.nil? + parents.each do |ch, chparents| + ch.parents = chparents.collect{|rp| find_changeset_by_name(rp)}.compact + end end + h["branches"][br]["last_scmid"] = rev.scmid + merge_extra_info(h) + self.save end - h["branches"][br]["last_scmid"] = rev.scmid - merge_extra_info(h) - self.save end + rescue Redmine::Scm::Adapters::CommandFailed => e + logger.error("save revisions error: #{e.message}") end end end diff --git a/lib/redmine/scm/adapters/git_adapter.rb b/lib/redmine/scm/adapters/git_adapter.rb index d6c554461..9639b41f9 100644 --- a/lib/redmine/scm/adapters/git_adapter.rb +++ b/lib/redmine/scm/adapters/git_adapter.rb @@ -290,8 +290,13 @@ module Redmine end revs rescue ScmCommandAborted => e - logger.error("git log #{from_to.to_s} error: #{e.message}") - revs + err_msg = "git log error: #{e.message}" + logger.error(err_msg) + if block_given? + raise CommandFailed, err_msg + else + revs + end end def diff(path, identifier_from, identifier_to=nil) diff --git a/test/unit/lib/redmine/scm/adapters/git_adapter_test.rb b/test/unit/lib/redmine/scm/adapters/git_adapter_test.rb index 51c2718c2..990070fbc 100644 --- a/test/unit/lib/redmine/scm/adapters/git_adapter_test.rb +++ b/test/unit/lib/redmine/scm/adapters/git_adapter_test.rb @@ -191,14 +191,16 @@ begin end def test_revisions_invalid_rev - revs1 = [] - @adapter.revisions('', + assert_equal [], @adapter.revisions('', '1234abcd', "master") + assert_raise Redmine::Scm::Adapters::CommandFailed do + revs1 = [] + @adapter.revisions('', '1234abcd', "master", {:reverse => true}) do |rev| - revs1 << rev + revs1 << rev + end end - assert_equal [], revs1 end def test_revisions_includes_master_two_revs @@ -277,14 +279,20 @@ begin end def test_revisions_invalid_rev_excludes - revs1 = [] - @adapter.revisions('', nil, nil, - {:reverse => true, - :includes => ['83ca5fd546063a3c7dc2e568ba3355661a9e2b2c'], - :excludes => ['0123abcd4567']}) do |rev| - revs1 << rev + assert_equal [], + @adapter.revisions('', nil, nil, + {:reverse => true, + :includes => ['83ca5fd546063a3c7dc2e568ba3355661a9e2b2c'], + :excludes => ['0123abcd4567']}) + assert_raise Redmine::Scm::Adapters::CommandFailed do + revs1 = [] + @adapter.revisions('', nil, nil, + {:reverse => true, + :includes => ['83ca5fd546063a3c7dc2e568ba3355661a9e2b2c'], + :excludes => ['0123abcd4567']}) do |rev| + revs1 << rev + end end - assert_equal [], revs1 end def test_getting_revisions_with_spaces_in_filename |