Archive for the ‘ Languages ’ Category

OSX Terminal tab-autocomplete

Finally I got the real bash auto-comletion on my iMac iTerm! iEasy as pie!

sudo port install bash-completion
 
To use bash_completion, add the following lines at the end of your .bash_profile:
  if [ -f /opt/local/etc/bash_completion ]; then
      . /opt/local/etc/bash_completion
  fi

That’s it…. have fun

Poor Man’s Profiler

will profile for food

#!/bin/bash
nsamples=1
sleeptime=0
pid=$(pidof mysqld)
 
for x in $(seq 1 $nsamples)
  do
    gdb -ex "set pagination 0" -ex "thread apply all bt" -batch -p $pid
    sleep $sleeptime
  done | 
awk '
  BEGIN { s = ""; } 
  /Thread/ { print s; s = ""; } 
  /^#/ { if (s != "" ) { s = s "," $4} else { s = $4 } } 
  END { print s }' | 
sort | uniq -c | sort -r -n -k 1,1

poor man’s profiler.

SVN pre-commit hook

Stop

How to avoid system files in your repository

Today Operating systems are often creating system files to accelerate directory operations:

MacOSX: ‘.DS_Store’
Windows: ‘Thumbs.db’
KDE: ‘.directory’
….

To avoid that these files mess up your repository, create inside the 'hook' directory a file named: 'pre-commit' (beside a the example file ‘pre-commit.tmpl’).
It is very important to make sure that the script has execution rights ( chmod a+x pre-commit )

#!/bin/bash
 
REPOS="$1"
TXN="$2"
 
SVNLOOK=/usr/bin/svnlook
 
# Make sure that the log message contains some text.
$SVNLOOK log -t "$TXN" "$REPOS" | grep "[a-zA-Z0-9]" > /dev/null
if [ $? -ne 0 ]; then
        echo "Log message not specified!" 1>&2
        exit 1
fi
 
# Do not commit crap like ...
CRAP_FILES=( '.DS_Store' 'Thumbs.db' '.directory' )
for FILE in $($SVNLOOK changed -t "$TXN" "$REPOS" | cut -b 5- | xargs basename); do
        for CRAP in "${CRAP_FILES[@]}"; do
                if [ "$FILE" = "$CRAP" ]; then
                        echo "Temporary files cannot be commited (ex: '.DS_Store', 'Thumbs.db')!" 1>&2
                        exit 1
                fi
        done
done
 
# All test passed
exit 0

Enjoy!