diff --git a/app/models/changeset.rb b/app/models/changeset.rb index 87fdaffcd..2c574f75e 100644 --- a/app/models/changeset.rb +++ b/app/models/changeset.rb @@ -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 diff --git a/db/migrate/20131005100610_add_repositories_created_on.rb b/db/migrate/20131005100610_add_repositories_created_on.rb new file mode 100644 index 000000000..1f9822107 --- /dev/null +++ b/db/migrate/20131005100610_add_repositories_created_on.rb @@ -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 diff --git a/test/fixtures/repositories.yml b/test/fixtures/repositories.yml index 5be709a1d..20225bb22 100644 --- a/test/fixtures/repositories.yml +++ b/test/fixtures/repositories.yml @@ -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 diff --git a/test/unit/changeset_test.rb b/test/unit/changeset_test.rb index 3ead6b843..93bd7bba5 100644 --- a/test/unit/changeset_test.rb +++ b/test/unit/changeset_test.rb @@ -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