Sha256: f8a93641d63992214ba9bc2df55645e9ddf43739c36824dfaf6bec379ad45fc8

Contents?: true

Size: 1.04 KB

Versions: 1

Compression:

Stored size: 1.04 KB

Contents

require 'grit'

module Git
  class DiffError < StandardError; end
  
  class Diff
    attr_reader :revision
  
    def initialize(dir, revision)
      @revision = revision
      @raw = `cd #{dir}; git diff --name-status #{@revision} HEAD`
      check_state!
    end

    def changed
      files_flagged ['A', 'C', 'M']
    end

    def deleted
      files_flagged ['D']
    end

    private

    def files_flagged(statuses)
      items = []
      @raw.split("\n").each do |line|
        status, file = line.split("\t")
        items << file if statuses.include? status
      end
      items
    end
    
    def check_state!
      if $?.exitstatus != 0
        raise DiffError
      end
    end
  end

  class Tree
    def initialize(dir, revision)
      @dir = dir
      @commit = Grit::Repo.new(dir).commit(revision)
      @tree = @commit.tree
    end
    
    def files
      `cd #{@dir}; git ls-tree --name-only -r #{revision}`.split("\n")
    end

    def show(file)
      (@tree / file).data
    end
  
    def revision
      @commit.sha
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
dandelion-0.1.4 lib/dandelion/git.rb