@@ -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 => |
|
|
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