The past week was spent dealing with an infuriating data crunching task.
Chris and I decided to celebrate by killing our
poorly written Ruby cli scripts with fire. Printing the scripts and going out
back to set them on fire would be more dramatic. Though it probably would be
appreciated by the other businesses which we share space with.
I took a breather and looked into zsh functions to
accomplish this. Here’s what I came up with:
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
rageflip() { echo " ┻━┻ ︵ヽ(\`Д´)ノ︵ ┻━┻ $*" }
has_utility() { hash $1 2>/dev/null }
# Wrapper around `rm -rf` expressing callers loathing and disdain for the
# provided files.
#
# Inspiration was Homebrew's output:
# 🍺 /usr/local/Cellar/tmux/1.9: 15 files, 628K, built in 25 seconds
#
# For additional file stats, specific to code files, consider installing the
# Count Lines of Code (cloc) tool: http://cloc.sourceforge.net/
#
# brew install cloc
# sudo apt-get install cloc
#
ignite() {
if (( $# == 0 )) then echo "USAGE: ignite file [file] ..." ; return ; fi
local total_lines
local human_size
local lc_blank
local lc_comment
local lc_code
echo "BURN IT ALL!!! $(rageflip)"
for i do
# If the file is empty we have 0 lines
human_size = $( ls -lh $i | awk '{ print $5 }' )
total_lines = ${$( sed -n '$=' $i ):- 0 }
stats = "$total_lines lines"
if has_utility cloc; then
# Setup some local variables regarding file stats
lc_blank =
lc_comment =
lc_code =
eval $(
cloc $i --quiet | tail -2 | head -1 |
awk '{ print "lc_blank="$3, "lc_comment="$4, "lc_code="$5 }'
)
if [ ! -z $lc_blank ] ; then
stats = "$lc_code loc, $lc_comment comments, $lc_blank whitespace lines"
fi
fi
rm -rf $i
echo "🔥 $i: $stats, $human_size"
done
}
Now we can sit back and watch it all burn:
1
2
3
4
5
6
$ ignite script/crunch-*
BURN IT ALL!!! ┻━┻ ︵ヽ( ` Д´) ノ︵ ┻━┻
🔥 script/crunch-dump-sessions: 5 loc, 5 comments, 2 whitespace lines, 330B
🔥 script/crunch-normalize: 47 loc, 14 comments, 11 whitespace lines, 2.2K
🔥 script/crunch-import-csv: 101 loc, 2 comments, 20 whitespace lines, 2.7K
🔥 script/crunch-timestamp: 203 loc, 44 comments, 38 whitespace lines, 8.4K
Though at this point, it might as well be a full script file. If I do that, I
might as well just write it as a Ruby cli…