##// END OF EJS Templates
Repository Identifier should be frozen (#11109)....
Jean-Philippe Lang -
r9898:87f284dcb6c5
parent child
Show More
@@ -20,6 +20,9 class ScmFetchError < Exception; end
20 20 class Repository < ActiveRecord::Base
21 21 include Redmine::Ciphering
22 22 include Redmine::SafeAttributes
23
24 # Maximum length for repository identifiers
25 IDENTIFIER_MAX_LENGTH = 255
23 26
24 27 belongs_to :project
25 28 has_many :changesets, :order => "#{Changeset.table_name}.committed_on DESC, #{Changeset.table_name}.id DESC"
@@ -34,7 +37,7 class Repository < ActiveRecord::Base
34 37 before_destroy :clear_changesets
35 38
36 39 validates_length_of :password, :maximum => 255, :allow_nil => true
37 validates_length_of :identifier, :maximum => 255, :allow_blank => true
40 validates_length_of :identifier, :maximum => IDENTIFIER_MAX_LENGTH, :allow_blank => true
38 41 validates_presence_of :identifier, :unless => Proc.new { |r| r.is_default? || r.set_as_default? }
39 42 validates_uniqueness_of :identifier, :scope => :project_id, :allow_blank => true
40 43 validates_exclusion_of :identifier, :in => %w(show entry raw changes annotate diff show stats graph)
@@ -114,6 +117,14 class Repository < ActiveRecord::Base
114 117 end
115 118 end
116 119
120 def identifier=(identifier)
121 super unless identifier_frozen?
122 end
123
124 def identifier_frozen?
125 errors[:identifier].blank? && !(new_record? || identifier.blank?)
126 end
127
117 128 def identifier_param
118 129 if is_default?
119 130 nil
@@ -9,7 +9,10
9 9 </p>
10 10
11 11 <p><%= f.check_box :is_default, :label => :field_repository_is_default %></p>
12 <p><%= f.text_field :identifier %></p>
12 <p><%= f.text_field :identifier, :disabled => @repository.identifier_frozen? %>
13 <% unless @repository.identifier_frozen? %>
14 <em class="info"><%= l(:text_length_between, :min => 1, :max => Repository::IDENTIFIER_MAX_LENGTH) %> <%= l(:text_repository_identifier_info).html_safe %></em>
15 <% end %></p>
13 16
14 17 <% button_disabled = true %>
15 18 <% if @repository %>
@@ -1056,3 +1056,4 ar:
1056 1056 label_fields_permissions: Fields permissions
1057 1057 label_readonly: Read-only
1058 1058 label_required: Required
1059 text_repository_identifier_info: Only lower case letters (a-z), numbers, dashes and underscores are allowed.<br />Once saved, the identifier cannot be changed.
@@ -1054,3 +1054,4 bg:
1054 1054 description_date_range_interval: Изберете диапазон чрез задаване на начална и крайна дати
1055 1055 description_date_from: Въведете начална дата
1056 1056 description_date_to: Въведете крайна дата
1057 text_repository_identifier_info: 'Позволени са малки букви (a-z), цифри, тирета и _.<br />Промяна след създаването му не е възможна.'
@@ -1070,3 +1070,4 bs:
1070 1070 label_fields_permissions: Fields permissions
1071 1071 label_readonly: Read-only
1072 1072 label_required: Required
1073 text_repository_identifier_info: Only lower case letters (a-z), numbers, dashes and underscores are allowed.<br />Once saved, the identifier cannot be changed.
@@ -1058,3 +1058,4 ca:
1058 1058 label_fields_permissions: Fields permissions
1059 1059 label_readonly: Read-only
1060 1060 label_required: Required
1061 text_repository_identifier_info: Only lower case letters (a-z), numbers, dashes and underscores are allowed.<br />Once saved, the identifier cannot be changed.
@@ -1059,3 +1059,4 cs:
1059 1059 label_fields_permissions: Fields permissions
1060 1060 label_readonly: Read-only
1061 1061 label_required: Required
1062 text_repository_identifier_info: Only lower case letters (a-z), numbers, dashes and underscores are allowed.<br />Once saved, the identifier cannot be changed.
@@ -1073,3 +1073,4 da:
1073 1073 label_fields_permissions: Fields permissions
1074 1074 label_readonly: Read-only
1075 1075 label_required: Required
1076 text_repository_identifier_info: Only lower case letters (a-z), numbers, dashes and underscores are allowed.<br />Once saved, the identifier cannot be changed.
@@ -1074,3 +1074,4 de:
1074 1074 label_fields_permissions: Fields permissions
1075 1075 label_readonly: Nur-Lese-Zugriff
1076 1076 label_required: Erforderlich
1077 text_repository_identifier_info: 'Kleinbuchstaben (a-z), Ziffern, Binde- und Unterstriche erlaubt.<br />Einmal gespeichert, kann die Kennung nicht mehr geändert werden.'
@@ -1056,3 +1056,4 el:
1056 1056 label_fields_permissions: Fields permissions
1057 1057 label_readonly: Read-only
1058 1058 label_required: Required
1059 text_repository_identifier_info: Only lower case letters (a-z), numbers, dashes and underscores are allowed.<br />Once saved, the identifier cannot be changed.
@@ -1058,3 +1058,4 en-GB:
1058 1058 label_fields_permissions: Fields permissions
1059 1059 label_readonly: Read-only
1060 1060 label_required: Required
1061 text_repository_identifier_info: 'Only lower case letters (a-z), numbers, dashes and underscores are allowed.<br />Once saved, the identifier cannot be changed.'
@@ -1053,3 +1053,4 en:
1053 1053 description_date_range_interval: Choose range by selecting start and end date
1054 1054 description_date_from: Enter start date
1055 1055 description_date_to: Enter end date
1056 text_repository_identifier_info: 'Only lower case letters (a-z), numbers, dashes and underscores are allowed.<br />Once saved, the identifier cannot be changed.'
@@ -1093,3 +1093,4 es:
1093 1093 label_fields_permissions: Fields permissions
1094 1094 label_readonly: Read-only
1095 1095 label_required: Required
1096 text_repository_identifier_info: Only lower case letters (a-z), numbers, dashes and underscores are allowed.<br />Once saved, the identifier cannot be changed.
@@ -1069,3 +1069,4 et:
1069 1069 label_fields_permissions: Fields permissions
1070 1070 label_readonly: Read-only
1071 1071 label_required: Required
1072 text_repository_identifier_info: "Lubatud on ainult väikesed tähed (a-z), numbrid ja kriipsud.<br />Peale salvestamist ei saa tunnust enam muuta."
@@ -1059,3 +1059,4 eu:
1059 1059 label_fields_permissions: Fields permissions
1060 1060 label_readonly: Read-only
1061 1061 label_required: Required
1062 text_repository_identifier_info: Only lower case letters (a-z), numbers, dashes and underscores are allowed.<br />Once saved, the identifier cannot be changed.
@@ -1058,3 +1058,4 fa:
1058 1058 label_fields_permissions: Fields permissions
1059 1059 label_readonly: Read-only
1060 1060 label_required: Required
1061 text_repository_identifier_info: Only lower case letters (a-z), numbers, dashes and underscores are allowed.<br />Once saved, the identifier cannot be changed.
@@ -1077,3 +1077,4 fi:
1077 1077 label_fields_permissions: Fields permissions
1078 1078 label_readonly: Read-only
1079 1079 label_required: Required
1080 text_repository_identifier_info: Only lower case letters (a-z), numbers, dashes and underscores are allowed.<br />Once saved, the identifier cannot be changed.
@@ -1070,3 +1070,4 fr:
1070 1070 error_scm_annotate_big_text_file: Cette entrée ne peut pas être annotée car elle excède la taille maximale.
1071 1071 setting_repositories_encodings: Encodages des fichiers et des dépôts
1072 1072 label_search_for_watchers: Rechercher des observateurs
1073 text_repository_identifier_info: 'Seuls les lettres minuscules (a-z), chiffres, tirets et underscore sont autorisés.<br />Un fois sauvegardé, l''identifiant ne pourra plus être modifié.'
@@ -1067,3 +1067,4 gl:
1067 1067 label_fields_permissions: Fields permissions
1068 1068 label_readonly: Read-only
1069 1069 label_required: Required
1070 text_repository_identifier_info: Only lower case letters (a-z), numbers, dashes and underscores are allowed.<br />Once saved, the identifier cannot be changed.
@@ -1061,3 +1061,4 he:
1061 1061 label_fields_permissions: Fields permissions
1062 1062 label_readonly: Read-only
1063 1063 label_required: Required
1064 text_repository_identifier_info: Only lower case letters (a-z), numbers, dashes and underscores are allowed.<br />Once saved, the identifier cannot be changed.
@@ -1059,3 +1059,4 hr:
1059 1059 label_fields_permissions: Fields permissions
1060 1060 label_readonly: Read-only
1061 1061 label_required: Required
1062 text_repository_identifier_info: Only lower case letters (a-z), numbers, dashes and underscores are allowed.<br />Once saved, the identifier cannot be changed.
@@ -1075,3 +1075,4
1075 1075 label_fields_permissions: Fields permissions
1076 1076 label_readonly: Read-only
1077 1077 label_required: Required
1078 text_repository_identifier_info: Only lower case letters (a-z), numbers, dashes and underscores are allowed.<br />Once saved, the identifier cannot be changed.
@@ -1062,3 +1062,4 id:
1062 1062 label_fields_permissions: Fields permissions
1063 1063 label_readonly: Read-only
1064 1064 label_required: Required
1065 text_repository_identifier_info: Only lower case letters (a-z), numbers, dashes and underscores are allowed.<br />Once saved, the identifier cannot be changed.
@@ -1057,3 +1057,4 it:
1057 1057 label_fields_permissions: Fields permissions
1058 1058 label_readonly: Read-only
1059 1059 label_required: Required
1060 text_repository_identifier_info: Only lower case letters (a-z), numbers, dashes and underscores are allowed.<br />Once saved, the identifier cannot be changed.
@@ -1086,3 +1086,4 ja:
1086 1086 label_fields_permissions: フィールドに対する権限
1087 1087 label_readonly: 読み取り専用
1088 1088 label_required: 必須
1089 text_repository_identifier_info: アルファベット小文字(a-z)・数字・ハイフン・アンダースコアが使えます。<br />識別子は後で変更することはできません。
@@ -1106,3 +1106,4 ko:
1106 1106 label_fields_permissions: Fields permissions
1107 1107 label_readonly: Read-only
1108 1108 label_required: Required
1109 text_repository_identifier_info: "소문자(a-z),숫자,대쉬(-)와 밑줄(_)만 가능합니다.<br />식별자는 저장후에는 수정할 없습니다."
@@ -1116,3 +1116,4 lt:
1116 1116 label_fields_permissions: Fields permissions
1117 1117 label_readonly: Read-only
1118 1118 label_required: Required
1119 text_repository_identifier_info: Only lower case letters (a-z), numbers, dashes and underscores are allowed.<br />Once saved, the identifier cannot be changed.
@@ -1050,3 +1050,4 lv:
1050 1050 label_fields_permissions: Fields permissions
1051 1051 label_readonly: Read-only
1052 1052 label_required: Required
1053 text_repository_identifier_info: Only lower case letters (a-z), numbers, dashes and underscores are allowed.<br />Once saved, the identifier cannot be changed.
@@ -1056,3 +1056,4 mk:
1056 1056 label_fields_permissions: Fields permissions
1057 1057 label_readonly: Read-only
1058 1058 label_required: Required
1059 text_repository_identifier_info: Only lower case letters (a-z), numbers, dashes and underscores are allowed.<br />Once saved, the identifier cannot be changed.
@@ -1058,3 +1058,4 mn:
1058 1058 label_fields_permissions: Fields permissions
1059 1059 label_readonly: Read-only
1060 1060 label_required: Required
1061 text_repository_identifier_info: Only lower case letters (a-z), numbers, dashes and underscores are allowed.<br />Once saved, the identifier cannot be changed.
@@ -1038,3 +1038,4 nl:
1038 1038 label_fields_permissions: Fields permissions
1039 1039 label_readonly: Read-only
1040 1040 label_required: Required
1041 text_repository_identifier_info: 'Alleen kleine letter (a-z), cijfers, streepjes en liggende streepjes zijn toegestaan.<br />Eenmaal opgeslagen kan de identifier niet worden gewijzigd.'
@@ -1046,3 +1046,4
1046 1046 label_fields_permissions: Fields permissions
1047 1047 label_readonly: Read-only
1048 1048 label_required: Required
1049 text_repository_identifier_info: Only lower case letters (a-z), numbers, dashes and underscores are allowed.<br />Once saved, the identifier cannot be changed.
@@ -1073,3 +1073,4 pl:
1073 1073 label_fields_permissions: Fields permissions
1074 1074 label_readonly: Read-only
1075 1075 label_required: Required
1076 text_repository_identifier_info: Only lower case letters (a-z), numbers, dashes and underscores are allowed.<br />Once saved, the identifier cannot be changed.
@@ -1078,3 +1078,4 pt-BR:
1078 1078 label_fields_permissions: Fields permissions
1079 1079 label_readonly: Read-only
1080 1080 label_required: Required
1081 text_repository_identifier_info: Only lower case letters (a-z), numbers, dashes and underscores are allowed.<br />Once saved, the identifier cannot be changed.
@@ -1061,3 +1061,4 pt:
1061 1061 label_fields_permissions: Fields permissions
1062 1062 label_readonly: Read-only
1063 1063 label_required: Required
1064 text_repository_identifier_info: Only lower case letters (a-z), numbers, dashes and underscores are allowed.<br />Once saved, the identifier cannot be changed.
@@ -1053,3 +1053,4 ro:
1053 1053 label_fields_permissions: Fields permissions
1054 1054 label_readonly: Read-only
1055 1055 label_required: Required
1056 text_repository_identifier_info: Only lower case letters (a-z), numbers, dashes and underscores are allowed.<br />Once saved, the identifier cannot be changed.
@@ -1169,3 +1169,4 ru:
1169 1169 label_fields_permissions: Fields permissions
1170 1170 label_readonly: Read-only
1171 1171 label_required: Required
1172 text_repository_identifier_info: Допускаются только строчные латинские буквы (a-z), цифры, тире и подчеркивания.<br />После сохранения идентификатор изменить нельзя.
@@ -1056,3 +1056,4 sk:
1056 1056 label_fields_permissions: Fields permissions
1057 1057 label_readonly: Read-only
1058 1058 label_required: Required
1059 text_repository_identifier_info: Only lower case letters (a-z), numbers, dashes and underscores are allowed.<br />Once saved, the identifier cannot be changed.
@@ -1056,3 +1056,4 sl:
1056 1056 label_fields_permissions: Fields permissions
1057 1057 label_readonly: Read-only
1058 1058 label_required: Required
1059 text_repository_identifier_info: Only lower case letters (a-z), numbers, dashes and underscores are allowed.<br />Once saved, the identifier cannot be changed.
@@ -1052,3 +1052,4 sq:
1052 1052 label_fields_permissions: Fields permissions
1053 1053 label_readonly: Read-only
1054 1054 label_required: Required
1055 text_repository_identifier_info: 'Only lower case letters (a-z), numbers, dashes and underscores are allowed.<br />Once saved, the identifier cannot be changed.'
@@ -1058,3 +1058,4 sr-YU:
1058 1058 label_fields_permissions: Fields permissions
1059 1059 label_readonly: Read-only
1060 1060 label_required: Required
1061 text_repository_identifier_info: Only lower case letters (a-z), numbers, dashes and underscores are allowed.<br />Once saved, the identifier cannot be changed.
@@ -1057,3 +1057,4 sr:
1057 1057 label_fields_permissions: Fields permissions
1058 1058 label_readonly: Read-only
1059 1059 label_required: Required
1060 text_repository_identifier_info: Only lower case letters (a-z), numbers, dashes and underscores are allowed.<br />Once saved, the identifier cannot be changed.
@@ -1094,3 +1094,4 sv:
1094 1094 label_fields_permissions: Fields permissions
1095 1095 label_readonly: Read-only
1096 1096 label_required: Required
1097 text_repository_identifier_info: Ändast gemener (a-z), siffror, streck och understreck är tillåtna.<br />När identifieraren sparats kan den inte ändras.
@@ -1053,3 +1053,4 th:
1053 1053 label_fields_permissions: Fields permissions
1054 1054 label_readonly: Read-only
1055 1055 label_required: Required
1056 text_repository_identifier_info: Only lower case letters (a-z), numbers, dashes and underscores are allowed.<br />Once saved, the identifier cannot be changed.
@@ -1075,3 +1075,4 tr:
1075 1075 label_fields_permissions: Fields permissions
1076 1076 label_readonly: Read-only
1077 1077 label_required: Required
1078 text_repository_identifier_info: Only lower case letters (a-z), numbers, dashes and underscores are allowed.<br />Once saved, the identifier cannot be changed.
@@ -1051,3 +1051,4 uk:
1051 1051 label_fields_permissions: Fields permissions
1052 1052 label_readonly: Read-only
1053 1053 label_required: Required
1054 text_repository_identifier_info: Only lower case letters (a-z), numbers, dashes and underscores are allowed.<br />Once saved, the identifier cannot be changed.
@@ -1107,3 +1107,4 vi:
1107 1107 label_fields_permissions: Fields permissions
1108 1108 label_readonly: Read-only
1109 1109 label_required: Required
1110 text_repository_identifier_info: Only lower case letters (a-z), numbers, dashes and underscores are allowed.<br />Once saved, the identifier cannot be changed.
@@ -1137,3 +1137,4
1137 1137 description_date_range_interval: 選擇起始與結束日期以設定範圍區間
1138 1138 description_date_from: 輸入起始日期
1139 1139 description_date_to: 輸入結束日期
1140 text_repository_identifier_info: '僅允許使用小寫英文字母 (a-z), 阿拉伯數字, 虛線與底線。<br />一旦儲存之後, 代碼便無法再次被更改。'
@@ -1060,3 +1060,4 zh:
1060 1060 label_fields_permissions: 字段权限
1061 1061 label_readonly: 只读
1062 1062 label_required: 必填
1063 text_repository_identifier_info: 仅小写字母(a-z)、数字、破折号(-)和下划线(_)可以使用。<br />一旦保存,标识无法修改。
@@ -105,6 +105,38 class RepositoryTest < ActiveSupport::TestCase
105 105 )
106 106 assert r.save
107 107 end
108
109 def test_identifier_should_not_be_frozen_for_a_new_repository
110 assert_equal false, Repository.new.identifier_frozen?
111 end
112
113 def test_identifier_should_not_be_frozen_for_a_saved_repository_with_blank_identifier
114 Repository.update_all(["identifier = ''"], "id = 10")
115
116 assert_equal false, Repository.find(10).identifier_frozen?
117 end
118
119 def test_identifier_should_be_frozen_for_a_saved_repository_with_valid_identifier
120 Repository.update_all(["identifier = 'abc123'"], "id = 10")
121
122 assert_equal true, Repository.find(10).identifier_frozen?
123 end
124
125 def test_identifier_should_not_accept_change_if_frozen
126 r = Repository.new(:identifier => 'foo')
127 r.stubs(:identifier_frozen?).returns(true)
128
129 r.identifier = 'bar'
130 assert_equal 'foo', r.identifier
131 end
132
133 def test_identifier_should_accept_change_if_not_frozen
134 r = Repository.new(:identifier => 'foo')
135 r.stubs(:identifier_frozen?).returns(false)
136
137 r.identifier = 'bar'
138 assert_equal 'bar', r.identifier
139 end
108 140
109 141 def test_destroy
110 142 repository = Repository.find(10)
General Comments 0
You need to be logged in to leave comments. Login now