Sha256: c21e80cd2f226c29f652897e88453fea796d7517a98bebaf0fd6a033e0752563

Contents?: true

Size: 1.4 KB

Versions: 1

Compression:

Stored size: 1.4 KB

Contents

require "git/modified/version"
require 'contracts'

module Git
  module Modified
    include Contracts

    Contract Maybe[String] => nil
    def self.run
      case ARGV.first
      when '-v', '--version'
        version
      else
        modified ARGV.first
      end
    end

    Contract String => nil
    def self.version
      puts Git::Modified::VERSION
    end

    Contract Maybe[String] => nil
    def self.modified(hash = nil)
      if hash.nil?
        show_modified_files_on_working_tree
      else
        show_modified_files_on_commit hash
      end
    end

    Contract nil => nil
    def self.show_modified_files_on_working_tree
      puts `git status --porcelain` \
        .each_line \
        .reject { |line| line[0..1].split('').lazy.any? { |x| x == 'D' } } \
        .reject { |line| line.match /\.(jpe?g|png|gif|svg|eot|mp3|ttf|wav|wof)$/i } \
        .map    { |line| if line[0] == 'R' then line.split(' ')[-1] else line[3..-1] end }
    end

    Contract Maybe[String] => nil
    def self.show_modified_files_on_commit(hash)
      hashes = `git show --summary --format="%P" #{hash} | head -n 1`.split ' '

      if hashes.size == 2
        puts `git diff --name-only #{hashes[0]}...#{hashes[1]}`
      else
        puts `git log -m -1 --name-only --pretty="format:" #{hash}`
      end
    end

    Contract nil => String
    def self.latest_hash
      `git log --pretty=format:'%h' -n 1`
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
git-modified-0.2.3 lib/git/modified.rb