git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@2112 e93f8b46-1217-0410-a6f0-8f06a7374b81tags/0.9.0
@@ -1,4 +1,5 @@ | |||
<% Redmine::UnifiedDiff.new(diff, :type => diff_type).each do |table_file| -%> | |||
<% diff = Redmine::UnifiedDiff.new(diff, :type => diff_type, :max_lines => Setting.diff_max_lines_displayed.to_i) -%> | |||
<% diff.each do |table_file| -%> | |||
<div class="autoscroll"> | |||
<% if diff_type == 'sbs' -%> | |||
<table class="filecontent CodeRay"> | |||
@@ -62,3 +63,5 @@ | |||
</div> | |||
<% end -%> | |||
<%= l(:text_diff_truncated) if diff.truncated? %> |
@@ -48,6 +48,9 @@ | |||
<p><label><%= l(:setting_feeds_limit) %></label> | |||
<%= text_field_tag 'settings[feeds_limit]', Setting.feeds_limit, :size => 6 %></p> | |||
<p><label><%= l(:setting_diff_max_lines_displayed) %></label> | |||
<%= text_field_tag 'settings[diff_max_lines_displayed]', Setting.diff_max_lines_displayed, :size => 6 %></p> | |||
<p><label><%= l(:setting_gravatar_enabled) %></label> | |||
<%= check_box_tag 'settings[gravatar_enabled]', 1, Setting.gravatar_enabled? %><%= hidden_field_tag 'settings[gravatar_enabled]', 0 %></p> | |||
</div> |
@@ -61,6 +61,9 @@ protocol: | |||
feeds_limit: | |||
format: int | |||
default: 15 | |||
diff_max_lines_displayed: | |||
format: int | |||
default: 1500 | |||
enabled_scm: | |||
serialized: true | |||
default: |
@@ -694,3 +694,5 @@ permission_edit_own_messages: Edit own messages | |||
permission_delete_own_messages: Delete own messages | |||
label_user_activity: "%s's activity" | |||
label_updated_time_by: Updated by %s %s ago | |||
text_diff_truncated: '... This diff was truncated because it exceeds the maximum size that can be displayed.' | |||
setting_diff_max_lines_displayed: Max number of diff lines displayed |
@@ -695,3 +695,5 @@ permission_edit_own_messages: Edit own messages | |||
permission_delete_own_messages: Delete own messages | |||
label_user_activity: "%s's activity" | |||
label_updated_time_by: Updated by %s %s ago | |||
text_diff_truncated: '... This diff was truncated because it exceeds the maximum size that can be displayed.' | |||
setting_diff_max_lines_displayed: Max number of diff lines displayed |
@@ -699,3 +699,5 @@ permission_edit_own_messages: Edit own messages | |||
permission_delete_own_messages: Delete own messages | |||
label_user_activity: "%s's activity" | |||
label_updated_time_by: Updated by %s %s ago | |||
text_diff_truncated: '... This diff was truncated because it exceeds the maximum size that can be displayed.' | |||
setting_diff_max_lines_displayed: Max number of diff lines displayed |
@@ -695,3 +695,5 @@ permission_edit_own_messages: Edit own messages | |||
permission_delete_own_messages: Delete own messages | |||
label_user_activity: "%s's activity" | |||
label_updated_time_by: Updated by %s %s ago | |||
text_diff_truncated: '... This diff was truncated because it exceeds the maximum size that can be displayed.' | |||
setting_diff_max_lines_displayed: Max number of diff lines displayed |
@@ -696,3 +696,5 @@ enumeration_doc_categories: Dokumentenkategorien | |||
enumeration_activities: Aktivitäten (Zeiterfassung) | |||
label_user_activity: "%s's activity" | |||
label_updated_time_by: Updated by %s %s ago | |||
text_diff_truncated: '... This diff was truncated because it exceeds the maximum size that can be displayed.' | |||
setting_diff_max_lines_displayed: Max number of diff lines displayed |
@@ -223,6 +223,7 @@ setting_mail_handler_api_enabled: Enable WS for incoming emails | |||
setting_mail_handler_api_key: API key | |||
setting_sequential_project_identifiers: Generate sequential project identifiers | |||
setting_gravatar_enabled: Use Gravatar user icons | |||
setting_diff_max_lines_displayed: Max number of diff lines displayed | |||
permission_edit_project: Edit project | |||
permission_select_project_modules: Select project modules | |||
@@ -670,6 +671,7 @@ text_enumeration_destroy_question: '%d objects are assigned to this value.' | |||
text_enumeration_category_reassign_to: 'Reassign them to this value:' | |||
text_email_delivery_not_configured: "Email delivery is not configured, and notifications are disabled.\nConfigure your SMTP server in config/email.yml and restart the application to enable them." | |||
text_repository_usernames_mapping: "Select or update the Redmine user mapped to each username found in the repository log.\nUsers with the same Redmine and repository username or email are automatically mapped." | |||
text_diff_truncated: '... This diff was truncated because it exceeds the maximum size that can be displayed.' | |||
default_role_manager: Manager | |||
default_role_developper: Developer |
@@ -679,3 +679,5 @@ text_wiki_destroy_confirmation: ¿Seguro que quiere borrar el wiki y todo su con | |||
text_workflow_edit: Seleccionar un flujo de trabajo para actualizar | |||
label_user_activity: "%s's activity" | |||
label_updated_time_by: Updated by %s %s ago | |||
text_diff_truncated: '... This diff was truncated because it exceeds the maximum size that can be displayed.' | |||
setting_diff_max_lines_displayed: Max number of diff lines displayed |
@@ -694,3 +694,5 @@ permission_edit_own_messages: Muokkaa omia viestejä | |||
permission_delete_own_messages: Poista omia viestejä | |||
label_user_activity: "Käyttäjän %s historia" | |||
label_updated_time_by: Updated by %s %s ago | |||
text_diff_truncated: '... This diff was truncated because it exceeds the maximum size that can be displayed.' | |||
setting_diff_max_lines_displayed: Max number of diff lines displayed |
@@ -223,6 +223,7 @@ setting_mail_handler_api_enabled: "Activer le WS pour la réception d'emails" | |||
setting_mail_handler_api_key: Clé de protection de l'API | |||
setting_sequential_project_identifiers: Générer des identifiants de projet séquentiels | |||
setting_gravatar_enabled: Afficher les Gravatar des utilisateurs | |||
setting_diff_max_lines_displayed: Nombre maximum de lignes de diff affichées | |||
permission_edit_project: Modifier le projet | |||
permission_select_project_modules: Choisir les modules | |||
@@ -670,6 +671,7 @@ text_enumeration_destroy_question: 'Cette valeur est affectée à %d objets.' | |||
text_enumeration_category_reassign_to: 'Réaffecter les objets à cette valeur:' | |||
text_email_delivery_not_configured: "L'envoi de mail n'est pas configuré, les notifications sont désactivées.\nConfigurez votre serveur SMTP dans config/email.yml et redémarrez l'application pour les activer." | |||
text_repository_usernames_mapping: "Vous pouvez sélectionner ou modifier l'utilisateur Redmine associé à chaque nom d'utilisateur figurant dans l'historique du dépôt.\nLes utilisateurs avec le même identifiant ou la même adresse mail seront automatiquement associés." | |||
text_diff_truncated: '... Ce différentiel a été tronqué car il excède la taille maximale pouvant être affichée.' | |||
default_role_manager: Manager | |||
default_role_developper: Développeur |
@@ -694,3 +694,5 @@ permission_edit_own_messages: Edit own messages | |||
permission_delete_own_messages: Delete own messages | |||
label_user_activity: "%s's activity" | |||
label_updated_time_by: Updated by %s %s ago | |||
text_diff_truncated: '... This diff was truncated because it exceeds the maximum size that can be displayed.' | |||
setting_diff_max_lines_displayed: Max number of diff lines displayed |
@@ -695,3 +695,5 @@ permission_edit_own_messages: Saját üzenetek szerkesztése | |||
permission_delete_own_messages: Saját üzenetek törlése | |||
label_user_activity: "%s tevékenységei" | |||
label_updated_time_by: Updated by %s %s ago | |||
text_diff_truncated: '... This diff was truncated because it exceeds the maximum size that can be displayed.' | |||
setting_diff_max_lines_displayed: Max number of diff lines displayed |
@@ -694,3 +694,5 @@ permission_edit_own_messages: Modifica propri messaggi | |||
permission_delete_own_messages: Elimina propri messaggi | |||
label_user_activity: "%s's activity" | |||
label_updated_time_by: Updated by %s %s ago | |||
text_diff_truncated: '... This diff was truncated because it exceeds the maximum size that can be displayed.' | |||
setting_diff_max_lines_displayed: Max number of diff lines displayed |
@@ -695,3 +695,5 @@ permission_edit_own_messages: Edit own messages | |||
permission_delete_own_messages: Delete own messages | |||
label_user_activity: "%s's activity" | |||
label_updated_time_by: Updated by %s %s ago | |||
text_diff_truncated: '... This diff was truncated because it exceeds the maximum size that can be displayed.' | |||
setting_diff_max_lines_displayed: Max number of diff lines displayed |
@@ -694,3 +694,5 @@ permission_edit_own_messages: 자기 메시지 편집 | |||
permission_delete_own_messages: 자기 메시지 삭제 | |||
label_user_activity: "%s의 활동" | |||
label_updated_time_by: Updated by %s %s ago | |||
text_diff_truncated: '... This diff was truncated because it exceeds the maximum size that can be displayed.' | |||
setting_diff_max_lines_displayed: Max number of diff lines displayed |
@@ -696,3 +696,5 @@ permission_edit_own_messages: Edit own messages | |||
permission_delete_own_messages: Delete own messages | |||
label_user_activity: "%s's activity" | |||
label_updated_time_by: Updated by %s %s ago | |||
text_diff_truncated: '... This diff was truncated because it exceeds the maximum size that can be displayed.' | |||
setting_diff_max_lines_displayed: Max number of diff lines displayed |
@@ -696,3 +696,5 @@ permission_edit_own_messages: Edit own messages | |||
permission_delete_own_messages: Delete own messages | |||
label_user_activity: "%s's activity" | |||
label_updated_time_by: Updated by %s %s ago | |||
text_diff_truncated: '... This diff was truncated because it exceeds the maximum size that can be displayed.' | |||
setting_diff_max_lines_displayed: Max number of diff lines displayed |
@@ -695,3 +695,5 @@ permission_edit_own_messages: Edit own messages | |||
permission_delete_own_messages: Delete own messages | |||
label_user_activity: "%s's activity" | |||
label_updated_time_by: Updated by %s %s ago | |||
text_diff_truncated: '... This diff was truncated because it exceeds the maximum size that can be displayed.' | |||
setting_diff_max_lines_displayed: Max number of diff lines displayed |
@@ -713,3 +713,5 @@ text_workflow_edit: Zaznacz rolę i typ zagadnienia do edycji przepływu | |||
label_user_activity: "Aktywność: %s" | |||
label_updated_time_by: Updated by %s %s ago | |||
text_diff_truncated: '... This diff was truncated because it exceeds the maximum size that can be displayed.' | |||
setting_diff_max_lines_displayed: Max number of diff lines displayed |
@@ -695,3 +695,5 @@ permission_edit_own_messages: Editar próprias mensagens | |||
permission_delete_own_messages: Excluir próprias mensagens | |||
label_user_activity: "Atividade de %s" | |||
label_updated_time_by: Updated by %s %s ago | |||
text_diff_truncated: '... This diff was truncated because it exceeds the maximum size that can be displayed.' | |||
setting_diff_max_lines_displayed: Max number of diff lines displayed |
@@ -696,3 +696,5 @@ permission_edit_own_messages: Edit own messages | |||
permission_delete_own_messages: Delete own messages | |||
label_user_activity: "%s's activity" | |||
label_updated_time_by: Updated by %s %s ago | |||
text_diff_truncated: '... This diff was truncated because it exceeds the maximum size that can be displayed.' | |||
setting_diff_max_lines_displayed: Max number of diff lines displayed |
@@ -694,3 +694,5 @@ permission_edit_own_messages: Edit own messages | |||
permission_delete_own_messages: Delete own messages | |||
label_user_activity: "%s's activity" | |||
label_updated_time_by: Updated by %s %s ago | |||
text_diff_truncated: '... This diff was truncated because it exceeds the maximum size that can be displayed.' | |||
setting_diff_max_lines_displayed: Max number of diff lines displayed |
@@ -728,3 +728,5 @@ text_wiki_destroy_confirmation: Вы уверены, что хотите уда | |||
text_workflow_edit: Выберите роль и трекер для редактирования последовательности состояний | |||
label_updated_time_by: Updated by %s %s ago | |||
text_diff_truncated: '... This diff was truncated because it exceeds the maximum size that can be displayed.' | |||
setting_diff_max_lines_displayed: Max number of diff lines displayed |
@@ -700,3 +700,5 @@ permission_delete_own_messages: Delete own messages | |||
text_repository_usernames_mapping: "Select or update the Redmine user mapped to each username found in the repository log.\nUsers with the same Redmine and repository username or email are automatically mapped." | |||
label_user_activity: "%s's activity" | |||
label_updated_time_by: Updated by %s %s ago | |||
text_diff_truncated: '... This diff was truncated because it exceeds the maximum size that can be displayed.' | |||
setting_diff_max_lines_displayed: Max number of diff lines displayed |
@@ -695,3 +695,5 @@ permission_delete_own_messages: Delete own messages | |||
text_repository_usernames_mapping: "Select or update the Redmine user mapped to each username found in the repository log.\nUsers with the same Redmine and repository username or email are automatically mapped." | |||
label_user_activity: "%s's activity" | |||
label_updated_time_by: Updated by %s %s ago | |||
text_diff_truncated: '... This diff was truncated because it exceeds the maximum size that can be displayed.' | |||
setting_diff_max_lines_displayed: Max number of diff lines displayed |
@@ -695,3 +695,5 @@ permission_edit_own_messages: Edit own messages | |||
permission_delete_own_messages: Delete own messages | |||
label_user_activity: "%s's activity" | |||
label_updated_time_by: Updated by %s %s ago | |||
text_diff_truncated: '... This diff was truncated because it exceeds the maximum size that can be displayed.' | |||
setting_diff_max_lines_displayed: Max number of diff lines displayed |
@@ -697,3 +697,5 @@ permission_edit_own_messages: Edit own messages | |||
permission_delete_own_messages: Delete own messages | |||
label_user_activity: "%s's activity" | |||
label_updated_time_by: Updated by %s %s ago | |||
text_diff_truncated: '... This diff was truncated because it exceeds the maximum size that can be displayed.' | |||
setting_diff_max_lines_displayed: Max number of diff lines displayed |
@@ -695,3 +695,5 @@ permission_edit_own_messages: Edit own messages | |||
permission_delete_own_messages: Delete own messages | |||
label_user_activity: "%s's activity" | |||
label_updated_time_by: Updated by %s %s ago | |||
text_diff_truncated: '... This diff was truncated because it exceeds the maximum size that can be displayed.' | |||
setting_diff_max_lines_displayed: Max number of diff lines displayed |
@@ -696,3 +696,5 @@ permission_edit_own_messages: Edit own messages | |||
permission_delete_own_messages: Delete own messages | |||
label_user_activity: "%s's activity" | |||
label_updated_time_by: Updated by %s %s ago | |||
text_diff_truncated: '... This diff was truncated because it exceeds the maximum size that can be displayed.' | |||
setting_diff_max_lines_displayed: Max number of diff lines displayed |
@@ -697,3 +697,5 @@ text_repository_usernames_mapping: "Chọn hoặc cập nhật ánh xạ ngườ | |||
permission_delete_own_messages: Delete own messages | |||
label_user_activity: "%s's activity" | |||
label_updated_time_by: Updated by %s %s ago | |||
text_diff_truncated: '... This diff was truncated because it exceeds the maximum size that can be displayed.' | |||
setting_diff_max_lines_displayed: Max number of diff lines displayed |
@@ -696,3 +696,5 @@ default_activity_development: 開發 | |||
enumeration_issue_priorities: 項目優先權 | |||
enumeration_doc_categories: 文件分類 | |||
enumeration_activities: 活動 (時間追蹤) | |||
text_diff_truncated: '... This diff was truncated because it exceeds the maximum size that can be displayed.' | |||
setting_diff_max_lines_displayed: Max number of diff lines displayed |
@@ -696,3 +696,5 @@ enumeration_issue_priorities: 问题优先级 | |||
enumeration_doc_categories: 文档类别 | |||
enumeration_activities: 活动(时间跟踪) | |||
label_updated_time_by: Updated by %s %s ago | |||
text_diff_truncated: '... This diff was truncated because it exceeds the maximum size that can be displayed.' | |||
setting_diff_max_lines_displayed: Max number of diff lines displayed |
@@ -19,8 +19,11 @@ module Redmine | |||
# Class used to parse unified diffs | |||
class UnifiedDiff < Array | |||
def initialize(diff, options={}) | |||
options.assert_valid_keys(:type, :max_lines) | |||
diff_type = options[:type] || 'inline' | |||
lines = 0 | |||
@truncated = false | |||
diff_table = DiffTable.new(diff_type) | |||
diff.each do |line| | |||
if line =~ /^(---|\+\+\+) (.*)$/ | |||
@@ -28,10 +31,17 @@ module Redmine | |||
diff_table = DiffTable.new(diff_type) | |||
end | |||
diff_table.add_line line | |||
lines += 1 | |||
if options[:max_lines] && lines > options[:max_lines] | |||
@truncated = true | |||
break | |||
end | |||
end | |||
self << diff_table unless diff_table.empty? | |||
self | |||
end | |||
def truncated?; @truncated; end | |||
end | |||
# Class that represents a file diff |
@@ -0,0 +1,79 @@ | |||
Index: app/views/settings/_general.rhtml | |||
=================================================================== | |||
--- app/views/settings/_general.rhtml (revision 2094) | |||
+++ app/views/settings/_general.rhtml (working copy) | |||
@@ -48,6 +48,9 @@ | |||
<p><label><%= l(:setting_feeds_limit) %></label> | |||
<%= text_field_tag 'settings[feeds_limit]', Setting.feeds_limit, :size => 6 %></p> | |||
+<p><label><%= l(:setting_diff_max_lines_displayed) %></label> | |||
+<%= text_field_tag 'settings[diff_max_lines_displayed]', Setting.diff_max_lines_displayed, :size => 6 %></p> | |||
+ | |||
<p><label><%= l(:setting_gravatar_enabled) %></label> | |||
<%= check_box_tag 'settings[gravatar_enabled]', 1, Setting.gravatar_enabled? %><%= hidden_field_tag 'settings[gravatar_enabled]', 0 %></p> | |||
</div> | |||
Index: app/views/common/_diff.rhtml | |||
=================================================================== | |||
--- app/views/common/_diff.rhtml (revision 2111) | |||
+++ app/views/common/_diff.rhtml (working copy) | |||
@@ -1,4 +1,5 @@ | |||
-<% Redmine::UnifiedDiff.new(diff, :type => diff_type).each do |table_file| -%> | |||
+<% diff = Redmine::UnifiedDiff.new(diff, :type => diff_type, :max_lines => Setting.diff_max_lines_displayed.to_i) -%> | |||
+<% diff.each do |table_file| -%> | |||
<div class="autoscroll"> | |||
<% if diff_type == 'sbs' -%> | |||
<table class="filecontent CodeRay"> | |||
@@ -62,3 +63,5 @@ | |||
</div> | |||
<% end -%> | |||
+ | |||
+<%= l(:text_diff_truncated) if diff.truncated? %> | |||
Index: lang/lt.yml | |||
=================================================================== | |||
--- config/settings.yml (revision 2094) | |||
+++ config/settings.yml (working copy) | |||
@@ -61,6 +61,9 @@ | |||
feeds_limit: | |||
format: int | |||
default: 15 | |||
+diff_max_lines_displayed: | |||
+ format: int | |||
+ default: 1500 | |||
enabled_scm: | |||
serialized: true | |||
default: | |||
Index: lib/redmine/unified_diff.rb | |||
=================================================================== | |||
--- lib/redmine/unified_diff.rb (revision 2110) | |||
+++ lib/redmine/unified_diff.rb (working copy) | |||
@@ -19,8 +19,11 @@ | |||
# Class used to parse unified diffs | |||
class UnifiedDiff < Array | |||
def initialize(diff, options={}) | |||
+ options.assert_valid_keys(:type, :max_lines) | |||
diff_type = options[:type] || 'inline' | |||
+ lines = 0 | |||
+ @truncated = false | |||
diff_table = DiffTable.new(diff_type) | |||
diff.each do |line| | |||
if line =~ /^(---|\+\+\+) (.*)$/ | |||
@@ -28,10 +31,17 @@ | |||
diff_table = DiffTable.new(diff_type) | |||
end | |||
diff_table.add_line line | |||
+ lines += 1 | |||
+ if options[:max_lines] && lines > options[:max_lines] | |||
+ @truncated = true | |||
+ break | |||
+ end | |||
end | |||
self << diff_table unless diff_table.empty? | |||
self | |||
end | |||
+ | |||
+ def truncated?; @truncated; end | |||
end | |||
# Class that represents a file diff |
@@ -0,0 +1,42 @@ | |||
# Redmine - project management software | |||
# Copyright (C) 2006-2008 Jean-Philippe Lang | |||
# | |||
# This program is free software; you can redistribute it and/or | |||
# modify it under the terms of the GNU General Public License | |||
# as published by the Free Software Foundation; either version 2 | |||
# of the License, or (at your option) any later version. | |||
# | |||
# This program is distributed in the hope that it will be useful, | |||
# but WITHOUT ANY WARRANTY; without even the implied warranty of | |||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |||
# GNU General Public License for more details. | |||
# | |||
# You should have received a copy of the GNU General Public License | |||
# along with this program; if not, write to the Free Software | |||
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. | |||
require File.dirname(__FILE__) + '/../../../test_helper' | |||
class Redmine::UnifiedDiffTest < Test::Unit::TestCase | |||
def setup | |||
end | |||
def test_subversion_diff | |||
diff = Redmine::UnifiedDiff.new(read_diff_fixture('subversion.diff')) | |||
# number of files | |||
assert_equal 4, diff.size | |||
assert diff.detect {|file| file.file_name =~ %r{^config/settings.yml}} | |||
end | |||
def test_truncate_diff | |||
diff = Redmine::UnifiedDiff.new(read_diff_fixture('subversion.diff'), :max_lines => 20) | |||
assert_equal 2, diff.size | |||
end | |||
private | |||
def read_diff_fixture(filename) | |||
File.new(File.join(File.dirname(__FILE__), '/../../../fixtures/diffs', filename)).read | |||
end | |||
end |