Module: Git::Modified

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

Constant Summary collapse

VERSION =
"0.2.3"

Class Method Summary collapse

Class Method Details

.latest_hashObject



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

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

.modified(hash = nil) ⇒ Object



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

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

.runObject



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

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

.show_modified_files_on_commit(hash) ⇒ Object



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

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



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

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



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

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