body() { IFS= read -r header printf '%s\n' "$header" "$@" } col() { awk "{ print \$$1; }" } mp4() { ffmpeg -i "$1" -vcodec copy -acodec ac3 "${1%.*}.mp4" } safedir() { echo "$@ $(pwd)" | md5sum | cut -b-32 } diffWith() { diffCmd=$@ diffFile="/tmp/diffwith-$(safedir $diffCmd).patch" $diffCmd > $diffFile dos2unix -q $diffFile ( $EDITOR $diffFile ; rm -f $diffFile ) & } showimage() { ( local pkg pkg=$1 pkg="${pkg:=*/*}" cd $(portageq envvar PORTAGE_TMPDIR)/portage/$pkg-*/image || return 1 find . -not -type d -print0 | xargs -0r ls -lvhF --color=auto du -shc */* ) } cov() { local cov=/tmp/cov.$$ local all=$cov/all local key=$cov/key local html=$cov/html local htmlfin=bin/cov local gcov=$(build $@ -qand1 variant=coverage | grep -w compile | \ sed -n "s/.*\/gcc-\([0-9.]\+\)\/.*/gcov-\1/p" | head -n1) if [[ -z $gcov ]] ; then echo "Couldn't figure a gcov version" return 1 fi gcov=$(find ${PATH//:/ } -name "$gcov*" 2> /dev/null | sort -Vr | head -n1) if [[ ! -x $gcov ]] ; then echo "Couldn't find a suitable gcov" return 1 fi echo "Using $gcov" echo "Building $@" mkdir -p $cov gcov=$gcov cov=$cov build testing.launcher=~/dev/util/diff.cov $@ -q variant=coverage || return 2 echo "Generating HTML" mkdir -p $html genhtml bin/*.info -o $html -s -k -t . --demangle-cpp --sort --function-coverage -q --num-spaces=2 || return 5 rsync -a --delete-after $html/ $htmlfin/ rm -rf $cov xdotool search --name LCOV windowactivate --sync key F5 windowactivate $(xdotool getactivewindow) || \ xdg-open "file://$(realpath $htmlfin)/index.html" echo "Done" } sizes() { MODE="variant=release strip=on" TARGETS=$(build $MODE $@ -and1 | grep '^\(gcc\|clang-linux\)\.link' | cut -d ' ' -f 2) if [[ -z $TARGETS ]] ; then return ; fi build $MODE -d0 $@ find $TARGETS -printf "./%p\t%s\n" | \ sed "s|/bin/.*/\([^/]\+\s\)|\t\1|; s|^$(pwd)/||" | \ sort -bk1,2 | \ column -N module,binary,size -R module,binary,size -t -s $'\t' } bloatysizes() { MODE="variant=release strip=off debug-symbols=on testing.execute=off" TARGETS=$(build $MODE $@ -and1 | grep '^\(gcc\|clang-linux\)\.link' | cut -d ' ' -f 2) TARGET="$(echo ${TARGETS} | awk '{ print $NF }')" if [[ -z $TARGETS ]] ; then return ; fi build $MODE -d1 $@ ls -lh $TARGET bloaty -s vm --domain=vm -d symbols -C full -n 0 $TARGET | tee /var/tmp/bloaty } CPUS=$(grep core\ id /proc/cpuinfo -c) if [ -n "$DISTCC_HOSTS" ] ; then TASKS=$(echo $DISTCC_HOSTS | tr ' ' '\n' | cut -d / -f2 | paste -s -d+ | bc) elif [ -x /usr/bin/distcc ] ; then TASKS=$(distcc -j) else TASKS=$((($CORES + $CPUS) / 2)) fi export FEATURES="ccache" alias cdan="cd ~/work/web/analytics/src" alias cdsrc="cd ~/work/web/smssite/src" alias cdutl="cd ~/work/web/smssite/utils" alias cdj="cd ~/work/jsBase" alias cdt="cd ~/work/templates" alias cdw="cd ~/work/web" alias cdc="cd ~/work/config" alias cdr='cd $(git root)' alias :e="gvim" alias d="cd ~/dev" alias p="cd ~/dev/portage" alias ChuckNorris="sudo" alias l="/bin/ls -NlhvF --color" alias grep="/bin/grep -I --color=auto --exclude-dir=node_modules --exclude-dir=CVS --exclude-dir=.git --exclude-dir=.svn --exclude-dir=bin --exclude=tags --exclude-dir=docs/html --exclude-dir=target --exclude-dir=.idea --exclude=*.iml" alias emerge-state='watch "( ps -C sandbox -o stime,cmd ; tail /var/log/emerge.log /var/tmp/portage/*/*/temp/build.log 2> /dev/null )"' alias df="/bin/df -hT" title() { echo -ne "\033]0;$@\007" } vg() { valgrind \ --show-leak-kinds=all \ --suppressions=$HOME/dev/valgrind.suppressions \ --leak-check=full \ --log-file=/var/tmp/vg.log \ $@ } build() { title "Build in progress" CCACHE_BASEDIR=$(git root) nice -n5 b2 -j$TASKS $@ rtn=$? if [ $rtn -eq 0 ]; then title "✔ ${PWD/#$HOME/\~} $@" else title "✘ ${PWD/#$HOME/\~} $@" fi return $rtn } onchange() { $@ while inotifywait -qr . --exclude '/bin/|\.sw.|/target/|/\.git/|\.gcov' -e modify ; do clear printf '\e[3J' $@ done } autobuild() { onchange build $@ } autocov() { onchange cov . 0 } # CVS cvsd() { diffWith "cvs diff -wubB $@" } # SVN svnd() { diffWith "svn diff --force --no-diff-deleted -x -b $@" } # Git gitd() { diffWith "git diff --no-prefix --relative -b -M $@" } gitdc() { diffWith "git diff --cached --no-prefix --relative -b -M $@" } gppdmb() { PARENT=${1:-master} git checkout $PARENT && git pull --prune && git delete-merged-branches } createAllBranches() { for branch in $(git branch --all | grep '^\s*remotes' | egrep --invert-match '(:?HEAD|master)$'); do git branch --track "${branch#*/*/}" "$branch"; done } filterAllBranches() { git filter-branch --subdirectory-filter $1 --prune-empty --tag-name-filter cat -d /tmp/$$ -- $(git branch | cut -b 3-) } alias gst='git status' # Hg hgd() { diffWith "hg diff -p -b $@" } if [ "$(awk '$5=="/" {print $1}'