#!/usr/bin/perl
#
# Copyright © 2008 by Raphael Geissert <atomo64@gmail.com>
# Copyright © 2017-2018 Chris Lamb <lamby@debian.org>
# Copyright © 2021 Felix Lechner
#
# This program is free software.  It is distributed under the terms of
# the GNU General Public License as published by the Free Software
# Foundation; either version 2 of the License, or (at your option) any
# later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program.  If not, you can find it on the World Wide
# Web at http://www.gnu.org/copyleft/gpl.html, or write to the Free
# Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston,
# MA 02110-1301, USA.

use v5.20;
use warnings;
use utf8;

use Cwd qw(realpath);
use File::Basename qw(dirname);

# neither Path::This nor lib::relative are in Debian
use constant THISFILE => realpath __FILE__;
use constant THISDIR => dirname realpath __FILE__;

# use Lintian modules that belong to this program
use lib THISDIR . '/../lib';

use Const::Fast;
use Syntax::Keyword::Try;
use Unicode::UTF8 qw(encode_utf8);

use Lintian::Archive;
use Lintian::Profile;

const my $EMPTY => q{};

$ENV{LINTIAN_BASE} = realpath(THISDIR . '/..')
  // die encode_utf8('Cannot resolve LINTIAN_BASE');

my $basedir = 'data';

die encode_utf8("Basedir does not exist at $basedir\n")
  unless -e $basedir;

my $profile = Lintian::Profile->new;
$profile->load;

my @parts = (
    $profile->architectures, $profile->debhelper_addons,
    $profile->debhelper_commands, $profile->fonts,
    $profile->hardening_buildflags,$profile->policy_releases,
);

my $archive = Lintian::Archive->new;

my $errors = 0;

my $count;
for my $part (@parts) {

    next
      unless $part->can('refresh');

    my $title = $part->title;

    say "Refreshing $title...";

    try {
        $part->refresh($archive, $basedir);

    } catch {
        ++$errors;
        warn encode_utf8("Cannot refresh $title: $@");
    }

} continue {
    ++$count;
}

if ($errors) {
    say $EMPTY;
    warn encode_utf8(
        "WARNING: $errors data source(s) failed to refresh (out of $count).");
}

exit;

# Local Variables:
# indent-tabs-mode: nil
# cperl-indent-level: 4
# End:
# vim: syntax=perl sw=4 sts=4 sr et
