class Git::Status

Public Class Methods

new(base) click to toggle source
# File lib/git/status.rb, line 6
def initialize(base)
  @base = base
  construct_status
end

Public Instance Methods

[](file) click to toggle source

enumerable method

# File lib/git/status.rb, line 49
def [](file)
  @files[file]
end
added() click to toggle source
# File lib/git/status.rb, line 15
def added
  @files.select { |k, f| f.type == 'A' }
end
changed() click to toggle source
# File lib/git/status.rb, line 11
def changed
  @files.select { |k, f| f.type == 'M' }
end
deleted() click to toggle source
# File lib/git/status.rb, line 19
def deleted
  @files.select { |k, f| f.type == 'D' }
end
each(&block) click to toggle source
# File lib/git/status.rb, line 53
def each(&block)
  @files.values.each(&block)
end
pretty() click to toggle source
# File lib/git/status.rb, line 27
def pretty
  out = ''
  self.each do |file|
    out << pretty_file(file)
  end
  out << "\n"
  out
end
pretty_file(file) click to toggle source
# 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
untracked() click to toggle source
# File lib/git/status.rb, line 23
def untracked
  @files.select { |k, f| f.untracked }
end

Private Instance Methods

construct_status() click to toggle source
# 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