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
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
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