class Git::Status::StatusFileFactory

@api private
a hash of StatusFile objects.
A factory class responsible for fetching git status data and building

def construct_files

StatusFile objects.
Gathers all status data and builds a hash of file paths to
def construct_files
  files_data = fetch_all_files_data
  files_data.transform_values do |data|
    StatusFile.new(@base, data)
  end
end

def fetch_all_files_data

Fetches and merges status information from multiple git commands.
def fetch_all_files_data
  files = @lib.ls_files # Start with files tracked in the index.
  merge_untracked_files(files)
  merge_modified_files(files)
  merge_head_diffs(files)
  files
end

def initialize(base)

def initialize(base)
  @base = base
  @lib = base.lib
end

def merge_head_diffs(files)

def merge_head_diffs(files)
  return if @lib.empty?
  # Merge changes between HEAD and the index.
  @lib.diff_index('HEAD').each do |path, data|
    (files[path] ||= {}).merge!(data)
  end
end

def merge_modified_files(files)

def merge_modified_files(files)
  # Merge changes between the index and the working directory.
  @lib.diff_files.each do |path, data|
    (files[path] ||= {}).merge!(data)
  end
end

def merge_untracked_files(files)

def merge_untracked_files(files)
  @lib.untracked_files.each do |file|
    files[file] = { path: file, untracked: true }
  end
end