# File lib/git/status.rb, line 6 def initialize(base) @base = base construct_status end
enumerable method
# File lib/git/status.rb, line 49 def [](file) @files[file] end
# File lib/git/status.rb, line 15 def added @files.select { |k, f| f.type == 'A' } end
# File lib/git/status.rb, line 11 def changed @files.select { |k, f| f.type == 'M' } end
# File lib/git/status.rb, line 19 def deleted @files.select { |k, f| f.type == 'D' } end
# File lib/git/status.rb, line 53 def each(&block) @files.values.each(&block) end
# File lib/git/status.rb, line 27 def pretty out = '' self.each do |file| out << pretty_file(file) end out << "\n" out end
# File lib/git/status.rb, line 36 def pretty_file(file) <<FILE #{file.path} \tsha(r) #{file.sha_repo.to_s} #{file.mode_repo.to_s} \tsha(i) #{file.sha_index.to_s} #{file.mode_index.to_s} \ttype #{file.type.to_s} \tstage #{file.stage.to_s} \tuntrac #{file.untracked.to_s} FILE end
# File lib/git/status.rb, line 23 def untracked @files.select { |k, f| f.untracked } end
# File lib/git/status.rb, line 87 def construct_status @files = @base.lib.ls_files ignore = @base.lib.ignored_files # find untracked in working dir Dir.chdir(@base.dir.path) do Dir.glob('**/*', File::FNM_DOTMATCH) do |file| next if @files[file] || File.directory?(file) || ignore.include?(file) || file =~ /^.git\/.+/ @files[file] = {:path => 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