diff --git a/app/models/repository/github.rb b/app/models/repository/github.rb index 6836861..b22d479 100644 --- a/app/models/repository/github.rb +++ b/app/models/repository/github.rb @@ -5,6 +5,7 @@ class Repository::Github < Repository::Git before_save :set_local_url before_save :register_hook + safe_attributes 'register_hook' def self.human_attribute_name(attribute, *args) attribute_name = attribute.to_s @@ -41,6 +42,10 @@ class Repository::Github < Repository::Git extra_boolean_attribute('extra_register_hook') end + def register_hook=(arg) + merge_extra_info "extra_register_hook" => arg + end + def extra_hook_registered extra_boolean_attribute('extra_hook_registered') end diff --git a/init.rb b/init.rb index 00977c7..3ca7067 100644 --- a/init.rb +++ b/init.rb @@ -32,6 +32,7 @@ Rails.configuration.to_prepare do end Redmine::Plugin.register :redmine_scm do + requires_redmine version_or_higher: '3.4.0' name 'SCM Creator' author 'Andriy Lesyuk' author_url 'http://www.andriylesyuk.com/' diff --git a/lib/scm_repositories_controller_patch.rb b/lib/scm_repositories_controller_patch.rb index aca8c74..273d7ff 100644 --- a/lib/scm_repositories_controller_patch.rb +++ b/lib/scm_repositories_controller_patch.rb @@ -26,18 +26,11 @@ module ScmRepositoriesControllerPatch # Original function #def create - # attrs = pickup_extra_info - # @repository = Repository.factory(params[:repository_scm]) - # @repository.safe_attributes = params[:repository] - # if attrs[:attrs_extra].keys.any? - # @repository.merge_extra_info(attrs[:attrs_extra]) - # end - # @repository.project = @project - # if request.post? && @repository.save - # redirect_to settings_project_path(@project, :tab => 'repositories') - # else - # render :action => 'new' - # end + # if @repository.save + # redirect_to settings_project_path(@project, :tab => 'repositories') + # else + # render :action => 'new' + # end #end def create_with_scm @@ -47,24 +40,14 @@ module ScmRepositoriesControllerPatch ((params[:operation].present? && params[:operation] == 'add') || ScmConfig['only_creator'])) || !ScmConfig['allow_add_local'] - attrs = pickup_extra_info - if params[:operation].present? && params[:operation] == 'add' - attrs[:attrs] = interface.sanitize(attrs[:attrs]) - end - - @repository = Repository.factory(params[:repository_scm]) - @repository.safe_attributes = params[:repository] - if attrs[:attrs_extra].keys.any? - @repository.merge_extra_info(attrs[:attrs_extra]) + @repository.safe_attributes = interface.sanitize(@repository.attributes) end - @repository.project = @project - if @repository.valid? && params[:operation].present? && params[:operation] == 'add' if !ScmConfig['max_repos'] || ScmConfig['max_repos'].to_i == 0 || @project.repositories.select{ |r| r.created_with_scm }.size < ScmConfig['max_repos'].to_i - scm_create_repository(@repository, interface, attrs[:attrs]['url']) + scm_create_repository(@repository, interface) else @repository.errors.add(:base, :scm_repositories_maximum_count_exceeded, :max => ScmConfig['max_repos'].to_i) end @@ -73,7 +56,7 @@ module ScmRepositoriesControllerPatch if ScmConfig['only_creator'] && request.post? && @repository.errors.empty? && !@repository.created_with_scm @repository.errors.add(:base, :scm_only_creator) elsif !ScmConfig['allow_add_local'] && request.post? && @repository.errors.empty? && !@repository.created_with_scm && - attrs[:attrs]['url'] =~ %r{\A(file://|([a-z]:)?\.*[\\/])}i + @repository.url =~ %r{\A(file://|([a-z]:)?\.*[\\/])}i @repository.errors.add(:base, :scm_local_repositories_denied) end @@ -92,7 +75,7 @@ module ScmRepositoriesControllerPatch update_without_scm if @repository.is_a?(Repository::Github) && # special case for Github - params[:repository][:extra_register_hook] == '1' && !@repository.extra_hook_registered + params[:repository][:register_hook] == '1' && !@repository.extra_hook_registered flash[:warning] = l(:warning_github_hook_registration_failed) end end @@ -113,8 +96,8 @@ module ScmRepositoriesControllerPatch private - def scm_create_repository(repository, interface, url) - name = interface.repository_name(url) + def scm_create_repository(repository, interface) + name = interface.repository_name(repository.url) if name path = interface.default_path(name) if interface.repository_exists?(name) diff --git a/lib/scm_repositories_helper_patch.rb b/lib/scm_repositories_helper_patch.rb index 17dec19..8ee552e 100644 --- a/lib/scm_repositories_helper_patch.rb +++ b/lib/scm_repositories_helper_patch.rb @@ -12,7 +12,7 @@ module ScmRepositoriesHelperPatch alias_method_chain :mercurial_field_tags, :add alias_method_chain :git_field_tags, :add alias_method_chain :bazaar_field_tags, :add - + alias_method_chain :scm_path_info_tag, :external if method_defined?(:scm_path_info_tag) end end @@ -187,7 +187,7 @@ module ScmRepositoriesHelperPatch :onchange => "this.name='repository[password]';") + content_tag('em', l(:text_github_credentials_note), :class => 'info')) if !Setting.autofetch_changesets? && GithubCreator.can_register_hook? - githubtags << content_tag('p', form.check_box(:extra_register_hook, :disabled => repository.extra_hook_registered) + ' ' + + githubtags << content_tag('p', form.check_box(:register_hook, :disabled => repository.extra_hook_registered) + ' ' + l(:text_github_register_hook_note)) end