#!/usr/bin/perl

=head2 NAME

    direct-release-diff - посмотреть изменения (svn diff) между двумя релизами

=head2 SYNOPSIS

    # предпоследний и последний релизы
    direct-release-diff last-1 last

    # можно указывать релизные тикеты 
    direct-release-diff DIRECT-51983 DIRECT-51888
    # или даже без указания очереди
    direct-release-diff 51888 51983
    
    # посмотреть изменения для одной директории или файла
    direct-release-diff last-1 last protected
    direct-release-diff last-1 last packages/yandex-direct/debian/control

    # сравнить с произвольной директорией в SVN
    direct-release-diff last svn+ssh://svn.yandex.ru/direct/trunk

=head2 TODO

    * разрешить передавать опции в svn diff
    * подумать, можно ли объёдинить с svn-diff-branch

=cut

use strict;
use warnings;

use utf8;

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

use List::Util qw/max/;
use ProjectSpecific qw/version2svnpath parse_release_summary/;
use Startrek::Client::Easy;

my $st = Startrek::Client::Easy->new;
my $last_releases_query = ProjectSpecific::make_last_releases_query();
my $last_releases;
for (@ARGV[0, 1]) {
    if (/^(last)?(-[0-9]+)?$/) {
        my $release_count = max(-($2 || 0), 10);
        $last_releases //= $st->get(query => $last_releases_query, limit => $release_count, array => 1);
        my $issue = $last_releases->[ -($2 || 0) ];
        $_ = $issue->{key};
    }
    if (/^([A-Z]+-)?[0-9]+$/) {
        if (!$1) {
            $_ = ProjectSpecific::get_project_data('default_tracker_queue') . '-' . $_;
        }
        my $issue = $st->get(key => $_);
        $_ = parse_release_summary($issue->{summary})->{version};
    }
    if (/^1\.[0-9]+(\.[0-9]+)?-[0-9]+$/) {
        $_ = version2svnpath($_);
    }
}

my $path = $ARGV[2];
system 'svn', 'diff', (map { $path ? "$_/$path" : $_ } @ARGV[0, 1]);
