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