Module: Git::Modified

Includes:
Contracts, Contracts::Modules
Defined in:
lib/git/modified.rb,
lib/git/modified/version.rb

Constant Summary collapse

VERSION =
"0.2.2"

Class Method Summary collapse

Class Method Details

.latest_hashObject



54
55
56
# File 'lib/git/modified.rb', line 54

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

.modified(hash = nil) ⇒ Object



25
26
27
28
29
30
31
# File 'lib/git/modified.rb', line 25

def self.modified(hash = nil)
  if hash.nil?
    show_modified_files_on_working_tree
  else
    show_modified_files_on_commit hash
  end
end

.runObject



10
11
12
13
14
15
16
17
# File 'lib/git/modified.rb', line 10

def self.run
  case ARGV.first
  when '-v', '--version'
    version
  else
    modified ARGV.first
  end
end

.show_modified_files_on_commit(hash) ⇒ Object



43
44
45
46
47
48
49
50
51
# File 'lib/git/modified.rb', line 43

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

.show_modified_files_on_working_treeObject



34
35
36
37
38
39
40
# File 'lib/git/modified.rb', line 34

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

.versionObject



20
21
22
# File 'lib/git/modified.rb', line 20

def self.version
  puts Git::Modified::VERSION
end