Sha256: 23bd9496188e60ff31aa7a6160ff0f2df17658b1afb7980eb2c59098f44ee0ff

Contents?: true

Size: 1.96 KB

Versions: 3

Compression:

Stored size: 1.96 KB

Contents

# Copyright: Copyright (c) 2005  Nicolas Pouillard. All rights reserved.
# Author: Nicolas Pouillard  <ertai@lrde.epita.fr>.
# License: Gnu General Public License.

# $LastChangedBy: polrop $
# $Id: svn.rb 159 2005-02-18 12:07:23Z polrop $

require 'uri_ex'
require 'abstract'

module URI

  class Svn < Generic

    COMPONENT = [
      :scheme,
      :host,
      :path
    ].freeze

    def self.build ( args )
      tmp = Util::make_components_hash(self, args)
      return super(tmp)
    end

    def checkout
      # klass = SvnSchemes.guess(scheme)
      # klass.new
      tmp = TempPath.new('svn-checkout')
      out = TempPath.new('svn-checkout-out')
      err = TempPath.new('svn-checkout-err')
      tmp.mkpath
      target = to_s.sub(/^svn\./, '')
      tmp += pathname.basename
      unless system "svn checkout #{target} #{tmp} > #{out} 2> #{err}"
        raise CheckoutError, to_s
      end
      [tmp, out, err]
    end

  end # class Svn

  module SvnSchemes

    def self.guess ( aScheme )
      init
      @@svn_schemes[aScheme]
    end

    def self.init
      return if defined? @@svn_schemes
      @@svn_schemes = {}
      constants.each do |const|
        klass = const_get(const)
        next if klass.abstract?
        @@svn_schemes[klass.scheme] = klass
      end
      @@svn_schemes.freeze
    end

    def self.svn_schemes
      init
      @@svn_schemes
    end

    class AbstractSvnScheme
      include Abstract

      def self.scheme
        const_get(:SCHEME)
      end

    end

    class SvnScheme < AbstractSvnScheme
      include Concrete
      SCHEME = 'SVN'
    end

    class SvnSshScheme < AbstractSvnScheme
      include Concrete
      SCHEME = 'SVN+SSH'
    end

    class SvnHttpScheme < AbstractSvnScheme
      include Concrete
      SCHEME = 'SVN.HTTP'
    end

    class SvnHttpsScheme < AbstractSvnScheme
      include Concrete
      SCHEME = 'SVN.HTTPS'
    end

  end

  SvnSchemes.svn_schemes.each_key do |name|
    @@schemes[name] = Svn
  end

end # module URI

Version data entries

3 entries across 3 versions & 1 rubygems

Version Path
ttk-0.1.576 ruby_ex/uri/svn.rb
ttk-0.1.579 ruby_ex/uri/svn.rb
ttk-0.1.580 ruby_ex/uri/svn.rb