-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathvoxide-git-files
executable file
·67 lines (57 loc) · 2.03 KB
/
voxide-git-files
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
#!/usr/bin/env ruby
# Print git files -- commit / index / local -- with nice colors
# prints: <filename><tab><pretty display>
# use with: fzf --ansi --with-nth 2 -d $'\t' | cut -f1
require 'shellwords'
class String
def black; "\e[30m#{self}\e[0m" end
def red; "\e[31m#{self}\e[0m" end
def green; "\e[32m#{self}\e[0m" end
def brown; "\e[33m#{self}\e[0m" end
def blue; "\e[34m#{self}\e[0m" end
def magenta; "\e[35m#{self}\e[0m" end
def cyan; "\e[36m#{self}\e[0m" end
def gray; "\e[37m#{self}\e[0m" end
def bg_black; "\e[40m#{self}\e[0m" end
def bg_red; "\e[41m#{self}\e[0m" end
def bg_green; "\e[42m#{self}\e[0m" end
def bg_brown; "\e[43m#{self}\e[0m" end
def bg_blue; "\e[44m#{self}\e[0m" end
def bg_magenta; "\e[45m#{self}\e[0m" end
def bg_cyan; "\e[46m#{self}\e[0m" end
def bg_gray; "\e[47m#{self}\e[0m" end
def bold; "\e[1m#{self}\e[22m" end
def italic; "\e[3m#{self}\e[23m" end
def underline; "\e[4m#{self}\e[24m" end
def blink; "\e[5m#{self}\e[25m" end
def reverse_color; "\e[7m#{self}\e[27m" end
def esc; Shellwords.escape(self); end
end
sha_to_change = ARGV.first
local = sha_to_change ? [] : `git diff --name-only`.strip.split("\n")
index = sha_to_change ? [] : `git diff --name-only --cached`.strip.split("\n")
commit = `git show --name-only --oneline #{sha_to_change&.esc} | tail -n +2`.strip.split("\n")
root_dir = `git rev-parse --show-toplevel`.strip
all = local | index | commit
# all = all[0..34] # why did I do this?
all.reject!{|f| !File.exist?("#{root_dir}/#{f}")}
all.sort_by!{|f| File.mtime("#{root_dir}/#{f}")}.reverse!
if (%w[raw --raw -r r] & ARGV).any?
puts all.join("\n")
exit 0
end
all.each do |f, i|
puts [
File.join(root_dir, f),
"\t",
local.include?(f) ? 'loc'.red : ' ',
' ',
index.include?(f) ? 'ind'.blue : ' ',
' ',
commit.include?(f) ? 'com'.green : ' ',
' ',
f.bold,
].join
end
print "\t"
system "git show --quiet --oneline"