#!/usr/bin/perl

use strict;
use warnings;

=head1 NAME

    svn-verify-working-copy -- проверяет, что svn-рабочая копия "чистая" (одной и той же ревизии и без локальных модификаций)

=head1 DESCRIPTION

    Проверяет "целостность" svn-рабочей копии: 
      * вся рабочая копия смотрит на одну и ту же ревизию
      * в рабочей копии нет неверсионированных файлов (svn:ignore не действует, файлы оттуда проверяются в общем порядке)
      * в рабочей копии нет локально модифицированных файлов (svn:ignore не действует, файлы оттуда проверяются в общем порядке)
      * все externals объявлены с точной ревизией
      * все файлы в external-каталогах -- тех ревизий, которые требовалась в определении

    Коротко: успешная проверка означает, что рабочая копия в точности такая же, как после svn co -r NNN.

    Если проверка не проходит успешно -- выводит описание несоответствий и завершается с ненулевым кодом.

    --skip <path>
        проигноровать файл/каталог
        можно указывать несколько раз

=head1 TODO

=cut

use Getopt::Long;

use Yandex::Svn;

run() unless caller();

sub run
{
    my $opt = parse_options();

    Yandex::Svn::verify_working_copy( $opt->{path}, skip => $opt->{skip});
}


sub parse_options
{
    my %O = (
        skip => [],
    );

    GetOptions(
        "skip=s"   => $O{skip},
        "help"     => sub {
            system("podselect -section NAME -section DESCRIPTION $0 | pod2text-utf8");
            exit(0);
        },  
    ) or die "Can't parse parameters, stop\n";

    $O{path} = @ARGV > 0 ? shift @ARGV : '.';

    die "uexpected params @ARGV" if @ARGV > 0;

    return \%O;
}


