File Coverage

blib/lib/Rex/Apache/Build/tgz.pm
Criterion Covered Total %
statement 10 12 83.3
branch n/a
condition n/a
subroutine 4 4 100.0
pod n/a
total 14 16 87.5


line stmt bran cond sub pod time code
1             #
2             # (c) Jan Gehring
3             #
4             # vim: set ts=3 sw=3 tw=0:
5             # vim: set expandtab:
6              
7             =head1 NAME
8              
9             Rex::Apache::Build::tgz - Build tgz packages
10              
11             =head1 DESCRIPTION
12              
13             With this module you can build TGZ packages to distribute your application.
14              
15             =head1 SYNOPSIS
16              
17             build "my-software",
18             type => "tgz",
19             version => "1.0",
20             source => "/path/to/your/software",
21             # below this, it is all optional
22             exclude => [qw/file1 file2/];
23              
24              
25             =cut
26              
27              
28             package Rex::Apache::Build::tgz;
29              
30 1     1   2758 use strict;
  1         2  
  1         37  
31 1     1   5 use warnings;
  1         2  
  1         31  
32              
33 1     1   5 use Cwd qw(getcwd);
  1         3  
  1         58  
34 1     1   572 use Rex -base;
  0            
  0            
35             use Data::Dumper;
36              
37             use Rex::Apache::Build::Base;
38             use base qw(Rex::Apache::Build::Base);
39              
40             sub new {
41             my $that = shift;
42             my $proto = ref($that) || $that;
43             my $self = $proto->SUPER::new(@_);
44              
45             bless($self, $proto);
46              
47             # compatibility for < 0.11
48             if($self->{source} eq ".") {
49             $self->{source} = undef;
50             delete $self->{source};
51             }
52              
53             $self->{exclude} = [".git", ".svn", ".*.sw*", "*~", "yuicompressor.jar", "._yuicompressor.jar"];
54              
55             return $self;
56             }
57              
58             sub build {
59             my ($self, $name) = @_;
60              
61             $name ||= $self->{name};
62              
63             my $old_dir = getcwd();
64              
65             my $excludes = "";
66             if(exists $self->{exclude}) {
67             if($^O =~ m/^MSWin/) {
68             $excludes = " --exclude \"" . join("\" --exclude \"", @{$self->{exclude}}) . "\"";
69             }
70             else {
71             $excludes = " --exclude '" . join("' --exclude '", @{$self->{exclude}}) . "'";
72             }
73             }
74              
75             my $version = $self->version;
76              
77             my $dir = getcwd();
78              
79             # compatibility for < 0.11 versions
80             if(exists $self->{path}) {
81             $dir = $self->{path};
82             }
83              
84             # if source is present, this will overwrite path parameter
85             # because path can also be used in deploy() with an other meaning (prefix)
86             if(exists $self->{source}) {
87             $dir = $self->{source};
88             }
89              
90             chdir($dir);
91              
92             my $package_name = "$name-$version.tar.gz";
93              
94             Rex::Logger::info("Building: $package_name");
95             if($^O =~ m/^MSWin/i) {
96             run "tar -c $excludes --exclude \"$name-*.tar.gz\" --exclude \".*.sw*\" --exclude \"*~\" --exclude Rexfile.lock --exclude Rexfile --exclude $package_name -z -f $old_dir/$package_name .";
97             }
98             else {
99             run "tar -c $excludes --exclude '$name-*.tar.gz' --exclude '.*.sw*' --exclude '*~' --exclude Rexfile.lock --exclude Rexfile --exclude $package_name -z -f $old_dir/$package_name .";
100             }
101             Rex::Logger::info("Your build is now available: $name-$version.tar.gz");
102              
103             chdir($old_dir);
104              
105             return $package_name;
106             }
107              
108             1;