On Wed, January 9, 2013 9:03 pm, David Christensen wrote:
>
> There seems to be two competing points of view regarding version
> numbering for software source code files:
>
> 1. Per-file -- a unique version number for each file that increments
> when that file changes. RCS and CVS use this approach. They also
> provide keywords that can be embedded in files for accessing version
> control system meta-data. For example, I use CVS and embedded it's
> "$Revision$" keyword in my Perl files with the following incantation to
> set the Perl $VERSION variable:
>
> our $VERSION = sprintf "%d.%03d", q$Revision: 1.32 $ =~ /(\d+)/g;
>
> http://ximbiot.com/cvs/manual/cvs-1.12.13/cvs_12.html#SEC99
>
> 2. Per-set -- unique version number for a set of files that increments
> when any one of them changes (and is the same for all the files in the
> set). I believe Subversion and Git use this approach (and Mercurial?).
>
Yeah, after dithering about it for a few days, I went with the philosophy
that the package has the version, not the individual modules. For the
simple reason that the package as a whole is what's being developed, from
the documentation to the scripts to the README file to, of course, the
actual modules themselves.
Hmm. I use the 'dist_version' key in my Build.PL file. Maybe I can take
Gabor's idea and update my $VERSION values automatically using Build.PL as
the starting point. This would maintain the "holistic" approach, and give
me a single file to update instead of worrying about every file with a
version number (which for me would be the README file and any *.pm files
under the lib directory).
>
> Perhaps Gabor should consider using the second type of version control
> system that allows a Perl incantation similar to the first.
>
Except that PAUSE (which is the primary driver of the $VERSION use) wouldn't
be able to make use of it. As far as I can tell, it loads the .pm files to
find the $VERSION number, and doesn't look at META.json at all.
-john