From 87f284dcb6c54047948f39cf5ce58444eae73c1e Mon Sep 17 00:00:00 2001 From: Jean-Philippe Lang Date: Thu, 26 Jul 2012 17:41:47 +0000 Subject: Repository Identifier should be frozen (#11109). git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10081 e93f8b46-1217-0410-a6f0-8f06a7374b81 --- app/models/repository.rb | 13 ++++++++++++- app/views/repositories/_form.html.erb | 5 ++++- 2 files changed, 16 insertions(+), 2 deletions(-) (limited to 'app') diff --git a/app/models/repository.rb b/app/models/repository.rb index c81979a26..9a6891a90 100644 --- a/app/models/repository.rb +++ b/app/models/repository.rb @@ -20,6 +20,9 @@ class ScmFetchError < Exception; end class Repository < ActiveRecord::Base include Redmine::Ciphering include Redmine::SafeAttributes + + # Maximum length for repository identifiers + IDENTIFIER_MAX_LENGTH = 255 belongs_to :project has_many :changesets, :order => "#{Changeset.table_name}.committed_on DESC, #{Changeset.table_name}.id DESC" @@ -34,7 +37,7 @@ class Repository < ActiveRecord::Base before_destroy :clear_changesets validates_length_of :password, :maximum => 255, :allow_nil => true - validates_length_of :identifier, :maximum => 255, :allow_blank => true + validates_length_of :identifier, :maximum => IDENTIFIER_MAX_LENGTH, :allow_blank => true validates_presence_of :identifier, :unless => Proc.new { |r| r.is_default? || r.set_as_default? } validates_uniqueness_of :identifier, :scope => :project_id, :allow_blank => true validates_exclusion_of :identifier, :in => %w(show entry raw changes annotate diff show stats graph) @@ -114,6 +117,14 @@ class Repository < ActiveRecord::Base end end + def identifier=(identifier) + super unless identifier_frozen? + end + + def identifier_frozen? + errors[:identifier].blank? && !(new_record? || identifier.blank?) + end + def identifier_param if is_default? nil diff --git a/app/views/repositories/_form.html.erb b/app/views/repositories/_form.html.erb index 91a19ca43..1554eb56f 100644 --- a/app/views/repositories/_form.html.erb +++ b/app/views/repositories/_form.html.erb @@ -9,7 +9,10 @@

<%= f.check_box :is_default, :label => :field_repository_is_default %>

-

<%= f.text_field :identifier %>

+

<%= f.text_field :identifier, :disabled => @repository.identifier_frozen? %> +<% unless @repository.identifier_frozen? %> + <%= l(:text_length_between, :min => 1, :max => Repository::IDENTIFIER_MAX_LENGTH) %> <%= l(:text_repository_identifier_info).html_safe %> +<% end %>

<% button_disabled = true %> <% if @repository %> -- cgit v1.2.3