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