Class: GitMulticast::Statuser

Inherits:
Object
  • Object
show all
Includes:
Process
Defined in:
lib/git_multicast/statuser.rb

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(dir) ⇒ Statuser

Returns a new instance of Statuser.



7
8
9
# File 'lib/git_multicast/statuser.rb', line 7

def initialize(dir)
  @dir = dir
end

Instance Attribute Details

#dirObject (readonly)

Returns the value of attribute dir.



5
6
7
# File 'lib/git_multicast/statuser.rb', line 5

def dir
  @dir
end

Instance Method Details

#get_statusesObject



11
12
13
14
15
16
# File 'lib/git_multicast/statuser.rb', line 11

def get_statuses
  start_time = Time.now
  output_status_zip = statuses

  OutputFormatter.format(output_status_zip, start_time)
end

#read_output(streams) ⇒ Object



35
36
37
38
39
40
# File 'lib/git_multicast/statuser.rb', line 35

def read_output(streams)
  streams.map do |r, w|
    w.close unless w.closed?
    r.read
  end
end

#statusesObject



18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
# File 'lib/git_multicast/statuser.rb', line 18

def statuses
  dirs = Dir.entries(dir)
    .select { |f| File.directory? f }
    .reject { |f| f =~ /^\./  } # ., .. and .git and the like

  streams = dirs.map do |dir|
    r, w = IO.pipe
    w.write("Repo: #{dir}\n")
    spawn("cd #{dir} && git status", out: w, err: w)
    [r, w]
  end
  _, statuses = waitall.transpose

  output = read_output(streams)
  output.zip(statuses)
end