Sha256: 88d0dabdf6b96f820512841485bbd70b4f3dfe3cb250af950c1e01fca4435a15

Contents?: true

Size: 1.39 KB

Versions: 10

Compression:

Stored size: 1.39 KB

Contents

require 'fileutils'
require 'open-uri'

module PkgForge
  ##
  # Add source methods to Forge
  class Forge
    attr_writer :source

    Contract None => HashOf[Symbol => Any]
    def source
      @source ||= { type: 'git', path: 'upstream' }
    end

    private

    Contract None => nil
    def prepare_source!
      type_method = "#{source[:type]}_prepare_source"
      return send(type_method) if respond_to?(type_method, true)
      raise("Unknown source type: #{source[:type]}")
    end

    Contract None => nil
    def git_prepare_source
      run 'git submodule update --init --recursive'
      run "git clone --recursive '#{source[:path]}' #{tmpdir(:build)}"
    end

    Contract None => nil
    def tar_prepare_source
      dest_file = tmpfile(:source_tar)
      File.open(dest_file, 'wb') do |fh|
        open(source[:url], 'rb') do |request| # rubocop:disable Security/Open
          fh.write request.read
        end
        verify_file(dest_file, source[:checksum])
      end
      Dir.chdir(tmpdir(:build)) do
        run "tar -xf #{dest_file} --strip-components=1"
      end
    end

    Contract None => nil
    def empty_prepare_source
      # This source type is a no-op
    end
  end

  module DSL
    ##
    # Add source methods to Forge DSL
    class Forge
      Contract HashOf[Symbol => Any] => nil
      def source(params)
        @forge.source = params
        nil
      end
    end
  end
end

Version data entries

10 entries across 10 versions & 1 rubygems

Version Path
pkgforge-0.29.1 lib/pkgforge/components/source.rb
pkgforge-0.29.0 lib/pkgforge/components/source.rb
pkgforge-0.28.0 lib/pkgforge/components/source.rb
pkgforge-0.27.0 lib/pkgforge/components/source.rb
pkgforge-0.26.0 lib/pkgforge/components/source.rb
pkgforge-0.25.1 lib/pkgforge/components/source.rb
pkgforge-0.25.0 lib/pkgforge/components/source.rb
pkgforge-0.24.1 lib/pkgforge/components/source.rb
pkgforge-0.24.0 lib/pkgforge/components/source.rb
pkgforge-0.23.2 lib/pkgforge/components/source.rb