cPanel-SyncUtil

 view release on metacpan or  search on metacpan

scripts/cpanelsync_build_cpaddons_dir  view on Meta::CPAN


# vendor
if ( $options{'v'} !~ m{^\w+$} ) {
    $message .= "You must specify your Vendor name\n";
}
else {
    $vendor = $options{'v'};
}

# sync script
if ( $options{'a'} eq 'sync' ) {
    if ( !$options{'s'} || !-x $options{'s'} ) {
        $message .= "Please specify the path to your sync script with -s\n";
    }
    else {
        $clustersync =
            $options{'s'} =~ m{^/} || $options{'s'} =~ m{^[.]}
          ? $options{'s'}
          : "./$options{'s'}";
    }
}

# action
if ( exists $options{'a'} ) {
    if (   $options{'a'} ne 'bz2'
        && $options{'a'} ne 'all'
        && $options{'a'} ne 'lock'
        && $options{'a'} ne 'unlock'
        && $options{'a'} ne 'sync' ) {
        $message .= "Option -a requires a valid argument (bz2|lock|unlock|sync|all) Note: all does bz2, unlock, then sync\n";
    }
}
else {
    $message .= "Action must be specified with the -a option (bz2|lock|unlock|sync|all)\n";
}

if ($message) {
    print $message;
    exit 1;
}

my $root = File::Spec->catdir( $cpaddons_root, $vendor );

chdir $cpaddons_root or die "Could not go into base dir: $!";

if ( $options{'a'} eq 'all' ) {
    delete $options{'a'};

    my @cmds;
    for ( sort keys %options ) {
        push @cmds, "-$_", $options{$_};
    }

    system $0, '-a', 'bz2',    @cmds;
    system $0, '-a', 'unlock', @cmds;
    system $0, '-a', 'sync',   @cmds;

    exit;
}

cPanel::SyncUtil::_chown_pwd_recursively( $user, $group );

if ($clustersync) {
    if ( -x $clustersync ) {
        exec $clustersync, @ARGV if $options{'a'} eq 'sync';
    }
    else {
        die "$clustersync is not executable";
    }
}

if ( $options{'a'} eq 'bz2' ) {
    cPanel::SyncUtil::_raw_dir( $cpaddons_root, 'cPAddonsAvailable', 1, cPanel::SyncUtil::_read_dir('./cPAddonsAvailable') )
      or warn "_raw_dir cPAddonsAvailable/: $!";

    my @md5files = grep { m/\.pm$/ } cPanel::SyncUtil::_read_dir('./cPAddonsMD5');
    cPanel::SyncUtil::_raw_dir( $cpaddons_root, 'cPAddonsMD5', 1, @md5files )
      or warn "_raw_dir cPAddonsMD5/: $!";
}
elsif ( $options{'a'} eq 'lock' ) {
    cPanel::SyncUtil::_lock(qw(./ cPAddonsAvailable/ cPAddonsMD5/));
}
elsif ( $options{'a'} eq 'unlock' ) {
    cPanel::SyncUtil::_unlock(qw(./ cPAddonsAvailable/ cPAddonsMD5/));
}

die "-c may only be one of the directories in $root"
  if defined $options{'c'} && $options{'c'} ne '' && !-d "$root/$options{'c'}";

chdir $root or die "Could not go into $root: $!";

ROOT:
for my $dir ( cPanel::SyncUtil::_read_dir($root) ) {
    next ROOT
      if !cPanel::SyncUtil::_safe_cpsync_dir($dir)
      || ( defined $options{'c'} && $options{'c'} ne '' && $dir ne $options{'c'} );

    cPanel::SyncUtil::_chown_pwd_recursively( $user, $group );

  SUBDIR:
    for my $name ( cPanel::SyncUtil::_read_dir($dir) ) {
        next SUBDIR
          if $name =~ /^\./
          || !cPanel::SyncUtil::_safe_cpsync_dir("$dir/$name")
          || ( defined $options{'n'} && $options{'n'} ne '' && $name !~ /^$options{'n'}/ );

        if ( $options{'a'} eq 'bz2' ) {
            system 'bzip2', '-k', "$dir/$name.pm";
            cPanel::SyncUtil::_raw_dir( "$dir", $name, 1 )
              or warn "cPanel::SyncUtil::_raw_dir  $root/$dir: $!";
            cPanel::SyncUtil::_sync_touchlock_pwd();
        }
        elsif ( $options{'a'} eq 'lock' ) {
            cPanel::SyncUtil::_lock("$dir/$name/");
        }
        elsif ( $options{'a'} eq 'unlock' ) {
            cPanel::SyncUtil::_unlock("$dir/$name/");
        }
        cPanel::SyncUtil::_chown_pwd_recursively( $user, $group );
    }
}



( run in 0.667 second using v1.01-cache-2.11-cpan-5511b514fd6 )