App-Fetchware
view release on metacpan or search on metacpan
lib/App/FetchwareX/HTMLPageSync.pm view on Meta::CPAN
vmsg <<EOM;
Skipping unarchive subroutine, because HTMLPageSync does not need to unarchive
anything
EOM
do_nothing();
}
sub build {
vmsg <<EOM;
Skipping build subroutine, because HTMLPageSync does not need to build anything
EOM
do_nothing();
}
sub install {
# AKA $package_path.
my $download_file_paths = shift;
msg <<EOM;
Copying files downloaded to a local temp directory to final destination directory.
EOM
# Copy over the files that have been returned by download().
for my $file_path (@$download_file_paths) {
vmsg <<EOM;
Copying [$file_path] -> [@{[config('destination_directory')]}].
EOM
###BUGALERT### Should this die and all the rest be croaks instead???
cp($file_path, config('destination_directory')) or die <<EOD;
App-FetchwareX-HTMLPageSync: run-time error. Fetchware failed to copy the file [$file_path] to the
destination directory [@{[config('destination_directory')]}].
The OS error was [$!].
EOD
}
vmsg 'Successfully copied files to destination directory.';
return 'True indicating success!';
}
sub uninstall {
my $build_path = shift;
# Only delete destination_directory if keep_destination_directory is false.
unless (config('keep_destination_directory')) {
msg <<EOM;
Uninstalling this HTMLPageSync package by deleting your destination directory.
EOM
###BUGALERT### Before release go though all of Fetchware's API, and subifiy
#each main component like lookup and download were, the later ones were not
#done this way. That way I can put say chdir_to_build_path() here instead of
#basicaly copying and pasting the code like I do below. Also
#chdir_to_build_path() can be put in :OVERRIDE_UNINSTALL!!! Which I can use
#here.
chdir $build_path or die <<EOD;
App-FetchwareX-HTMLPageSync: Failed to uninstall the specified package and specifically to change
working directory to [$build_path] before running make uninstall or the
uninstall_commands provided in the package's Fetchwarefile. Os error [$!].
EOD
if ( defined config('destination_directory')) {
# Use File::Path's remove_tree() to delete the destination_directory
# thereby "uninstalling" this package. Will throw an exception that I'll
# let the main eval in bin/fetchware catch, print, and exit 1.
vmsg <<EOM;
Deleting entire destination directory [@{[config('destination_directory')]}].
EOM
remove_tree(config('destination_directory'));
} else {
die <<EOD;
App-FetchwareX-HTMLPageSync: Failed to uninstall the specified App::FetchwareX::HTMLPageSync
package, because no destination_directory is specified in its Fetchwarefile.
This configuration option is required and must be specified.
EOD
}
# keep_destination_directory was set, so don't delete destination directory.
} else {
msg <<EOM;
Uninstalling this HTMLPageSync package but keeping your destination directory.
EOM
}
return 'True for success.';
}
sub upgrade {
my $download_path = shift; # $fetchware_package_path is not used in HTMLPageSync.
# Get the listing of already downloaded file names.
my @installed_downloads = glob(config('destination_directory'));
# Preprocess both @$download_path and @installed_downloads to ensure that
# URL crap or differing full paths won't screw up the "comparisons". The
# clever delete hashslice does the "comparisons" if you will.
my @download_path_filenames = map { ( uri_split($_) )[2] } @$download_path;
my @installed_downloads_filenames = map { ( splitpath($_) ) [2] }
@installed_downloads;
# Determine what files are in @$download_path, but not in
# @installed_downloads.
# Algo based on code from Perl Cookbook pg. 126.
my %seen;
@seen{@$download_path} = ();
delete @seen{@installed_downloads};
my @new_urls_to_download = keys %seen;
( run in 0.324 second using v1.01-cache-2.11-cpan-d7a12ab2c7f )