Don't update issues nor log time when importing old changesets (#4823).

git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@12199 e93f8b46-1217-0410-a6f0-8f06a7374b81
This commit is contained in:
Jean-Philippe Lang 2013-10-05 10:33:03 +00:00
parent 0444ecca3c
commit 7b1b605ae8
4 changed files with 38 additions and 2 deletions

View File

@ -132,8 +132,11 @@ class Changeset < ActiveRecord::Base
issue, hours = find_referenced_issue_by_id(m[0].to_i), m[2]
if issue
referenced_issues << issue
fix_issue(issue, action) if fix_keywords.include?(action)
log_time(issue, hours) if hours && Setting.commit_logtime_enabled?
# Don't update issues or log time when importing old commits
unless repository.created_on && committed_on && committed_on < repository.created_on
fix_issue(issue, action) if fix_keywords.include?(action)
log_time(issue, hours) if hours && Setting.commit_logtime_enabled?
end
end
end
end

View File

@ -0,0 +1,9 @@
class AddRepositoriesCreatedOn < ActiveRecord::Migration
def up
add_column :repositories, :created_on, :timestamp
end
def down
remove_column :repositories, :created_on
end
end

View File

@ -8,6 +8,7 @@ repositories_001:
login: ""
type: Repository::Subversion
is_default: true
created_on: 2006-07-19 19:04:21 +02:00
repositories_002:
project_id: 2
url: svn://localhost/test
@ -17,3 +18,4 @@ repositories_002:
login: ""
type: Repository::Subversion
is_default: true
created_on: 2006-07-19 19:04:21 +02:00

View File

@ -254,6 +254,28 @@ class ChangesetTest < ActiveSupport::TestCase
end
end
def test_old_commits_should_not_update_issues_nor_log_time
Setting.commit_ref_keywords = '*'
Setting.commit_update_keywords = {'fixes , closes' => {'status_id' => '5', 'done_ratio' => '90'}}
Setting.commit_logtime_enabled = '1'
repository = Project.find(1).repository
repository.created_on = Time.now
repository.save!
c = Changeset.new(:repository => repository,
:committed_on => 1.month.ago,
:comments => 'New commit (#2). Fixes #1 @1h',
:revision => '12345')
assert_no_difference 'TimeEntry.count' do
assert c.save
end
assert_equal [1, 2], c.issue_ids.sort
issue = Issue.find(1)
assert_equal 1, issue.status_id
assert_equal 0, issue.done_ratio
end
def test_text_tag_revision
c = Changeset.new(:revision => '520')
assert_equal 'r520', c.text_tag