After having read a bit more about the various subversion properties I decided
to use the svn:keywords
property to solve my problem: inserting
automatically a timestamp in program code I publish on my website. Until recently,
the Perl program that generates (almost) all pages on this site read the timestamp
from the source code files it includes. A feature I broke by dumping the Subversion
repository on my old development machine, loading it back on my new one - a Dell
Vostro 200 ST - and checking out the files again. The good news was that making
my sites from 70+ XML files now just took about 35 seconds instead of over 300
seconds. The bad news was that the timestamps got lost. Not a problem for most
files, except for the ones I included in web pages with the timestamp added
to reflect the time the program code was last updated.
After I discovered this; svn diff
showed that some HTML files, which
I also keep under version control for exactly this reason: to verify if the same
XML files still generate the same HTML 4.01 strict pages, didn't match the output
I expected, I considered at first to use touch
to set the timestamps
back. Not only did that sound as quite some work, but also it would mean that
as soon as I checked out source code on a different computer, I had to fix
the timestamp of each file on that computer as well.
Anyway, after some reading, mostly in the online Subversion manual, I decided to
use the svn:keywords
property, which would substitute the keyword
specified (keyword substitution) for dynamic information in the file itself.
I decided to use the Id keyword because the dynamic information not only included
a timestamp but also the filename, revision number, and author.
So I opened a file, in this example https-test.pl
using the vi editor
and added the following at line 5 of the Perl program file:
# $Id$
The first character is a comment character (in Perl), and $Id$
is the magic keyword which Subversion will replace with the filename, the
revision of the file, the date and time in UTC, and the author. In order
to get this behavior, svn:keywords
property must be set to Id:
$ svn propset svn:keywords "Id" https-test.pl
property 'svn:keywords' set on 'https-test.pl'
Note: the second line is a message reported by Subversion.
Next, I comitted the file as follows:
svn ci https-test.pl -m "Set svn:keywords property to Id"
Sending https-test.pl
Transmitting file data .
Committed revision 1081.
After this the file https-test.pl got magically updated to (only the first 8 lines are shown):
# https-test.pl - HTTPS GET example
#
# (c) Copyright, 2004-2005 By John Bokma, http://johnbokma.com/
#
# $Id: https-test.pl 1081 2008-09-30 19:03:23Z john $
use strict;
use warnings;
And from now on - hopefully more drastic changes than just adding a $Id$ - each time the file is commited to the Subversion repository, the revision number and timestamp will be updated. Looks like a feature I should have learned about much earlier on. But it's never too late to learn, as my mother would say.
On the Compaq SR1505LA I mostly used (and still use) TortoiseSVN as a Subversion client. So when I
had modified all source files from the command line on Linux, I decided to check out how easy the
svn:keywords
property could be set via TortoiseSVN.
And it turned out to be quite easy. If you want to give it a try, follow the following instructions:
svn:keywords
in the Property name combobox and
type Id
in the Property value text entry field.
This looks like quite some more steps compared to the command line version. Remember that you can install a command line client on Windows XP as well.