X-Git-Url: http://git.vpit.fr/?p=perl%2Fmodules%2Frgit.git;a=blobdiff_plain;f=lib%2FApp%2FRgit%2FUtils.pm;h=ee1fdd348014622aec683bd379cd034a4838c1f5;hp=651ea77cf05a3903e00c11e70634a5c84e862d6e;hb=e833c52a64e7aac9c18d7051285bf4d9906c4faf;hpb=67e585ffae69ce0c350a920658738d7864b1d54a diff --git a/lib/App/Rgit/Utils.pm b/lib/App/Rgit/Utils.pm index 651ea77..ee1fdd3 100644 --- a/lib/App/Rgit/Utils.pm +++ b/lib/App/Rgit/Utils.pm @@ -3,45 +3,101 @@ package App::Rgit::Utils; use strict; use warnings; -use Carp qw/croak/; +use Cwd (); # abs_path +use File::Spec (); # file_name_is_absolute, updir, splitdir, splitpath =head1 NAME -App::Rgit::Utils - Miscellanous utilities for App::Rgit classes. +App::Rgit::Utils - Miscellaneous utilities for App::Rgit classes. =head1 VERSION -Version 0.03 +Version 0.08 =cut -our $VERSION = '0.03'; +our $VERSION = '0.08'; =head1 DESCRIPTION -Miscellanous utilities for L classes. +Miscellaneous utilities for L classes. This is an internal module to L. =head1 FUNCTIONS -=head2 C +=head2 C -Sanitize arguments passed to methods. + my $absolute_path = abs_path($path); + +Forcefully make a path C<$path> absolute (in L's meaning of the term) when it isn't already absolute or when it contains C<'..'>. =cut -sub validate { - my $class = shift; - croak 'Optional arguments must be passed as key/value pairs' if @_ % 2; - $class = ref($class) || $class; - $class = caller unless $class; - return $class, @_; +sub abs_path { + my ($path) = @_; + + if (File::Spec->file_name_is_absolute($path)) { + my $updir = File::Spec->updir; + my @chunks = File::Spec->splitdir((File::Spec->splitpath($path))[1]); + + unless (grep $_ eq $updir, @chunks) { + return $path; + } + } + + return Cwd::abs_path($path); } +=head1 CONSTANTS + +=head2 C + +=head2 C + +=head2 C + +=head2 C + +Codes to return from the C callback to respectively proceed to the next repository, retry the current one, end it all, and save the return code. + +=cut + +use constant { + SAVE => 0x1, + NEXT => 0x2, + REDO => 0x4, + LAST => 0x8, +}; + +=head2 C + +=head2 C + +=head2 C + +=head2 C + +=head2 C + +Message levels. + +=cut + +use constant { + INFO => 3, + WARN => 2, + ERR => 1, + CRIT => 0, +}; + =head1 EXPORT -C is only exported on request. +L is only exported on request. + +C C, C and C are only exported on request, either by their name or by the C<'codes'> tags. + +C, C, C and C are only exported on request, either by their name or by the C<'levels'> tags. =cut @@ -49,7 +105,9 @@ use base qw/Exporter/; our @EXPORT = (); our %EXPORT_TAGS = ( - funcs => [ qw/validate/ ] + funcs => [ qw/abs_path/ ], + codes => [ qw/SAVE NEXT REDO LAST/ ], + levels => [ qw/INFO WARN ERR CRIT/ ], ); our @EXPORT_OK = map { @$_ } values %EXPORT_TAGS; $EXPORT_TAGS{'all'} = [ @EXPORT_OK ]; @@ -61,12 +119,13 @@ L. =head1 AUTHOR Vincent Pit, C<< >>, L. - + You can contact me by mail or on C (vincent). =head1 BUGS -Please report any bugs or feature requests to C, or through the web interface at L. I will be notified, and then you'll automatically be notified of progress on your bug as I make changes. +Please report any bugs or feature requests to C, or through the web interface at L. +I will be notified, and then you'll automatically be notified of progress on your bug as I make changes. =head1 SUPPORT @@ -76,7 +135,7 @@ You can find documentation for this module with the perldoc command. =head1 COPYRIGHT & LICENSE -Copyright 2008 Vincent Pit, all rights reserved. +Copyright 2008,2009,2010 Vincent Pit, all rights reserved. This program is free software; you can redistribute it and/or modify it under the same terms as Perl itself.