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 )