Transform -> Moo
[Packaging-Tools.git] / scriptlet / up2date.pl
blob542da83a90f1f5b80ba11c59b0263e32bafc32e4
1 #!/usr/bin/perl
3 use strict;
4 use warnings;
6 require Packaging::Tools;
8 require File::Basename;
9 require File::Spec;
11 use Getopt::Long;
12 use Pod::Usage;
13 use Template;
15 my %tools = (
16 #@toolhash@
17 make => '/usr/pkg/bin/bmake',
18 pkg_info_cmd => '/usr/pkg/sbin/pkg_info',
19 pkgsrcdir => '/data/pkgsrc',
22 #my $pkgdist = '@pkgdist@';
23 my $pkgdist = 'pkgsrc';
25 my @pkgs_in_state;
26 my $pkgtool = Packaging::Tools->new( $pkgdist, \%tools );
28 my @templates = $pkgtool->find_templates("up2date");
29 my %tpl_names = map { scalar File::Basename::fileparse( $_, qr/\.[^.]*/ ) => $_ } @templates;
30 my %opts = ( "update-cpan-index" => 0 );
31 my @fmt_options = map { "output-" . $_ } keys %tpl_names;
32 my @options =
33 ( ( map { $_ . ":s" } @fmt_options ), "cpan-home=s", "update-cpan-index!", "help|h", "usage|?" );
35 GetOptions( \%opts, @options ) or pod2usage(2);
37 defined( $opts{help} )
38 and $opts{help}
39 and pod2usage(
41 -verbose => 2,
42 -exitval => 0
45 defined( $opts{usage} ) and $opts{usage} and pod2usage(1);
47 my @output = grep { defined( $opts{$_} ) } @fmt_options;
48 @output or @output = ('output-log');
50 $pkgtool->load_cpan_config( $opts{"cpan-home"} );
51 $pkgtool->get_cpan_versions( $opts{"update-cpan-index"} );
53 my ( $up_to_date, $need_update, $need_check ) = (0) x 3;
54 my @pkglist = $pkgtool->find_packaged_modules();
55 @pkglist = sort @pkglist;
56 foreach my $pkg (@pkglist)
58 my $state = $pkgtool->check_pkg_up2date_state($pkg);
59 if ($state)
61 my %pkg_details;
62 my @pkg_detail_keys =
63 qw(DIST_NAME DIST_VERSION DIST_FILE PKG_NAME PKG_VERSION PKG_MAINTAINER PKG_HOMEPAGE PKG_INSTALLED PKG_LOCATION CPAN_VERSION CPAN_NAME CHECK_STATE CHECK_COMMENT);
64 @pkg_details{@pkg_detail_keys} = $pkgtool->get_pkg_details( $pkg, @pkg_detail_keys );
65 push( @pkgs_in_state, \%pkg_details );
66 if ( $pkg_details{CHECK_STATE} == Packaging::Tools->STATE_NEWER_IN_CPAN )
68 ++$need_update;
70 else
72 ++$need_check;
75 else
77 ++$up_to_date;
81 my $template = Template->new(
82 INCLUDE_PATH => join( ":",
83 $pkgtool->get_template_directories("up2date"),
84 $pkgtool->get_template_directories() ),
85 ABSOLUTE => 1,
87 my %vars = (
88 data => \@pkgs_in_state,
89 STATE_REMARKS => [ $pkgtool->get_state_remarks() ],
90 STATE_CMPOPS => [ $pkgtool->get_state_cmpops() ],
91 COUNT => {
92 UP2DATE => $up_to_date,
93 ENTIRE => scalar(@pkglist),
94 NEED_UPDATE => $need_update,
95 NEED_CHECK => $need_check
98 foreach my $tgt (@output)
100 my $tgtfn = $opts{$tgt};
101 ( my $tpl = $tgt ) =~ s/output-(.*)/$1/;
102 unless ($tgtfn)
104 # for backward compatibility
105 ( my $ext = $tgt ) =~ s/output-([^-]+).*/$1/;
106 $tgtfn = File::Spec->catfile( $ENV{HOME}, "up2date." . $ext );
108 $template->process( $tpl_names{$tpl}, \%vars, $tgtfn )
109 or die $template->error();
112 exit(0);