Class: MultiGit::GitBackend::Cmd

Inherits:
Object
  • Object
show all
Defined in:
lib/multi_git/git_backend/cmd.rb

Defined Under Namespace

Classes: Error

Constant Summary collapse

READ_BLOCK =
lambda{|io|
  io.read
}

Instance Method Summary collapse

Constructor Details

#initialize(*args) ⇒ Cmd

Returns a new instance of Cmd.



23
24
25
26
27
28
29
30
31
# File 'lib/multi_git/git_backend/cmd.rb', line 23

def initialize(*args)
  if args.first.kind_of? Hash
    @env = args.shift
  else
    @env = {}
  end
  @cmd = args.shift
  @opts = args.any? ? args.shift.dup : {}
end

Instance Method Details

#call(*args, &block) ⇒ Object Also known as: []



58
59
60
# File 'lib/multi_git/git_backend/cmd.rb', line 58

def call(*args, &block)
  call_env({}, *args, &block)
end

#call_env(env, *args, &block) ⇒ Object



37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
# File 'lib/multi_git/git_backend/cmd.rb', line 37

def call_env(env, *args, &block)
  s = cmd(*args)
  block ||= READ_BLOCK
  result = nil
  message = nil
  status = popen_foo(@env.merge(env), s.join(' ')) do | stdin, stdout, stderr |
    if block.arity == 1
      stdin.close
      result = block.call(stdout)
    else
      result = block.call(stdin, stdout)
    end
    message = stderr.read
  end
  if status.exitstatus == 0
    return result
  else
    raise Error[status.exitstatus], message.chomp
  end
end