Class: RubyGit::Status::Parser

Inherits:
Object
  • Object
show all
Defined in:
lib/ruby_git/status/parser.rb

Overview

Parses the git status porcelain v2 format output

git status --porcelain=v2 -z \ --untracked-files --ignored-files --renames \ --ahead-behind --branch --show-stash

Constant Summary collapse

LINE_PARSER_FACTORY =

Define the parser for each line type

{
  '1' => ->(line) { OrdinaryEntry.parse(line) },
  '2' => ->(line) { RenamedEntry.parse(line) },
  'u' => ->(line) { UnmergedEntry.parse(line) },
  '!' => ->(line) { IgnoredEntry.parse(line) },
  '?' => ->(line) { UntrackedEntry.parse(line) }
}.freeze

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(status_output) ⇒ Parser

Create a new status output parser

Examples:

status_output = `git status -u --porcelain=v2 --renames --branch --show-stash -z`
parser = RubyGit::Status::Parser.new(status_output)

Parameters:

  • status_output (String)

    raw git status output



45
46
47
48
49
50
# File 'lib/ruby_git/status/parser.rb', line 45

def initialize(status_output)
  @status_output = status_output
  @entries = []
  @branch = nil
  @stash = Stash.new(0)
end

Class Method Details

.parse(status_output) ⇒ RubyGit::Status::Report

Parse the git status output and return a report object

Examples:

status_output = `git status -u --porcelain=v2 --renames --branch --show-stash -z`
report = RubyGit::Status::Parser.parse(status_output) #=> #<RubyGit::Status::Report>

Parameters:

  • status_output (String)

    raw git status output

Returns:



33
34
35
# File 'lib/ruby_git/status/parser.rb', line 33

def self.parse(status_output)
  new(status_output).parse
end

Instance Method Details

#parseRubyGit::Status::Report

Parse the git status output

Examples:

status_output = `git status -u --porcelain=v2 --renames --branch --show-stash -z`
parser = RubyGit::Status::Parser.new(status_output)
parser.parse #=> #<RubyGit::Status::Report>

Returns:



61
62
63
64
65
# File 'lib/ruby_git/status/parser.rb', line 61

def parse
  process_lines(status_output_lines)

  Report.new(@branch, @stash, @entries)
end