Chris@16: require 'redmine' Chris@16: luis@1122: ActionDispatch::Callbacks.to_prepare do Chris@16: # Patches Chris@16: require_dependency 'checkout/settings_controller_patch' luis@1122: Chris@16: require_dependency 'checkout/repositories_helper_patch' Chris@16: require_dependency 'checkout/repository_patch' luis@1122: Chris@16: require_dependency 'checkout/settings_helper_patch' Chris@16: require_dependency 'checkout/setting_patch' Chris@16: end Chris@16: Chris@16: # Hooks Chris@16: require 'checkout/repository_hooks' Chris@16: Chris@16: Redmine::Plugin.register :redmine_checkout do Chris@16: name 'Redmine Checkout plugin' Chris@16: url 'http://dev.holgerjust.de/projects/redmine-checkout' Chris@16: author 'Holger Just' Chris@16: author_url 'http://meine-er.de' Chris@16: description 'Add links to the actual repository to the repository view.' Chris@16: version '0.5' luis@1122: Chris@16: requires_redmine :version_or_higher => '0.9' luis@1122: Chris@16: settings_defaults = HashWithIndifferentAccess.new({ Chris@16: 'display_login' => nil, Chris@16: 'use_zero_clipboard' => '1', luis@1122: Chris@16: 'display_checkout_info' => '1', Chris@16: 'description_Abstract' => <<-EOF Chris@16: The data contained in this repository can be downloaded to your computer using one of several clients. Chris@16: Please see the documentation of your version control software client for more information. Chris@16: Chris@16: Please select the desired protocol below to get the URL. Chris@16: EOF Chris@16: }) luis@1122: Chris@16: # this is needed for setting the defaults Chris@16: require 'checkout/repository_patch' luis@1122: Chris@16: CheckoutHelper.supported_scm.each do |scm| Chris@16: klazz = "Repository::#{scm}".constantize luis@1122: Chris@16: settings_defaults["description_#{scm}"] = '' Chris@16: settings_defaults["overwrite_description_#{scm}"] = '0' Chris@16: settings_defaults["display_command_#{scm}"] = '0' luis@1122: Chris@16: # access can be one of Chris@16: # read+write => this protocol always allows read/write access Chris@16: # read-only => this protocol always allows read access only Chris@16: # permission => Access depends on redmine permissions Chris@16: settings_defaults["protocols_#{scm}"] = [HashWithIndifferentAccess.new({ Chris@16: :protocol => scm, Chris@16: :command => klazz.checkout_default_command, Chris@16: :regex => '', Chris@16: :regex_replacement => '', Chris@16: :fixed_url => '', Chris@16: :access => 'permission', Chris@16: :append_path => (klazz.allow_subtree_checkout? ? '1' : '0'), Chris@16: :is_default => '1' Chris@16: })] Chris@16: end luis@1122: Chris@16: settings :default => settings_defaults, :partial => 'settings/redmine_checkout' luis@1122: Chris@16: Redmine::WikiFormatting::Macros.register do Chris@16: desc <<-EOF Chris@16: Creates a checkout link to the actual repository. Example: Chris@16: Chris@16: use the default checkout protocol !{{repository}} Chris@16: or use a specific protocol !{{repository(SVN)}} Chris@16: or use the checkout protocol of a specific specific project: !{{repository(projectname:SVN)}}" Chris@16: EOF Chris@16: Chris@16: macro :repository do |obj, args| Chris@16: proto = args.first Chris@16: if proto.to_s =~ %r{^([^\:]+)\:(.*)$} Chris@16: project_identifier, proto = $1, $2 Chris@16: project = Project.find_by_identifier(project_identifier) || Project.find_by_name(project_identifier) Chris@16: else Chris@16: project = @project Chris@16: end luis@1122: Chris@16: if project && project.repository Chris@16: protocols = project.repository.checkout_protocols.select{|p| p.access_rw(User.current)} luis@1122: Chris@16: if proto.present? Chris@16: proto_obj = protocols.find{|p| p.protocol.downcase == proto.downcase} Chris@16: else Chris@16: proto_obj = protocols.find(&:default?) || protocols.first Chris@16: end Chris@16: end Chris@16: raise "Checkout protocol #{proto} not found" unless proto_obj luis@1122: Chris@16: cmd = (project.repository.checkout_display_command? && proto_obj.command.present?) ? proto_obj.command.strip + " " : "" Chris@16: cmd + link_to(proto_obj.url, proto_obj.url) Chris@16: end Chris@16: end Chris@16: end