Changeset 465

Show
Ignore:
Timestamp:
06/25/08 23:22:07 (7 months ago)
Author:
ogawa
Message:

Add --dryrun option.

Files:
1 modified

Legend:

Unmodified
Added
Removed
  • mt4-backup/trunk/backup

    r463 r465  
    1010use base qw( MT::Tool ); 
    1111 
    12 our $VERSION = '0.1'; 
    13  
    14 sub usage { '[--dir <dir>] [--blog_ids <id1,id2,...>] [--size <num>] [--archive=zip|tgz]' } 
     12our $VERSION = '0.2'; 
     13 
     14sub usage { '[--dir <dir>] [--blog_ids <id1,id2,...>] [--size <num>] [--archive=zip|tgz] [--dryrun]' } 
    1515 
    1616sub help { 
     
    3232                just generates a set of backup files and does not create  
    3333                a compressed archive file. 
    34  
     34        --dryrun 
     35                Dry run; perform a simulation of backup task that would 
     36                occur but do not actually generate a backup. 
    3537    }; 
    3638} 
    3739 
    38 my ($temp_dir, $blog_ids, $size, $archive); 
     40my ($temp_dir, $blog_ids, $size, $archive, $dryrun); 
    3941sub options { 
    4042    return ( 
     
    4345        'size=i'     => \$size, 
    4446        'archive=s'  => \$archive, 
    45         ); 
     47        'dryrun'     => \$dryrun, 
     48    ); 
    4649} 
    4750 
     
    7073    } 
    7174 
    72     backup(\@blog_ids, $temp_dir, $size || 0, $archive, $verbose); 
     75    my $files = backup(\@blog_ids, $temp_dir, $size || 0, $archive, $verbose, $dryrun); 
     76    if ($verbose) { 
     77        if ($files && scalar @$files) { 
     78            for my $f (@$files) { 
     79                print STDERR MT->translate("'[_1]' created.\n", $f); 
     80            } 
     81        } else { 
     82            print STDERR MT->translate("No backup created.\n"); 
     83        } 
     84    } 
    7385    1; 
    7486} 
    7587 
    76 # This function is almostly copied from MT::CMS::Tools::backup() 
    7788use Symbol; 
    7889 
     90# This function is derived from MT::CMS::Tools::backup() 
    7991sub backup { 
    80     my ($blog_ids, $temp_dir, $size, $archive, $verbose) = @_; 
     92    my ($blog_ids, $temp_dir, $size, $archive, $verbose, $dryrun) = @_; 
    8193 
    8294    my $enc = MT->config('PublishCharset') || 'utf-8'; 
     
    8698    my $file = "Movable_Type-$ts" . '-Backup'; 
    8799 
    88     require File::Temp; 
    89100    require File::Spec; 
    90101    use File::Copy; 
     
    104115    }; 
    105116 
    106     if ( !( $size || $num_assets ) ) { 
     117    if ($dryrun) { 
     118        $printer  = sub { my ($data) = @_; return length($data); }; 
     119        $splitter = sub { }; 
     120        $finisher = sub { }; 
     121    } 
     122    elsif ( !( $size || $num_assets ) ) { 
    107123        my $filename = File::Spec->catfile( $temp_dir, $file . ".xml" ); 
    108124        my $fh = gensym(); 
     
    115131            my ($asset_files) = @_; 
    116132            close $fh; 
    117             if ($archive) { 
    118                 my $filepath = File::Spec->catfile( $temp_dir, "$file.$archive" ); 
    119                 require MT::Util::Archive; 
    120                 my $arc = MT::Util::Archive->new($archive, $filepath); 
    121                 $arc->add_file( $temp_dir, "$file.xml" ); 
    122                 $arc->add_string( 
    123                         "<manifest xmlns='" 
    124                       . MT::BackupRestore::NS_MOVABLETYPE() 
    125                       . "'><file type='backup' name='$file.xml' /></manifest>", 
    126                       "$file.manifest"); 
    127                 $arc->close; 
    128                 # for safery, don't unlink before closing $arc here. 
    129                 unlink $filename; 
    130             } 
     133            return [ "$file.xml" ] unless $archive; 
     134 
     135            my $filepath = File::Spec->catfile( $temp_dir, "$file.$archive" ); 
     136            require MT::Util::Archive; 
     137            my $arc = MT::Util::Archive->new($archive, $filepath); 
     138            $arc->add_file( $temp_dir, "$file.xml" ); 
     139            $arc->add_string( 
     140                    "<manifest xmlns='" 
     141                  . MT::BackupRestore::NS_MOVABLETYPE() 
     142                  . "'><file type='backup' name='$file.xml' /></manifest>", 
     143                  "$file.manifest"); 
     144            $arc->close; 
     145            # for safery, don't unlink before closing $arc here. 
     146            unlink File::Spec->catfile( $filename ); 
     147            return [ "$file.$archive" ]; 
    131148        }; 
    132149    } 
     
    188205            close $fh; 
    189206            push @files, "$file.manifest"; 
    190  
    191             if ($archive) { 
    192                 my $filepath = File::Spec->catfile( $temp_dir, "$file.$archive" ); 
    193                 require MT::Util::Archive; 
    194                 my $arc = MT::Util::Archive->new($archive, $filepath); 
    195                 for my $f (@files) { 
    196                     $arc->add_file( $temp_dir, $f ); 
    197                 } 
    198                 $arc->close; 
    199                 # for safery, don't unlink before closing $arc here. 
    200                 for my $f (@files) { 
    201                     unlink File::Spec->catfile( $temp_dir, $f ); 
    202                 } 
    203             } 
     207            return \@files unless $archive; 
     208 
     209            my $filepath = File::Spec->catfile( $temp_dir, "$file.$archive" ); 
     210            require MT::Util::Archive; 
     211            my $arc = MT::Util::Archive->new($archive, $filepath); 
     212            for my $f (@files) { 
     213                $arc->add_file( $temp_dir, $f ); 
     214            } 
     215            $arc->close; 
     216            # for safery, don't unlink before closing $arc here. 
     217            for my $f (@files) { 
     218                unlink File::Spec->catfile( $temp_dir, $f ); 
     219            } 
     220            return [ "$file.$archive" ]; 
    204221        }; 
    205222    }