annotate plugins/redmine_checkout/lib/checkout/repository_patch.rb @ 1621:3a510bf6a9bc

Merge from live branch
author Chris Cannam
date Fri, 13 Jul 2018 10:44:33 +0100
parents b4b72f1eb644
children
rev   line source
Chris@16 1 require_dependency 'repository'
Chris@16 2 require_dependency 'checkout_helper'
Chris@16 3
Chris@16 4 module Checkout
Chris@16 5 module RepositoryPatch
Chris@16 6 def self.included(base) # :nodoc:
Chris@16 7 base.extend(ClassMethods)
Chris@16 8 base.send(:include, InstanceMethods)
Chris@16 9
Chris@16 10 base.class_eval do
Chris@16 11 unloadable
Chris@16 12 serialize :checkout_settings, Hash
Chris@16 13 end
Chris@16 14 end
Chris@16 15
Chris@16 16 module ClassMethods
Chris@16 17 def allow_subtree_checkout?
Chris@16 18 # default implementation
Chris@16 19 false
Chris@16 20 end
Chris@16 21
Chris@16 22 def checkout_default_command
Chris@16 23 # default implementation
Chris@16 24 ""
Chris@16 25 end
Chris@16 26 end
Chris@16 27
Chris@16 28 module InstanceMethods
Chris@16 29 def after_initialize
Chris@16 30 self.checkout_settings ||= {}
Chris@16 31 end
Chris@16 32
Chris@16 33 def checkout_overwrite=(value)
Chris@16 34 checkout_settings['checkout_overwrite'] = value
Chris@16 35 end
Chris@16 36
Chris@16 37 def checkout_overwrite
Chris@16 38 (checkout_settings['checkout_overwrite'].to_i > 0) ? '1' : '0'
Chris@16 39 end
Chris@16 40
Chris@16 41 def checkout_overwrite?
Chris@16 42 self.scm_name != 'Abstract' && checkout_overwrite.to_i > 0
Chris@16 43 end
Chris@16 44
Chris@16 45 def checkout_description=(value)
Chris@16 46 checkout_settings['checkout_description'] = value
Chris@16 47 end
Chris@16 48
Chris@16 49 def checkout_description
Chris@16 50 if checkout_overwrite?
Chris@16 51 checkout_settings['checkout_description']
Chris@16 52 else
Chris@16 53 if CheckoutHelper.supported_scm.include?(scm_name) && Setting.send("checkout_overwrite_description_#{scm_name}?")
Chris@16 54 Setting.send("checkout_description_#{scm_name}")
Chris@16 55 else
Chris@16 56 Setting.send("checkout_description_Abstract")
Chris@16 57 end
Chris@16 58 end
Chris@16 59 end
Chris@16 60
Chris@16 61 def checkout_protocols
Chris@16 62 @checkout_protocols ||= begin
Chris@16 63 if CheckoutHelper.supported_scm.include? scm_name
Chris@16 64 if checkout_overwrite?
Chris@16 65 protocols = checkout_settings['checkout_protocols'] || []
Chris@16 66 else
Chris@16 67 protocols = Setting.send("checkout_protocols_#{scm_name}") || []
Chris@16 68 end
Chris@16 69 else
Chris@16 70 protocols = []
Chris@16 71 end
Chris@16 72
Chris@16 73 protocols.collect do |p|
Chris@16 74 Checkout::Protocol.new p.merge({:repository => self})
Chris@16 75 end
Chris@16 76 end
Chris@16 77 end
Chris@16 78
Chris@16 79 def checkout_protocols=(value)
Chris@16 80 # value is an Array or a Hash
Chris@16 81 if value.is_a? Hash
Chris@16 82 value = value.dup.delete_if {|id, protocol| id.to_i < 0 }
Chris@16 83 value = value.sort{|(ak,av),(bk,bv)|ak<=>bk}.collect{|id,protocol| protocol}
Chris@16 84 end
Chris@16 85
Chris@16 86 checkout_settings['checkout_protocols'] = value
Chris@16 87 end
Chris@16 88
Chris@16 89 def checkout_display_login
Chris@16 90 if checkout_overwrite? && self.scm_name == "Subversion"
Chris@16 91 result = checkout_settings['checkout_display_login']
Chris@16 92 else
Chris@16 93 result = Setting.checkout_display_login
Chris@16 94 end
Chris@16 95 (result.to_i > 0) ? '1' : '0'
Chris@16 96 end
Chris@16 97
Chris@16 98 def checkout_display_login?
Chris@16 99 checkout_display_login.to_i > 0
Chris@16 100 end
Chris@16 101
Chris@16 102 def checkout_display_login=(value)
Chris@16 103 value = nil unless self.scm_name == "Subversion"
Chris@16 104 checkout_settings['checkout_display_login'] = value
Chris@16 105 end
Chris@16 106
Chris@16 107 def checkout_display_command?
Chris@16 108 checkout_display_command.to_i > 0
Chris@16 109 end
Chris@16 110
Chris@16 111 def checkout_display_command=(value)
Chris@16 112 checkout_settings['checkout_display_command'] = value
Chris@16 113 end
Chris@16 114
Chris@16 115 def checkout_display_command
Chris@16 116 if checkout_overwrite?
Chris@16 117 checkout_settings['checkout_display_command']
Chris@16 118 else
Chris@16 119 Setting.send("checkout_display_command_#{scm_name}")
Chris@16 120 end
Chris@16 121 end
Chris@16 122
Chris@16 123 def allow_subtree_checkout?
Chris@16 124 self.class.allow_subtree_checkout?
Chris@16 125 end
Chris@16 126
Chris@16 127 def checkout_default_command
Chris@16 128 self.class.checkout_default_command
Chris@16 129 end
Chris@16 130 end
Chris@16 131 end
Chris@16 132 end
Chris@16 133
Chris@16 134 Repository.send(:include, Checkout::RepositoryPatch)
Chris@16 135
Chris@16 136 subtree_checkout_repos = ["Subversion", "Cvs"]
Chris@16 137 commands = {
Chris@16 138 'Bazaar' => 'bzr checkout',
Chris@16 139 'Cvs' => 'cvs checkout',
Chris@16 140 'Darcs' => 'darcs get',
Chris@16 141 'Git' => 'git clone',
Chris@16 142 'Mercurial' => 'hg clone',
Chris@16 143 'Subversion' => 'svn checkout'
Chris@16 144 }
Chris@16 145
Chris@16 146 CheckoutHelper.supported_scm.each do |scm|
Chris@16 147 require_dependency "repository/#{scm.underscore}"
Chris@16 148 cls = Repository.const_get(scm)
Chris@16 149
Chris@16 150 allow_subtree_checkout = ""
Chris@16 151 if subtree_checkout_repos.include? scm
Chris@16 152 allow_subtree_checkout = <<-EOS
Chris@16 153 def allow_subtree_checkout?
Chris@16 154 true
Chris@16 155 end
Chris@16 156 EOS
Chris@16 157 end
Chris@16 158
Chris@16 159 checkout_command = ""
Chris@16 160 if commands[scm]
Chris@16 161 checkout_command = <<-EOS
Chris@16 162 def checkout_default_command
Chris@16 163 '#{commands[scm]}'
Chris@16 164 end
Chris@16 165 EOS
Chris@16 166 end
Chris@16 167
Chris@16 168 class_mod = Module.new
Chris@16 169 class_mod.module_eval(<<-EOF
Chris@16 170 def self.included(base)
Chris@16 171 base.extend ChildClassMethods
Chris@16 172
Chris@16 173 base.class_eval do
Chris@16 174 unloadable
Chris@16 175 serialize :checkout_settings, Hash
Chris@16 176 end
Chris@16 177 end
Chris@16 178
Chris@16 179 module ChildClassMethods
Chris@16 180 #{allow_subtree_checkout}
Chris@16 181 #{checkout_command}
Chris@16 182 end
Chris@16 183 EOF
Chris@16 184 )
Chris@16 185 cls.send(:include, class_mod)
Chris@16 186 end