#!/usr/bin/perl -w

use strict;
use warnings;
use Getopt::Long;
use File::Basename;
use Pod::Usage;
use ALTLinux::ACL;

my $verbose=0;
my $help=0;
my $resolve_group=0;
my $nvr_mode;

my $result = GetOptions (
    @ALTLinux::ACL::LONGOPT,
    "help"  => \$help,
    'quiet'=> sub {$verbose=0},
    "verbose+"  => \$verbose,
    "resolve-group"  => \$resolve_group,
    "nvr"  => \$nvr_mode,
);

if ($help or not @ARGV or @ARGV>1) {
    pod2usage();
}

my $default_leader='@nobody';
my $acl = ALTLinux::ACL->new();

sub print_leader {
    my $name=basename(shift);
    $name=~s/-[^-]+-[^-]+$// if $nvr_mode;
    my @acl_list=$acl->acl($name);
    warn "$name: the package has no acl\n" unless @acl_list;
    my $leader=$acl_list[0];
    print STDERR "leader=$leader resolve_group=$resolve_group is_group=", $acl->is_group($leader),"\n" if $verbose>1;
    if ($resolve_group and defined($leader) and $acl->is_group($leader)) {
	$leader=$acl->group_leader($leader);
    }
    print $leader ? $leader : $default_leader,"\n";
}

map {&print_leader($_)} @ARGV;


=head1	NAME

altlinux-acl-get-leader - print altlinux acl leader of the given name(s).

=head1	SYNOPSIS

B<altlinux-acl-get-leader>
[B<-h|--help>]
[B<-q|--quiet>]
[B<-v|--verbose>]
[B<-r|--resolve-group>]
[B<--nvr>]
I<name> [...]

=head1	DESCRIPTION

B<altlinux-acl-get-leader>
Prints altlinux acl leader of the given name.
If the leader is not found, prints @nobody.


=head1	OPTIONS

=over

=item	B<-h, --help>

Display this help and exit.

=item	B<-r, --resolve-group>

Replace group by group leader.

=item	B<--nvr>

NVR mode. In this mode, the input is not a srpm name, but
is expected to look like name-version-release.something,
like foo-1.0-alt1, foo-1.0-alt1.log, foo-1.0-alt1.noarch,
foo-1.0-alt1.noarch.patch.

=item	B<-v, --verbose>, B<-q, --quiet>

Verbosity level. Multiple -v increase the verbosity level, -q sets it to 0.

=back

=head1	AUTHOR

Written by Igor Vlasenko <viy@altlinux.org>.

=head1	COPYING

Copyright (c) 2009-2023 Igor Vlasenko, ALT Linux Team.

This is free software; you can redistribute it and/or modify it 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.

=cut
