February 11, 2008

I’ve now put together a first attempt at the “release tool” part of the LCFG buildtools project. This should allow developers to use a CVS repository and “standard” LCFG/DICE release version practices without being tied into all the other parts of buildtools. This also helps show that switching to a new meta-data file (lcfg.yml) as a replacement for parts of works rather well.

There is currently a Perl module, LCFG::Build::PkgSpec, which can be used to load and write out the meta-data file, this provides a reasonably nice interface to this specification. For example:

my $spec = LCFG::Build::PkgSpec->new_from_metafile('./lcfg.yml');
print 'Package name is: ' . $spec->name . "\n";
print 'Version Control System is: ' . $spec->get_vcsinfo('type') . "\n";

There is also an interface class for VCS handlers, LCFG::Build::VCS, this specifies what attributes and methods must be implemented. There is currently one Perl module, which supports CVS, which implements all the required functionality, LCFG::Build::VCS::CVS. Hopefully, with a bit of documentation, it will be relatively easy for developers to code a module to support their VCS of choice.

The release tool is used to carry out the three version altering functions previously done via the buildtools Makefile: release, majorversion, minorversion. It supports checking for uncommitted files and generating the ChangeLog file from the VCS log. For example:

lcfg-reltool --release ~/cvs/lcfg-foo
lcfg-reltool --majorversion .

None of this is documented or packaged yet, that’s the next stage, after that I will be looking for early adopters to give it a whirl. To ease adoption I intend to create a tool which will take the and generate the lcfg.yml meta-file.

Just to note, these modules are written using Moose it’s great!