#!/usr/bin/env perl

# Some tests for the --set-scripts-executable option.

use lib qw(lib/perl);
use Test::More qw/no_plan/;
use Test::Darcs;
use Shell::Command;
use strict;

cleanup  'temp1';
cleanup  'temp2';
mkpath 'temp1';
chdir 'temp1';
darcs 'init';
chdir '..';

if ($^O =~ /msys/i) {
    pass 'test does not work on windows';
} else {
    my $test_name = 'darcs pull --set-scripts-executable works';

    cp __FILE__, 'temp1/script.pl' || die $!;
    chmod 0644, 'temp1/script.pl' || die $!;
    system 'date > temp1/nonscript';
    ok( (-r 'temp1/script.pl'), 'pre test: script exists and is readable' );
    ok( ! (-x 'temp1/script.pl'), 'pre test: script is not executable' );
    ok( (-r 'temp1/nonscript'), 'pre test: nonscript exists and is readable' );
    ok( ! (-x 'temp1/nonscript'), 'pre test: nonscript is not executable' );

    chdir './temp1';  
    darcs  qw/add script.pl nonscript/;
    like( ( darcs qw!record --patch-name 'uno' --all --author foo\@bar! ), qr/finished recording/i );
    ok( chdir '..');
    # sans --set-scripts-executable (should not be executable)
    mkpath 'temp2';
    chdir 'temp2';
    darcs 'init';
    like( ( darcs qw%pull -a ../temp1 %) , qr/finished pulling/i );
    ok( (-r 'script.pl'), 'reality check: file has been pulled and is readable' );
    ok( (-r 'nonscript'), 'reality check: other file has been pulled and is readable' );

    ok(! (-x 'script.pl'), "nothing should be executable");
    ok(! (-x 'nonscript'), "nothing should be executable" );
    chdir '..';

    # darcs pull --set-scripts-executable
    `rm -rf temp2`;
    mkpath 'temp2';
    chdir 'temp2';
    darcs 'init';
    like( ( darcs qw%pull --set-scripts-executable -a ../temp1 %) ,
           qr/finished pulling/i );
    ok( (-r 'script.pl'), 'reality check: file has been pulled and is readable' );
    ok( (-r 'nonscript'), 'reality check: other file has been pulled and is readable' );

    ok( (-x 'script.pl'), $test_name );
    ok(! (-x 'nonscript'), "innocent bystanders aren't set to be executable" );
    chdir '../';     # now outside of any repo

    # now let's try the same thing with get
    `rm -rf temp2`;
    like( ( darcs qw%get --set-scripts-executable temp1 temp2 %) ,
           qr/finished/i );
    chdir 'temp2';
    ok( (-r 'script.pl'), 'reality check: file has been gotten and is readable' );
    ok( (-r 'nonscript'), 'reality check: other file has been gotten and is readable' );

    ok( (-x 'script.pl'), $test_name );
    ok(! (-x 'nonscript'), "innocent bystanders aren't set to be executable" );
    chdir '../';     # now outside of any repo
}

ok(-d 'temp1', "temp1 exists here");
cleanup 'temp1';
ok((!-d 'temp1'), 'temp1 directory was deleted');

ok(-d 'temp2', "temp2 exists here");
cleanup 'temp2';
ok((!-d 'temp2'), 'temp2 directory was deleted');




