App-WordPressTools
view release on metacpan or search on metacpan
script/wp-tools view on Meta::CPAN
if (!$args->{'failed'} && $current_status->{'siteurl'}) {
### get current default page size and status
my $resp = $http->head($current_status->{'siteurl'});
my $after_size = $resp->{'headers'}{'content-length'} || 1;
my $average = ($current_status->{'size'} + $after_size) / 2;
my $div = $current_status->{'size'}/$after_size;
if ($div > 1.5 || $div < .5) {
$args->{'failed'} = 'Site download size changed by more than 50% after update (assuming failure).';
}
my $code = $resp->{'status'};
if (!$args->{'failed'} && $code ne $current_status->{'code'} && $code ne '200' && $current_status->{'code'} !~ /^(?:4|5)/) {
$args->{'failed'} = "Site download status changed from $current_status->{'code'} to $code (assuming failure)";
}
}
if (!$args->{'failed'} && $current_status->{'adminurl'}) {
### get current default page size and status
my $resp = $http->head($current_status->{'adminurl'});
my $after_size = $resp->{'headers'}{'content-length'} || 1;
my $average = ($current_status->{'adminsize'} + $after_size) / 2;
my $div = $current_status->{'adminsize'}/$after_size;
if ($div > 1.5 || $div < .5) {
$args->{'failed'} = 'Site admin download size changed by more than 50% after update (assuming failure).';
}
my $code = $resp->{'status'};
if (!$args->{'failed'} && $code ne $current_status->{'admincode'} && $code ne '200' && $current_status->{'admincode'} !~ /^(?:4|5)/) {
$args->{'failed'} = "Site admin download status changed from $current_status->{'admincode'} to $code (assuming failure)";
}
}
### cleanup
END {
unlink($defaults_file) if $defaults_file && -e $defaults_file;
rename($maintenance,'.maintenance') if $maintenance;
}
#fail case vvv
if ($args->{'failed'}) {
print "Upgrade failure detected:$args->{'failed'}. Restoring from backup $args->{'backup_file'}...\n";
my $result = restore();
$result->{'success'} = 0;
return $result;
}
else {
my $upgraded = join(', ', map { $_ eq 'core' ? 'WordPress' : "${_}s" } keys %components);
return {
success => 1,
path => $args->{'path'},
message => "Successfully upgraded $upgraded from $args->{'path'}",
};
}
}
sub _bre_quote {
my $str = shift;
my $bre = shift || '$.*[\]^';
$str =~ s/([\Q$bre\E])/\\$1/g;
$str =~ s/\n/\\n/g;
return $str;
}
# to work around the fact that `tar --transform' can't correctly escape the
# delimiter of a sed substitution expression in the replacement text, this
# subroutine finds a delimiter that can be used safely without escaping
sub _find_sed_delimiter {
my $str = join('', @_);
my $bre = '$.*[\]^';
for my $n (1..255) {
my $del = pack('C', $n);
return $del if $str !~ /\Q$del\E/ && $del !~ /[\Q$bre\E]/;
}
}
sub _run_wpcli {
my $path = shift;
my $command = shift;
_fix_wp_config($path);
my $ret = `$wp_cli_path $command`;
my $status = $?;
_restore_wp_config();
$? = $status;
return $ret;
}
### fix wp-config.php to workaround wpcli bug
# See https://github.com/wp-cli/wp-cli/issues/1631
sub _fix_wp_config {
my $path = shift or die 'Path argument required';
our $config_file = "$path/wp-config.php";
our $config_backup = "$config_file.backup";
my $config_fileq = shell_quote($config_file);
my $config_backupq = shell_quote($config_backup);
return if !-e $config_file;
# make sure we are not generating from an auto-generated config
my $config_content = `cat $config_fileq`;
if ($config_content =~ m!WARNING: This config is auto-generated from .* for wpcli compatibility!) {
return;
#die "Refusing to generate wpcli-compatible wp-config.php because we already did";
}
# copy config to a backup location
my $err_out = `cp $config_fileq $config_backupq 2>&1`;
if ($?) {
die "Could not copy $config_file to $config_backup: $err_out";
}
# generate the new config
open(my $in, '<', $config_backup) or die "Failed to open (cbf) $config_backup: $!";
#temporarily set permissions to rw?
$mode = (stat($config_file))[2] & 0777;
my $modestr = sprintf qq{%04o}, $mode;
if ($modestr !~ /^.[67]/) {
chmod($mode | 0600, $config_file);
}
else {
undef $mode;
( run in 1.931 second using v1.01-cache-2.11-cpan-75ffa21a3d4 )