Regular Expression Documentaion

Regular Expressions are super powerful, and are included in most programming languages.
Regardless of what programming language you use, regular expressions will make certain text processing tasks a breeze.
If you have ever looped through every character in a string of text searching for specific characters just stop and learn regular expressions.
You will be so glad you did.


SVN remove symlinks How To

It is easy to accidentally commit symlinks to an SVN repository. Once you do it is not so easy to remove them.
When you commit a symlink to svn, svn doesn't commit the symlink file, rather it adds the symlink as a directory and follow the symlink adding the contents. This isn't really svn doing this but rather the filesystem.

For example (I will use a Drupal site example) I typically checkout files and modules via CVS in a contributions dir and symlink to those from the modules and themes dir so my file sistem is like this 

kdesvn kompare diff script

This is just a simple perl script that makes it easy to do svn diffs in kompare. Basically, just put it in your bin dir and then from your svn working dir you can just say svndiffr filename or svndiffr path/filename. The script will print out the svn log for the file and ask you for a revision. Enter the revision number you want to diff you working copy with and hit enter. Kompare will launch with the revision on the left and the working copy on the right so that changes are saved to the working copy.

kdesvn and kompare

My kdesvn and kompare now work together in perfect harmony ... Finally! kdesvn is a really great gui svn tool for KDE, but it doesn't play nice with kompare by default. Kompare is a really great gui diff app for kde.

The problem is that although kdesvn comes preconfigured to use kompare as an external diff tool, the default is to pass both revisions in as stadard input, so kompare doesn't know where to save the merge file when you are done. I have been living with this for a while now just using the command line, but it was really bugging me for a couple of reasons.