scm: git: fix creating and updating repository
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@9616 e93f8b46-1217-0410-a6f0-8f06a7374b81
This commit is contained in:
parent
36ee2b24bd
commit
2c28d6b5d1
|
@ -46,7 +46,11 @@ class RepositoriesController < ApplicationController
|
||||||
end
|
end
|
||||||
|
|
||||||
def create
|
def create
|
||||||
@repository = Repository.factory(params[:repository_scm], params[:repository])
|
attrs = pickup_extra_info
|
||||||
|
@repository = Repository.factory(params[:repository_scm], attrs[:attrs])
|
||||||
|
if attrs[:attrs_extra].keys.any?
|
||||||
|
@repository.merge_extra_info(attrs[:attrs_extra])
|
||||||
|
end
|
||||||
@repository.project = @project
|
@repository.project = @project
|
||||||
if request.post? && @repository.save
|
if request.post? && @repository.save
|
||||||
redirect_to settings_project_path(@project, :tab => 'repositories')
|
redirect_to settings_project_path(@project, :tab => 'repositories')
|
||||||
|
@ -59,7 +63,11 @@ class RepositoriesController < ApplicationController
|
||||||
end
|
end
|
||||||
|
|
||||||
def update
|
def update
|
||||||
@repository.attributes = params[:repository]
|
attrs = pickup_extra_info
|
||||||
|
@repository.attributes = attrs[:attrs]
|
||||||
|
if attrs[:attrs_extra].keys.any?
|
||||||
|
@repository.merge_extra_info(attrs[:attrs_extra])
|
||||||
|
end
|
||||||
@repository.project = @project
|
@repository.project = @project
|
||||||
if request.put? && @repository.save
|
if request.put? && @repository.save
|
||||||
redirect_to settings_project_path(@project, :tab => 'repositories')
|
redirect_to settings_project_path(@project, :tab => 'repositories')
|
||||||
|
@ -68,6 +76,20 @@ class RepositoriesController < ApplicationController
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def pickup_extra_info
|
||||||
|
p = {}
|
||||||
|
p_extra = {}
|
||||||
|
params[:repository].each do |k, v|
|
||||||
|
if k =~ /^extra_/
|
||||||
|
p_extra[k] = v
|
||||||
|
else
|
||||||
|
p[k] = v
|
||||||
|
end
|
||||||
|
end
|
||||||
|
{:attrs => p, :attrs_extra => p_extra}
|
||||||
|
end
|
||||||
|
private :pickup_extra_info
|
||||||
|
|
||||||
def committers
|
def committers
|
||||||
@committers = @repository.committers
|
@committers = @repository.committers
|
||||||
@users = @project.users
|
@users = @project.users
|
||||||
|
|
|
@ -56,28 +56,6 @@ class Repository < ActiveRecord::Base
|
||||||
super(attr_name, *args)
|
super(attr_name, *args)
|
||||||
end
|
end
|
||||||
|
|
||||||
alias :attributes_without_extra_info= :attributes=
|
|
||||||
def attributes=(new_attributes)
|
|
||||||
return if new_attributes.nil?
|
|
||||||
attributes = new_attributes.dup
|
|
||||||
attributes.stringify_keys!
|
|
||||||
|
|
||||||
p = {}
|
|
||||||
p_extra = {}
|
|
||||||
attributes.each do |k, v|
|
|
||||||
if k =~ /^extra_/
|
|
||||||
p_extra[k] = v
|
|
||||||
else
|
|
||||||
p[k] = v
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
send :attributes_without_extra_info=, p
|
|
||||||
if p_extra.keys.any?
|
|
||||||
merge_extra_info(p_extra)
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
# Removes leading and trailing whitespace
|
# Removes leading and trailing whitespace
|
||||||
def url=(arg)
|
def url=(arg)
|
||||||
write_attribute(:url, arg ? arg.to_s.strip : nil)
|
write_attribute(:url, arg ? arg.to_s.strip : nil)
|
||||||
|
|
|
@ -57,6 +57,35 @@ class RepositoriesGitControllerTest < ActionController::TestCase
|
||||||
Setting.default_language = 'en'
|
Setting.default_language = 'en'
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def test_create_and_update
|
||||||
|
@request.session[:user_id] = 1
|
||||||
|
assert_difference 'Repository.count' do
|
||||||
|
post :create, :project_id => 'subproject1',
|
||||||
|
:repository_scm => 'Git',
|
||||||
|
:repository => {
|
||||||
|
:url => '/test',
|
||||||
|
:is_default => '0',
|
||||||
|
:identifier => 'test-create',
|
||||||
|
:extra_report_last_commit => '1',
|
||||||
|
}
|
||||||
|
end
|
||||||
|
assert_response 302
|
||||||
|
repository = Repository.first(:order => 'id DESC')
|
||||||
|
assert_kind_of Repository::Git, repository
|
||||||
|
assert_equal '/test', repository.url
|
||||||
|
assert_equal true, repository.extra_report_last_commit
|
||||||
|
|
||||||
|
put :update, :id => repository.id,
|
||||||
|
:repository => {
|
||||||
|
:extra_report_last_commit => '0',
|
||||||
|
:identifier => 'test-update',
|
||||||
|
}
|
||||||
|
assert_response 302
|
||||||
|
repo2 = Repository.find(repository.id)
|
||||||
|
assert_equal 'test-update', repo2.identifier
|
||||||
|
assert_equal false, repo2.extra_report_last_commit
|
||||||
|
end
|
||||||
|
|
||||||
if File.directory?(REPOSITORY_PATH)
|
if File.directory?(REPOSITORY_PATH)
|
||||||
def test_get_new
|
def test_get_new
|
||||||
@request.session[:user_id] = 1
|
@request.session[:user_id] = 1
|
||||||
|
|
Loading…
Reference in New Issue