The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.

NAME

Slaughter::Transport::revisionControl - Transport base-class.

SYNOPSIS

This is a base-class for a generic revision control based transport.

DESCRIPTION

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:

  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.

SUBCLASSING

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.

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.

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.

The following, taken from Slaughter::Transport::hg, demonstrates this:

    $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.

METHODS

Now follows documentation on the available methods.

new

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.

isAvailable

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.

error

Return the last error from the transport, this is set in "isAvailable".

name

Return the name of this transport. This will be setup in the derived class, via the "name" parameter.

fetchContents

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.

AUTHOR

Steve Kemp <steve@steve.org.uk>

LICENSE

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.