--- /dev/null
+package Oyster::Deploy::Git;
+
+use Moose;
+use Git::Wrapper;
+use Error::Simple;
+
+use Data::Dumper;
+
+sub create {
+ my $self = shift;
+ my $location = shift;
+
+ if( -f $location || -d $location ) {
+ Error::Simple->throw("$location already exists");
+ }
+
+ mkdir($location);
+ my $git = Git::Wrapper->new($location);
+
+ return 1;
+}
+
+
+1;
\ No newline at end of file
}
1;
+
+__END__
+
+=head1 NAME
+
+Oyster::Provision - Provision an Oyster
+
+=head1 SYNOPSIS
+
+ my $server = Oyster::Provision->new(
+ name => 'Ostrica',
+ size => '256',
+ image => 'Meerkat',
+ pub_ssh => "$ENV{HOME}/.ssh/id_rsa.pub",
+ );
+ $server->create;
+
+=head1 BACKENDS
+
+By default, the L<Oyster::Provision::Rackspace> backend
+will be used.
+
+Each backend needs to accept at least the C<name>,
+C<size>, C<image> and C<pub_ssh> parameters. The meaning
+of these parameters may differ from one backend to another.
+
+=head1 METHOS
+
+Each backend usually implements the following C<required>
+methods:
+
+=over
+
+=item create
+
+Creates a new server by given name, if such server does
+not exist.
+
+Installs the required packages for the distribution
+
+=item delete
+
+Gets rid of the server instance
+
+=item resize
+
+Hopefully scales the server
+
+=back
+
+=cut
--- /dev/null
+#!/usr/local/bin/perl
+
+use strict;
+use warnings;
+
+use Test::More qw/no_plan/;
+use Test::Exception;
+
+use File::Temp qw/tempdir/;
+
+BEGIN { use_ok( 'Oyster::Deploy::Git' ); }
+
+my $tmpdir = tempdir();
+
+my $deploy = new_ok 'Oyster::Deploy::Git';
+
+#create
+is($deploy->create("${tmpdir}/testapp"), 1, 'Create returned okay');
+
+ok((-d "${tmpdir}/testapp"), "App directory created");
+
+throws_ok(sub {$deploy->create("${tmpdir}/testapp")}, 'Error::Simple', "Directory already exists");