common/smoketest/make_junction.pl
author dario
Wed, 13 May 2009 13:59:56 +0100
changeset 186 1b428f25477e
child 187 8eef886f83b9
permissions -rw-r--r--
First drop of smoketest support
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
186
1b428f25477e First drop of smoketest support
dario
parents:
diff changeset
     1
#!/usr/bin/perl
1b428f25477e First drop of smoketest support
dario
parents:
diff changeset
     2
1b428f25477e First drop of smoketest support
dario
parents:
diff changeset
     3
use strict;
1b428f25477e First drop of smoketest support
dario
parents:
diff changeset
     4
use Getopt::Long;
1b428f25477e First drop of smoketest support
dario
parents:
diff changeset
     5
1b428f25477e First drop of smoketest support
dario
parents:
diff changeset
     6
my $link;
1b428f25477e First drop of smoketest support
dario
parents:
diff changeset
     7
my $target;
1b428f25477e First drop of smoketest support
dario
parents:
diff changeset
     8
my $help;
1b428f25477e First drop of smoketest support
dario
parents:
diff changeset
     9
my $force = 0;
1b428f25477e First drop of smoketest support
dario
parents:
diff changeset
    10
1b428f25477e First drop of smoketest support
dario
parents:
diff changeset
    11
sub usage($);
1b428f25477e First drop of smoketest support
dario
parents:
diff changeset
    12
sub help();
1b428f25477e First drop of smoketest support
dario
parents:
diff changeset
    13
sub usage_error();
1b428f25477e First drop of smoketest support
dario
parents:
diff changeset
    14
1b428f25477e First drop of smoketest support
dario
parents:
diff changeset
    15
my %optmap = (  'link' => \$link,
1b428f25477e First drop of smoketest support
dario
parents:
diff changeset
    16
			    'target' => \$target,
1b428f25477e First drop of smoketest support
dario
parents:
diff changeset
    17
			    'force' => \$force, 
1b428f25477e First drop of smoketest support
dario
parents:
diff changeset
    18
                'help' => \$help);
1b428f25477e First drop of smoketest support
dario
parents:
diff changeset
    19
1b428f25477e First drop of smoketest support
dario
parents:
diff changeset
    20
GetOptions(\%optmap,
1b428f25477e First drop of smoketest support
dario
parents:
diff changeset
    21
          'link=s',
1b428f25477e First drop of smoketest support
dario
parents:
diff changeset
    22
          'target=s',
1b428f25477e First drop of smoketest support
dario
parents:
diff changeset
    23
          'force!',
1b428f25477e First drop of smoketest support
dario
parents:
diff changeset
    24
          'help!') 
1b428f25477e First drop of smoketest support
dario
parents:
diff changeset
    25
          or usage_error();
1b428f25477e First drop of smoketest support
dario
parents:
diff changeset
    26
1b428f25477e First drop of smoketest support
dario
parents:
diff changeset
    27
if ($help) {
1b428f25477e First drop of smoketest support
dario
parents:
diff changeset
    28
	help();
1b428f25477e First drop of smoketest support
dario
parents:
diff changeset
    29
}
1b428f25477e First drop of smoketest support
dario
parents:
diff changeset
    30
1b428f25477e First drop of smoketest support
dario
parents:
diff changeset
    31
usage_error(), unless (defined($link) && defined($target));
1b428f25477e First drop of smoketest support
dario
parents:
diff changeset
    32
1b428f25477e First drop of smoketest support
dario
parents:
diff changeset
    33
my $junction_help = `junction /?`;
1b428f25477e First drop of smoketest support
dario
parents:
diff changeset
    34
die("Need command \"junction\". Not found\n"), if ($junction_help =~ /is not recognised/);
1b428f25477e First drop of smoketest support
dario
parents:
diff changeset
    35
die("Directory \"$target\" not found\n"), unless -d "$target";
1b428f25477e First drop of smoketest support
dario
parents:
diff changeset
    36
1b428f25477e First drop of smoketest support
dario
parents:
diff changeset
    37
if ( -e "$link") {
1b428f25477e First drop of smoketest support
dario
parents:
diff changeset
    38
    print("\"$link\" already exists. ");
1b428f25477e First drop of smoketest support
dario
parents:
diff changeset
    39
    if (!$force) {
1b428f25477e First drop of smoketest support
dario
parents:
diff changeset
    40
        my $choice;
1b428f25477e First drop of smoketest support
dario
parents:
diff changeset
    41
        while($choice ne 'y' and $choice ne 'n') {
1b428f25477e First drop of smoketest support
dario
parents:
diff changeset
    42
            print "Delete? (y/n)? ";
1b428f25477e First drop of smoketest support
dario
parents:
diff changeset
    43
            $choice = <STDIN>;
1b428f25477e First drop of smoketest support
dario
parents:
diff changeset
    44
            chomp($choice);
1b428f25477e First drop of smoketest support
dario
parents:
diff changeset
    45
            $choice = lc($choice);
1b428f25477e First drop of smoketest support
dario
parents:
diff changeset
    46
        }
1b428f25477e First drop of smoketest support
dario
parents:
diff changeset
    47
        $force = $choice eq 'y';
1b428f25477e First drop of smoketest support
dario
parents:
diff changeset
    48
    }    
1b428f25477e First drop of smoketest support
dario
parents:
diff changeset
    49
    if ($force) {
1b428f25477e First drop of smoketest support
dario
parents:
diff changeset
    50
        system("junction -d \"$link\" > nul");
1b428f25477e First drop of smoketest support
dario
parents:
diff changeset
    51
        if ($?) {
1b428f25477e First drop of smoketest support
dario
parents:
diff changeset
    52
            die("Cannot delete \"$link\": $!\n");
1b428f25477e First drop of smoketest support
dario
parents:
diff changeset
    53
        }
1b428f25477e First drop of smoketest support
dario
parents:
diff changeset
    54
        else {
1b428f25477e First drop of smoketest support
dario
parents:
diff changeset
    55
            print "Deleted \"$link\"\n";
1b428f25477e First drop of smoketest support
dario
parents:
diff changeset
    56
        }
1b428f25477e First drop of smoketest support
dario
parents:
diff changeset
    57
    }
1b428f25477e First drop of smoketest support
dario
parents:
diff changeset
    58
} 
1b428f25477e First drop of smoketest support
dario
parents:
diff changeset
    59
1b428f25477e First drop of smoketest support
dario
parents:
diff changeset
    60
system("junction \"$link\" \"$target\" > nul");
1b428f25477e First drop of smoketest support
dario
parents:
diff changeset
    61
if ($?) {
1b428f25477e First drop of smoketest support
dario
parents:
diff changeset
    62
    die("Cannot cteate junction \"$link\" -> \"$target\": $!\n");
1b428f25477e First drop of smoketest support
dario
parents:
diff changeset
    63
}
1b428f25477e First drop of smoketest support
dario
parents:
diff changeset
    64
else {
1b428f25477e First drop of smoketest support
dario
parents:
diff changeset
    65
    print("Created junction \"$link\" -> \"$target\"\n");
1b428f25477e First drop of smoketest support
dario
parents:
diff changeset
    66
}
1b428f25477e First drop of smoketest support
dario
parents:
diff changeset
    67
exit 0;
1b428f25477e First drop of smoketest support
dario
parents:
diff changeset
    68
1b428f25477e First drop of smoketest support
dario
parents:
diff changeset
    69
sub usage($)
1b428f25477e First drop of smoketest support
dario
parents:
diff changeset
    70
{
1b428f25477e First drop of smoketest support
dario
parents:
diff changeset
    71
    my $error = shift;
1b428f25477e First drop of smoketest support
dario
parents:
diff changeset
    72
    my $fh = $error == 0 ? *STDOUT : *STDERR;
1b428f25477e First drop of smoketest support
dario
parents:
diff changeset
    73
    print $fh "make_junction.pl\n" .
1b428f25477e First drop of smoketest support
dario
parents:
diff changeset
    74
            "Create a Windows junction (a.k.a symbolic link)\n" .
1b428f25477e First drop of smoketest support
dario
parents:
diff changeset
    75
            "usage:\n" .
1b428f25477e First drop of smoketest support
dario
parents:
diff changeset
    76
            "  make_junction.pl --help\n" .
1b428f25477e First drop of smoketest support
dario
parents:
diff changeset
    77
            "  make_junction.pl --link=LINKDIR --target=TARGDIR\n " .
1b428f25477e First drop of smoketest support
dario
parents:
diff changeset
    78
            "options:\n" .
1b428f25477e First drop of smoketest support
dario
parents:
diff changeset
    79
            "  --help                        Display this help and exit\n" .
1b428f25477e First drop of smoketest support
dario
parents:
diff changeset
    80
            "  --link=LINKDIR                LINKDIR specifies the junction to be created. Last component is the junction. The rest must exist\n" .
1b428f25477e First drop of smoketest support
dario
parents:
diff changeset
    81
            "  --target=TARGDIR              TARGDIR is directory to which the junction will point.\n";
1b428f25477e First drop of smoketest support
dario
parents:
diff changeset
    82
    exit $error;            
1b428f25477e First drop of smoketest support
dario
parents:
diff changeset
    83
}
1b428f25477e First drop of smoketest support
dario
parents:
diff changeset
    84
1b428f25477e First drop of smoketest support
dario
parents:
diff changeset
    85
sub help()
1b428f25477e First drop of smoketest support
dario
parents:
diff changeset
    86
{
1b428f25477e First drop of smoketest support
dario
parents:
diff changeset
    87
    usage(0);
1b428f25477e First drop of smoketest support
dario
parents:
diff changeset
    88
}
1b428f25477e First drop of smoketest support
dario
parents:
diff changeset
    89
1b428f25477e First drop of smoketest support
dario
parents:
diff changeset
    90
sub usage_error()
1b428f25477e First drop of smoketest support
dario
parents:
diff changeset
    91
{
1b428f25477e First drop of smoketest support
dario
parents:
diff changeset
    92
    usage(1);
1b428f25477e First drop of smoketest support
dario
parents:
diff changeset
    93
}             
1b428f25477e First drop of smoketest support
dario
parents:
diff changeset
    94
1b428f25477e First drop of smoketest support
dario
parents:
diff changeset
    95
# EOF
1b428f25477e First drop of smoketest support
dario
parents:
diff changeset
    96