class Git::Status

def construct_status

def construct_status
  @files = @base.lib.ls_files
  
  # find untracked in working dir
  Dir.chdir(@base.dir.path) do
    Dir.glob('**/*') do |file|
      @files[file] = {:path => file, :untracked => true} unless @files[file] || File.directory?(file)
    end
  end
  # find modified in tree
  @base.lib.diff_files.each do |path, data|
    @files[path] ? @files[path].merge!(data) : @files[path] = data
  end
  
  # find added but not committed - new files
  @base.lib.diff_index('HEAD').each do |path, data|
    @files[path] ? @files[path].merge!(data) : @files[path] = data
  end
  
  @files.each do |k, file_hash|
    @files[k] = StatusFile.new(@base, file_hash)
  end
end