Slaughter::Transport::revisionControl - Transport base-class.
This is a base-class for a generic revision control based transport.
This module implements the primitives which our transport API demands, but it does so in an abstract fashion with the intention that sub-classes will provide the missing configuration to allow it to be used.
This module may be used by any revision-control system, or other tool, that allows a fetch of a remote repository to be carried out by a simple command such as:
$cmd repository-location destination-path
In our derived Mercurical class we set the command to "hg clone", similarly in the GIT class we use "git clone". Finally although it isn't a revision control system our rsync implementation works via a subclass precisely because it is possible to fetch a remote tree using a simple command, in that case it is:
hg clone
git clone
rsync -qazr repository-location destination-path
NOTE: A full checkout of the remote repository is always inititated by this module.
It is possible that a future extension to this module will allow an existing repository to be uploaded in-place.
If you wish to write your own transport for a revision control tool, or similar command that will fetch a remote repository, you must subclass this class and implement the _init method.
_init
The following parameters should be populated in your derived class:
cmd_clone
The command to clone the repository. This will have the repository location, as specified by "--prefix", and the destination directory appended to it.
--prefix
The command will have with the strings "#SRC#" and "#DST#" replaced with the source of the fetch and the destination into which to fetch it repectively.
#SRC#
#DST#
The following, taken from Slaughter::Transport::hg, demonstrates this:
Slaughter::Transport::hg
$self->{ 'cmd_clone' } = "hg clone #SRC# #DST#";
cmd_update
A command to call to update an existing repository. Currently each time slaughter runs it will pull the remote repository from scratch to a brand new temporary directory, it is possible in the future we will work with a local directory that persists - at that point having the ability to both checkout and update a remote repository will be useful.
cmd_version
A command to call which will output the version of the revision control system. This may be any command which outputs text, as the output is discarded. The purposes is to ensure that the binary required for cloning is present on the system.
name
The name of the transport.
For a sample implementation please consult Slaughter::Transport::hg.
Now follows documentation on the available methods.
Create a new instance of this object.
This constructor calls the "_init" method of any derived class, if present, which is where we'll expect the setup mentioned in "SUBCLASSING" to take place.
Is this module available? This uses the details from the derived class to determine whether that transport is available.
We regard the transport as available if the execution of the command stored in "cmd_version" succeeds.
Return the last error from the transport, this is set in "isAvailable".
Return the name of this transport. This will be setup in the derived class, via the "name" parameter.
Fetch a file from within the checked-out repository.
Given a root repository of /path/to/repo/ the file is looked for beneath /path/to/repo/files.
Steve Kemp <steve@steve.org.uk>
Copyright (c) 2010-2015 by Steve Kemp. All rights reserved.
This module is free software; you can redistribute it and/or modify it under the same terms as Perl itself. The LICENSE file contains the full text of the license.
To install App::Slaughter, copy and paste the appropriate command in to your terminal.
cpanm
cpanm App::Slaughter
CPAN shell
perl -MCPAN -e shell install App::Slaughter
For more information on module installation, please visit the detailed CPAN module installation guide.