Module: DevContext::Commands::Status

Included in:
DevContext::CLI
Defined in:
lib/dev_context/commands/status.rb

Instance Method Summary collapse

Instance Method Details

#cmd_status(mode: "status") ⇒ Object



6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
# File 'lib/dev_context/commands/status.rb', line 6

def cmd_status(mode: "status")
  args = argv.dup
  all = false
  dirty_only = (mode == "wip")
  branch_pattern = nil
  path_pattern = nil
  parser = OptionParser.new
  parser.on("-a", "--all", "Show status for all known repos") { all = true }
  parser.on("-d", "--dirty", "Show only repos that are not up to date") { dirty_only = true }
  parser.on("-b", "--branch BRANCHPATTERN", "Filter by branch pattern") { |v| branch_pattern = v }
  parser.on("-p", "--path PATHPATTERN", "Filter by path pattern") { |v| path_pattern = v }
  parser.parse!(args)
  usage = mode == "wip" ? "dx wip [--all] [--dirty] [-b BRANCHPATTERN] [-p PATHPATTERN]" : "dx status [--all] [--dirty] [-b BRANCHPATTERN] [-p PATHPATTERN]"
  return usage_error(usage) unless args.empty?

  rows = all ? all_known_repo_rows : active_context_rows
  rows = rows.select { |row| pattern_match?(row[:branch], branch_pattern) }
  rows = rows.select { |row| pattern_match?(row[:path], path_pattern) }
  rows = rows.reject { |row| strip_ansi(row[:status]).start_with?("Up to date") } if dirty_only
  if rows.empty?
    out.puts(empty_message(all: all, dirty_only: dirty_only))
    return 0
  end

  render_status_table(rows)
  0
rescue OptionParser::InvalidOption => e
  err.puts("dx: #{e.message}")
  usage_error(mode == "wip" ? "dx wip [--all] [--dirty] [-b BRANCHPATTERN] [-p PATHPATTERN]" : "dx status [--all] [--dirty] [-b BRANCHPATTERN] [-p PATHPATTERN]")
end