self._svn_build_cmd

in lib/whimsy/asf/svn.rb [339:413]


    def self._svn_build_cmd(command, path, options)
      bad_keys = options.keys - VALID_KEYS
      if bad_keys.size > 0
        raise ArgumentError.new "Following options not recognised: #{bad_keys.inspect}"
      end

      if command.is_a? String
        
        Wunderbar.error "command #{command.inspect} is invalid" unless command =~ %r{^[a-z]+$}
      else
        if command.is_a? Array
          command.each do |cmd|
            raise ArgumentError.new "command #{cmd.inspect} must be a String" unless cmd.is_a? String
          end
          Wunderbar.error "command #{command.first.inspect} is invalid" unless command.first =~ %r{^[a-z]+$}
          command.drop(1).each do |cmd|
            
            Wunderbar.error "Invalid option #{cmd.inspect}" unless cmd =~ %r{^(--[a-z][a-z=]+|-l\d+|-[a-z])$}
          end
        else
          raise ArgumentError.new 'command must be a String or an Array of Strings'
        end
      end
      
      cmd = ['svn', *command, '--non-interactive']
      stdin = nil 

      msg = options[:msg]
      cmd += ['--message', msg] if msg

      depth = options[:depth]
      cmd += ['--depth', depth] if depth

      cmd << '--quiet' if options[:quiet]

      cmd << '--xml' if options[:xml]

      item = options[:item]
      cmd += ['--show-item', item] if item

      revision = options[:revision]
      cmd += ['--revision', revision] if revision

      
      env = options[:env]
      if env
        password = env.password
        user = env.user
      else
        password = options[:password]
        user = options[:user]
      end
      if user == 'whimsysvn'
        cmd[0] = 'whimsysvn' 
      end
      unless options[:dryrun] 
        
        if password
          cmd << ['--username', user, '--no-auth-cache']
          stdin = password
          cmd << ['--password-from-stdin']
        end
      end

      cmd << '--' 

      if path.is_a? Array
        cmd += path
      else
        cmd << path
      end

      return cmd, stdin
    end