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 } CORES=$(grep core\ id /proc/cpuinfo | wc -l) 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() { launcher=/tmp/$$.sh cat << EOF > $launcher valgrind \ --show-leak-kinds=all \ --suppressions=$HOME/dev/valgrind.suppressions \ --leak-check=full \ --log-file=/var/tmp/vg-\$(basename \$1).log \ \$@ EOF chmod +x $launcher build testing.launcher=$launcher $@ rm -f $launcher } vgc() { launcher=/tmp/$$.sh cat << EOF > $launcher valgrind \ --tool=callgrind \ --trace-children=no \ --callgrind-out-file=/var/tmp/callgrind-\$(basename \$1).out \ \$@ EOF chmod +x $launcher build testing.launcher=$launcher variant=release debug-symbols=on $@ rm -f $launcher } str() { launcher=/tmp/$$.sh cat << EOF > $launcher strace -s400 \ -o /var/tmp/str-\$(basename \$1).out \ \$@ EOF chmod +x $launcher build testing.launcher=$launcher $@ rm -f $launcher } reset() { clear printf '\e[3J' } bisect() { MAILINGLISTS_INSTALL_BASE=$(git root)/../mailinglists ANALYTICS_INSTALL_BASE=$(git root)/analytics OCTAL_INSTALL_BASE=$(git root)/../smssite OCTAL_BASE=$(git root) CCACHE_BASEDIR=$(git root) git bisect run nice -n5 b2 -l300 -j$TASKS $@ } build() { title "Build in progress" MAILINGLISTS_INSTALL_BASE=$(git root)/../mailinglists ANALYTICS_INSTALL_BASE=$(git root)/analytics OCTAL_INSTALL_BASE=$(git root)/../smssite OCTAL_BASE=$(git root) CCACHE_BASEDIR=$(git root) time -f"...in %e seconds" nice -n5 b2 -l300 -j$TASKS $@ rtn=$? if [ $rtn -eq 0 ]; then title "✔ ${PWD/#$HOME/\~} $@" else title "✘ ${PWD/#$HOME/\~} $@" fi return $rtn } onchange() { $@ while inotifywait -qr . --exclude '\|/tags$|\.sw.$|\|/\.git/|\.gcov$' -e modify ; do reset $@ done } autobuild() { onchange build $@ } autocov() { onchange cov . 0 } # CVS cvsd() { diffWith "cvs diff -wubB --show-c-function $@" } # SVN svnd() { diffWith "svn diff --force --no-diff-deleted -x -b $@" } # Git gitd() { diffWith "git diff --no-prefix --relative -w -D -M --patience $@" } gitdc() { gitd "--cached $@" } showdiff() { local feat=${1-HEAD} target=${2-origin/master} diffWith "git diff $target...$feat -w -D -M --patience --find-copies-harder" } style_reset() { echo -ne "\001\e[0m\002" } style_set() { echo -ne "\001\e[${1};${2}m\002" } style_message() { echo -ne " $(style_set $1 $2)$3$(style_reset)" } git_prompt() { local branchname=$(git branch --show-current 2> /dev/null) if [[ -n $branchname ]]; then local detail=$(git branch --list $branchname -v 2> /dev/null) local status=$(git status --porcelain 2> /dev/null) local style=00 local color=92 if [[ $detail =~ ahead\ [0-9] ]]; then if [[ $detail =~ behind\ [0-9] ]]; then style=05 else style=03 fi elif [[ $detail =~ behind\ [0-9] ]]; then style=04 fi if [[ -n $status ]]; then color=96 fi style_message $style $color $branchname fi } bjam_prompt() { if [[ -f Jamfile.jam || -f Jamroot.jam ]]; then local updates=$(bjam -nd1 | sed -n 's/^\.\.\.updated \([0-9]\+\) targets\.\.\.$/\1/p') if [[ -n $updates ]]; then style_message 01 31 $updates fi fi } result_prompt() { case $1 in 0) style_message 00 32 ✔ ;; "") style_message 01 34 $ ;; *) style_message 01 91 ✘ ;; esac } prompts() { local res=$? git_prompt result_prompt $res } gppdmb() { PARENT=${1:-master} git checkout $PARENT && git pull --prune && git delete-merged-branches } findbranches() { find ~/work/ -name .git -type d | while read r ; do echo $r ; git -C $(dirname $r) branch -a | grep "\<.$1[^0-9]" ; done } 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}'