From 5ed4b76c3ba93df1c87826b4d2c64415dff12056 Mon Sep 17 00:00:00 2001 From: Holger Just Date: Mon, 5 Jul 2010 22:55:58 +0200 Subject: [PATCH 1/6] Allow arbitrary length filenames in repositories (#5771) --- ...164950_change_changes_path_length_limit.rb | 11 +++++++++++ .../repositories/git_repository.tar.gz | Bin 17716 -> 19452 bytes .../repositories_git_controller_test.rb | 3 ++- .../redmine/scm/adapters/git_adapter_test.rb | 2 +- test/unit/repository_git_test.rb | 8 ++++---- 5 files changed, 18 insertions(+), 6 deletions(-) create mode 100644 db/migrate/20100705164950_change_changes_path_length_limit.rb diff --git a/db/migrate/20100705164950_change_changes_path_length_limit.rb b/db/migrate/20100705164950_change_changes_path_length_limit.rb new file mode 100644 index 00000000000..3e4fbdb1574 --- /dev/null +++ b/db/migrate/20100705164950_change_changes_path_length_limit.rb @@ -0,0 +1,11 @@ +class ChangeChangesPathLengthLimit < ActiveRecord::Migration + def self.up + change_column :changes, :path, :text, :default => "", :null => false + change_column :changes, :from_path, :text + end + + def self.down + change_column :changes, :from_path, :string, :default => "", :null => false + change_column :changes, :from_path, :string + end +end diff --git a/test/fixtures/repositories/git_repository.tar.gz b/test/fixtures/repositories/git_repository.tar.gz index 48966da30bf58b5d804ee9b51deb0dcce9da4edb..8158d583244a12064c1d48d20eb64427d56d3159 100644 GIT binary patch literal 19452 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%0A>0n{OjKsIMt(ySXTBznrqD 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 literal 17716 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 true).length + assert_equal 13, @adapter.revisions('',nil,nil,:all => true).length end def test_annotate diff --git a/test/unit/repository_git_test.rb b/test/unit/repository_git_test.rb index 71b3e4da547..dad5610aee8 100644 --- a/test/unit/repository_git_test.rb +++ b/test/unit/repository_git_test.rb @@ -34,8 +34,8 @@ def test_fetch_changesets_from_scratch @repository.fetch_changesets @repository.reload - assert_equal 12, @repository.changesets.count - assert_equal 21, @repository.changes.count + assert_equal 13, @repository.changesets.count + assert_equal 22, @repository.changes.count commit = @repository.changesets.find(:first, :order => 'committed_on ASC') assert_equal "Initial import.\nThe repository contains 3 files.", commit.comments @@ -57,10 +57,10 @@ def test_fetch_changesets_incremental # Remove the 3 latest changesets @repository.changesets.find(:all, :order => 'committed_on DESC', :limit => 3).each(&:destroy) @repository.reload - assert_equal 9, @repository.changesets.count + assert_equal 10, @repository.changesets.count @repository.fetch_changesets - assert_equal 12, @repository.changesets.count + assert_equal 13, @repository.changesets.count end else puts "Git test repository NOT FOUND. Skipping unit tests !!!" From 89cb1b9c8b6e8f9e499e350b067115a50b63c75b Mon Sep 17 00:00:00 2001 From: Holger Just Date: Tue, 6 Jul 2010 19:36:33 +0200 Subject: [PATCH 2/6] Force the default value of path to be set on the Change model class. This is needed because MySQL does not support default values on text columns (Error introduced in r3828, #5771) --- app/models/change.rb | 4 ++++ db/migrate/20100705164950_change_changes_path_length_limit.rb | 2 +- 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/app/models/change.rb b/app/models/change.rb index 385fe5acbf0..e5c1585b4c9 100644 --- a/app/models/change.rb +++ b/app/models/change.rb @@ -23,4 +23,8 @@ class Change < ActiveRecord::Base def relative_path changeset.repository.relative_path(path) end + + def before_save + path ||= "" + end end diff --git a/db/migrate/20100705164950_change_changes_path_length_limit.rb b/db/migrate/20100705164950_change_changes_path_length_limit.rb index 5f34d5dcfe9..62ba4ec22e3 100644 --- a/db/migrate/20100705164950_change_changes_path_length_limit.rb +++ b/db/migrate/20100705164950_change_changes_path_length_limit.rb @@ -1,6 +1,6 @@ class ChangeChangesPathLengthLimit < ActiveRecord::Migration def self.up - change_column :changes, :path, :text, :default => "", :null => false + change_column :changes, :path, :text, :null => false change_column :changes, :from_path, :text end From 59905a2340be3712fde95790959ce00161b0ac07 Mon Sep 17 00:00:00 2001 From: Holger Just Date: Tue, 6 Jul 2010 19:36:33 +0200 Subject: [PATCH 3/6] Force the default value of path to be set on the Change model class. This is needed because MySQL does not support default values on text columns (Error introduced in r3828, #5771) --- db/migrate/20100705164950_change_changes_path_length_limit.rb | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/db/migrate/20100705164950_change_changes_path_length_limit.rb b/db/migrate/20100705164950_change_changes_path_length_limit.rb index 62b8644a4eb..5b2a9911530 100644 --- a/db/migrate/20100705164950_change_changes_path_length_limit.rb +++ b/db/migrate/20100705164950_change_changes_path_length_limit.rb @@ -1,9 +1,13 @@ class ChangeChangesPathLengthLimit < ActiveRecord::Migration def self.up +<<<<<<< HEAD # these are two steps to please MySQL 5 on Win32 change_column :changes, :path, :text, :default => nil, :null => true change_column :changes, :path, :text, :null => false +======= + change_column :changes, :path, :text, :null => false +>>>>>>> Force the default value of path to be set on the Change model class. This is needed because MySQL does not support default values on text columns (Error introduced in r3828, #5771) change_column :changes, :from_path, :text end From fb864e50c45f26351cc0911134fcc47ed64cce17 Mon Sep 17 00:00:00 2001 From: Holger Just Date: Wed, 11 Aug 2010 09:28:40 +0200 Subject: [PATCH 4/6] Merge branch 'master' of git://github.com/edavis10/redmine --- db/migrate/20100705164950_change_changes_path_length_limit.rb | 4 ---- 1 file changed, 4 deletions(-) diff --git a/db/migrate/20100705164950_change_changes_path_length_limit.rb b/db/migrate/20100705164950_change_changes_path_length_limit.rb index 5b2a9911530..62b8644a4eb 100644 --- a/db/migrate/20100705164950_change_changes_path_length_limit.rb +++ b/db/migrate/20100705164950_change_changes_path_length_limit.rb @@ -1,13 +1,9 @@ class ChangeChangesPathLengthLimit < ActiveRecord::Migration def self.up -<<<<<<< HEAD # these are two steps to please MySQL 5 on Win32 change_column :changes, :path, :text, :default => nil, :null => true change_column :changes, :path, :text, :null => false -======= - change_column :changes, :path, :text, :null => false ->>>>>>> Force the default value of path to be set on the Change model class. This is needed because MySQL does not support default values on text columns (Error introduced in r3828, #5771) change_column :changes, :from_path, :text end From 07f7454c01e093b3c52781472a417abd72fc9d9c Mon Sep 17 00:00:00 2001 From: Holger Just Date: Fri, 8 Oct 2010 14:48:06 +0200 Subject: [PATCH 5/6] Add rake task to send test email. (#6511) --- lib/tasks/email.rake | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/lib/tasks/email.rake b/lib/tasks/email.rake index 87b5e03ce06..38e5dd5c0a8 100644 --- a/lib/tasks/email.rake +++ b/lib/tasks/email.rake @@ -165,5 +165,22 @@ END_DESC Redmine::POP3.check(pop_options, options) end + + desc "Send a test email to the user with the provided login name" + task :test, :login, :needs => :environment do |task, args| + include Redmine::I18n + + user = User.find_by_login(args[:login]) + abort l(:notice_email_error, "User #{args[:login]} not found") unless user + + ActionMailer::Base.raise_delivery_errors = true + begin + result = Mailer.deliver_test(User.current) + p result + puts l(:notice_email_sent, user.mail) + rescue Exception => e + abort l(:notice_email_error, e.message) + end + end end end From 7a316ee1e4c98116fa649db6b2e560286c10dd16 Mon Sep 17 00:00:00 2001 From: Holger Just Date: Fri, 8 Oct 2010 14:58:16 +0200 Subject: [PATCH 6/6] Remove debug output --- lib/tasks/email.rake | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/lib/tasks/email.rake b/lib/tasks/email.rake index 38e5dd5c0a8..7ceee078c46 100644 --- a/lib/tasks/email.rake +++ b/lib/tasks/email.rake @@ -175,8 +175,7 @@ END_DESC ActionMailer::Base.raise_delivery_errors = true begin - result = Mailer.deliver_test(User.current) - p result + Mailer.deliver_test(User.current) puts l(:notice_email_sent, user.mail) rescue Exception => e abort l(:notice_email_error, e.message)