Marius van Witzenburg "Learned my lesson in life, now setting my action to stay in life."

13Apr/102

Creating a patch to update one of your project its external vendor code.

I use this way to upgrade projects such as DokuWiki and CakePHP.

The advantage of this method is you will keep modifications you have made in the code of that vendor.
In my description I use FreeBSD and Mac OS X so you might need to adjust the commands for a different Operating System.

Create the patch file

First download the old and the new version code from your vendor site. In this example this is the website of CakePHP.
You need this that you can match the old version to the new version you want to upgrade to.

Create a temp directory to work in.

mkdir myUpgrade
cd myUpgrade

Download the two versions of CakePHP, your current and the version you desire to upgrade to

  • http://github.com/cakephp/cakephp1x/tarball/1.3.0-RC3
  • http://github.com/cakephp/cakephp1x/tarball/1.3.0-RC4

Unpack tarballs:

tar -xzvf cakephp-cakephp1x-348e5f0.tar.gz
tar -xzvf cakephp-cakephp1x-f63ab48.tar.gz

Now create the aptch width using the diff utility:

diff -Naur -x '.svn' -x '._*' cakephp-cakephp1x-348e5f0 cakephp-cakephp1x-f63ab48 > cakephp.diff

Applying the patch

To apply the patch file you created in the previous step, change into your real vendor directory and run the patch tool.
You may first want to do a test run to see if any conflicts may happen and what files are affected:

cd myUpgrade
patch -E -p1 < ../cakephp.diff --dry-run

The output should be something like this:

patching file cake/VERSION.txt
patching file cake/basics.php
patching file cake/config/config.php
*etc*

When you're happy, apply the patch:

patch -E -p1 < ../cakephp.diff

Once patch is applied you're done :-)

14Aug/090

Backup/Refresh repository when upgrading Subversion to a newer version (dump/load)

Shut down svnserve, Apache, and anything else that might access the repository.

svnadmin dump /repository/path/here > dumpfile.txt
mv /repository/path/here /repository/path/here_old

Upgrade Subversion.

svnadmin create /repository/path/here
svnadmin load /repository/path/here > dumpfile.txt

Copy over hook scripts, etc, from the old repository to the new one.

And last but not least. Restart Apache, svnserver or any other app you run :)