TODO: fake_snap.pl: add mode to specify snapdir, including absolute directory
authorMichael Adam <obnox@samba.org>
Tue, 28 May 2013 13:50:22 +0000 (15:50 +0200)
committerMichael Adam <obnox@samba.org>
Thu, 31 Oct 2013 13:44:24 +0000 (14:44 +0100)
source3/script/tests/fake_snap.pl

index d1233f375b000ca06a961855a73e0dfa8b9ced57..9d8d9b68a09b828c8f68a6c0ad365dc616140994 100755 (executable)
@@ -2,17 +2,31 @@
 
 use strict;
 
-use File::Path qw(rmtree);
+use File::Path qw(remove_tree make_path);
 use POSIX ();
 
 sub _create_snapshot
 {
-       my ($base_path) = @_;
+       my ($base_path, $snapdir) = @_;
+
+       if (not defined($snapdir) or not $snapdir) {
+               $snapdir = ".snapdir";
+       }
+
+       my $snap_path_base = "";
+
+       if ($snapdir !~ /^\//) {
+               $snap_path_base = $base_path . "/";
+       }
+
+       $snap_path_base .= $snapdir;
+
        my $time_str = POSIX::strftime("%Y.%m.%d-%H.%M.%S" , localtime());
-       my $snap_path = $base_path . "/.snapshots/\@GMT-" . $time_str;
+       my $snap_path = $snap_path_base . "/\@GMT-" . $time_str;
+
        my $ret;
 
-       POSIX::mkdir($base_path . "/.snapshots", 0777);
+       make_path($snap_path, { mode => 0777 });
 
        # add trailing slash to src path to ensure that only contents is copied
        $ret = system("rsync", "-a", "--exclude=.snapshots/", "${base_path}/",
@@ -28,10 +42,22 @@ sub _create_snapshot
 
 sub _delete_snapshot
 {
-       my ($base_path, $snap_path) = @_;
+       my ($base_path, $snap_path, $snapdir) = @_;
+
+       if (not defined($snapdir) or not $snapdir) {
+               $snapdir = ".snapdir";
+       }
+
+       my $snap_path_base = "";
+
+       if ($snapdir !~ /^\//) {
+               $snap_path_base = $base_path . "/";
+       }
+
+       $snap_path_base .= $snapdir;
 
        # we're doing a recursive delete, so do some sanity checks
-       if ((index($snap_path, $base_path) != 0) || (index($snap_path, ".snapshots") == -1)) {
+       if (index($snap_path, $snap_path_base . "/\@GMT-") != 0) {
                print STDERR "invalid snap_path: $snap_path\n";
                return -1;
        }
@@ -56,12 +82,12 @@ my $ret;
 my $num_args = $#ARGV + 1;
 my $cmd = shift;
 
-if (($num_args == 2) && ($cmd eq "--check")) {
+if (($num_args == 2 or $num_args == 3) && ($cmd eq "--check")) {
        $ret = 0;
-} elsif (($num_args == 2) && ($cmd eq "--create")) {
-       $ret = _create_snapshot($ARGV[0]);
-} elsif (($num_args == 3) && ($cmd eq "--delete")) {
-       $ret = _delete_snapshot($ARGV[0], $ARGV[1]);
+} elsif (($num_args == 2 or $num_args == 3) && ($cmd eq "--create")) {
+       $ret = _create_snapshot(@ARGV);
+} elsif (($num_args == 3 or $num_args == 4) && ($cmd eq "--delete")) {
+       $ret = _delete_snapshot(@ARGV);
 } else {
        print STDERR "invalid script argument\n";
        $ret = -1;