| File: | blib/lib/App/Rgit/Utils.pm |
| Coverage: | 97.6% |
| line | stmt | bran | cond | sub | pod | time | code |
|---|---|---|---|---|---|---|---|
| 1 | package App::Rgit::Utils; | ||||||
| 2 | |||||||
| 3 | 6 6 6 | 37685 16 265 | use strict; | ||||
| 4 | 6 6 6 | 43 17 314 | use warnings; | ||||
| 5 | |||||||
| 6 | 6 6 6 | 57 14 144 | use Cwd (); # abs_path | ||||
| 7 | 6 6 6 | 41 15 1771 | use File::Spec (); # file_name_is_absolute, updir, splitdir, splitpath | ||||
| 8 | |||||||
| 9 - 17 | =head1 NAME App::Rgit::Utils - Miscellaneous utilities for App::Rgit classes. =head1 VERSION Version 0.08 =cut | ||||||
| 18 | |||||||
| 19 | our $VERSION = '0.08'; | ||||||
| 20 | |||||||
| 21 - 33 | =head1 DESCRIPTION Miscellaneous utilities for L<App::Rgit> classes. This is an internal module to L<rgit>. =head1 FUNCTIONS =head2 C<abs_path $path> Forcefully make a path C<$path> absolute (in L<Cwd/abs_path>'s meaning of the term) when it isn't already absolute or when it contains C<'..'>. =cut | ||||||
| 34 | |||||||
| 35 | sub abs_path { | ||||||
| 36 | 110 | 1 | 454 | my ($path) = @_; | |||
| 37 | |||||||
| 38 | 110 | 1620 | if (File::Spec->file_name_is_absolute($path)) { | ||||
| 39 | 72 | 486 | my $updir = File::Spec->updir; | ||||
| 40 | 72 | 2521 | my @chunks = File::Spec->splitdir((File::Spec->splitpath($path))[1]); | ||||
| 41 | |||||||
| 42 | 72 | 627 | unless (grep $_ eq $updir, @chunks) { | ||||
| 43 | 72 | 1205 | return $path; | ||||
| 44 | } | ||||||
| 45 | } | ||||||
| 46 | |||||||
| 47 | 38 | 2676 | return Cwd::abs_path($path); | ||||
| 48 | } | ||||||
| 49 | |||||||
| 50 - 56 | =head1 CONSTANTS =head2 C<NEXT>, C<REDO>, C<LAST>, C<SAVE> Codes to return from the C<report> callback to respectively proceed to the next repository, retry the current one, end it all, and save the return code. =cut | ||||||
| 57 | |||||||
| 58 | use constant { | ||||||
| 59 | 6 | 949 | SAVE => 0x1, | ||||
| 60 | NEXT => 0x2, | ||||||
| 61 | REDO => 0x4, | ||||||
| 62 | LAST => 0x8, | ||||||
| 63 | 6 6 | 58 17 | }; | ||||
| 64 | |||||||
| 65 - 69 | =head2 C<DIAG>, C<INFO>, C<WARN>, C<ERR> and C<CRIT> Message levels. =cut | ||||||
| 70 | |||||||
| 71 | use constant { | ||||||
| 72 | 6 | 764 | INFO => 3, | ||||
| 73 | WARN => 2, | ||||||
| 74 | ERR => 1, | ||||||
| 75 | CRIT => 0, | ||||||
| 76 | 6 6 | 124 21 | }; | ||||
| 77 | |||||||
| 78 - 86 | =head1 EXPORT L<abs_path> is only exported on request. C<NEXT> C<REDO>, C<LAST> and C<SAVE> are only exported on request, either by their name or by the C<'codes'> tags. C<INFO>, C<WARN>, C<ERR> and C<CRIT> are only exported on request, either by their name or by the C<'levels'> tags. =cut | ||||||
| 87 | |||||||
| 88 | 6 6 6 | 60 14 1826 | use base qw/Exporter/; | ||||
| 89 | |||||||
| 90 | our @EXPORT = (); | ||||||
| 91 | our %EXPORT_TAGS = ( | ||||||
| 92 | funcs => [ qw/abs_path/ ], | ||||||
| 93 | codes => [ qw/SAVE NEXT REDO LAST/ ], | ||||||
| 94 | levels => [ qw/INFO WARN ERR CRIT/ ], | ||||||
| 95 | ); | ||||||
| 96 | our @EXPORT_OK = map { @$_ } values %EXPORT_TAGS; | ||||||
| 97 | $EXPORT_TAGS{'all'} = [ @EXPORT_OK ]; | ||||||
| 98 | |||||||
| 99 - 126 | =head1 SEE ALSO
L<rgit>.
=head1 AUTHOR
Vincent Pit, C<< <perl at profvince.com> >>, L<http://profvince.com>.
You can contact me by mail or on C<irc.perl.org> (vincent).
=head1 BUGS
Please report any bugs or feature requests to C<bug-rgit at rt.cpan.org>, or through the web interface at L<http://rt.cpan.org/NoAuth/ReportBug.html?Queue=rgit>.
I will be notified, and then you'll automatically be notified of progress on your bug as I make changes.
=head1 SUPPORT
You can find documentation for this module with the perldoc command.
perldoc App::Rgit::Utils
=head1 COPYRIGHT & LICENSE
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.
=cut | ||||||
| 127 | |||||||
| 128 | 1; # End of App::Rgit::Utils | ||||||