#!/usr/bin/perl

=head1 NAME

    mediaplan-create-beta -- создание рабочей копии для запуска сервиса медиапланов на заданном порту

=head1 SYNOPSIS

    mediaplan-create-beta -p 13470
    mediaplan-create-beta -p 13470 -b adgroup-negative-tests    # использовать ветку adgroup-negative-tests
    mediaplan-create-beta               # выберет свободный порт из диапазона mediaplan

=head1 DESCRIPTION

    Создаёт директорию /var/www/mediaplan.<PORT> (<PORT> указывается опцией -p или выбирается из зарезервированного диапазона)
    и готовит её для запуска сервиса (скрипт execute_and_play).

=cut

use strict;
use warnings;

use utf8;

use open qw/:std :encoding(UTF-8)/;

use Getopt::Long;

use BetaPorts;
use Yandex::Shell;

our $REPO_URL = 'https://github.yandex-team.ru/direct/mediaplan.git';

run() unless caller();

sub run {
    my $opt = parse_options();
    my $port = $opt->{port} // BetaPorts::get_free_beta(for => 'mediaplan');
    die "port $port is not free" unless BetaPorts::is_port_free($port);
    my $dir = "/var/www/mediaplan.$port";
    yash_system('git', 'clone', $REPO_URL, $dir);
    chdir $dir;
    if ($opt->{branch}) {
        yash_system('git', 'checkout', $opt->{branch});
    }
    yash_system('git', 'submodule', 'update', '--init');
    print "\n$dir\n";
}

sub parse_options {
    my %O;
    GetOptions(
        'p|port=s' => \$O{port},
        'b|branch=s' => \$O{branch},
        'h|help' => sub { system("podselect -section SYNOPSIS -section DESCRIPTION $0 | pod2text-utf8 >&2"); exit 0 },
    ) || die "can't parse options, stop\n";
    return \%O;
}

1;
