Class: Envandle::GitBranchReference

Inherits:
Object
  • Object
show all
Extended by:
AsGitReference
Defined in:
lib/envandle/git_branch_reference.rb

Instance Method Summary collapse

Methods included from AsGitReference

extended

Constructor Details

#initialize(context, name, url, ref) ⇒ GitBranchReference

Returns a new instance of GitBranchReference.



5
6
7
8
9
10
# File 'lib/envandle/git_branch_reference.rb', line 5

def initialize(context, name, url, ref)
  @context = context
  @name = name
  @url = url
  @ref = ref
end

Instance Method Details

#specObject



12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
# File 'lib/envandle/git_branch_reference.rb', line 12

def spec
  @spec ||= begin
    cache = @context.gemfile.gemspecs
    shas = Envandle::GitUtil.init(nil, @url) do |dir|
      Envandle::GitUtil.ls_remote_sha(dir, "refs/heads/#{@ref}")
    end
    sha = shas[0]
    cache_url = "#{@url}##{sha}"
    raise "Can't get a git commit. (url: #{@url}, branch: #{@ref})" unless sha
    dir = cache.find(cache_url) || begin
      reserve = cache.reserve
      Envandle::GitUtil.init reserve.path, @url
      sha = Envandle::GitUtil.pull(reserve.path, @ref, "master")
      reserve.url = cache_url
      reserve.save
      reserve.path
    end
    Gemspec.new(File.join(dir, "#{@name}.gemspec"))
  end
end

#to_executable_argset(base) ⇒ Object



33
34
35
36
37
38
39
40
# File 'lib/envandle/git_branch_reference.rb', line 33

def to_executable_argset(base)
  args = base.dup
  args.clear_reference
  args.args[0] = @name
  args.options[:git] = @url
  args.options[:branch] = @ref
  Argset.new(:gem, *args.args_and_options)
end