module Git class Status include Enumerable def initialize(base) @base = base construct_status end def changed @files.select { |k, f| f.type == 'M' } end def added @files.select { |k, f| f.type == 'A' } end def deleted @files.select { |k, f| f.type == 'D' } end def untracked @files.select { |k, f| f.untracked } end def pretty out = '' self.each do |file| out << pretty_file(file) end out << "\n" out end def pretty_file(file) < file, :untracked => true} 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 end end