summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJean-Philippe Lang <jp_lang@yahoo.fr>2013-10-05 10:33:03 +0000
committerJean-Philippe Lang <jp_lang@yahoo.fr>2013-10-05 10:33:03 +0000
commit7b1b605ae8e6762f4bf76cecf32e280f75bf72c8 (patch)
tree2cb329d520e11f5d9deea6a995a3d4c7f5f57f47
parent0444ecca3c876cae6ee4f83f41c4cd0bb7ee6f74 (diff)
downloadredmine-7b1b605ae8e6762f4bf76cecf32e280f75bf72c8.tar.gz
redmine-7b1b605ae8e6762f4bf76cecf32e280f75bf72c8.zip
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
-rw-r--r--app/models/changeset.rb7
-rw-r--r--db/migrate/20131005100610_add_repositories_created_on.rb9
-rw-r--r--test/fixtures/repositories.yml2
-rw-r--r--test/unit/changeset_test.rb22
4 files changed, 38 insertions, 2 deletions
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