This file is indexed.

/usr/share/perl5/Catmandu/Cmd/help.pm is in libcatmandu-perl 0.9505-1.

This file is owned by root:root, with mode 0o644.

The actual contents of the file can be viewed below.

  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
package Catmandu::Cmd::help;

use Catmandu::Sane;

our $VERSION = '0.9505';

use parent 'Catmandu::Cmd';
use App::Cmd::Command::help;
use Catmandu::Util qw(require_package pod_section);
use namespace::clean;

sub usage_desc { '%c help [ <command> | ( export | import | store | fix ) <name> ]' }

sub command_names { qw/help --help -h -?/ }

my %MODULES = (
    Exporter => {
        re => qr/^export(er)?$/i,
        usage => [
            "catmandu convert ... to %n [options]",
            "catmandu export  ... to %n [options]",
        ],
    },
    Importer => {
        re => qr/^import(er)?$/i,
        usage => [ 
            "catmandu convert %n [options] to ...",
            "catmandu import  %n [options] to ...",
        ],
    },
    Store => {
        re => qr/^(store|move)$/i,
        usage => [
            "catmandu import ... to %n [options]",
            "catmandu move   ... to %n [options]",
            "catmandu export %n [options] ...",
            "catmandu move   %n [options] ...",
        ]
    },
    Fix => {
        re => qr/^fix$/i,
        usage => [ "%n( [options] )" ]
    },
);

sub execute {
    my ($self, $opts, $args) = @_;

    # TODO: list available Importer/Exporters/Stores/Fixes...

    if ( @$args == 2 ) {
        # detect many forms such as:
        # export JSON, exporter JSON, JSON export, JSON exporter
        foreach (0,1) {
            foreach my $type (keys %MODULES) {
                if ($args->[$_] =~ $MODULES{$type}->{re}) {
                    $self->help_about($type, $args->[ ($_+1) % 2 ]);
                    return;
                }
            }
        }
    } 
  
    App::Cmd::Command::help::execute(@_);
}

sub help_about {
  my ($self, $type, $name) = @_;

  my $class = "Catmandu::${type}::$name";
  require_package($class);

  my $about = pod_section($class,"name");
  $about =~ s/\n/ /mg;
  say ucfirst($about);

  say "\nUsage:";
  print join "", map { s/%n/$name/g; "  $_\n" } @{$MODULES{$type}->{usage}};

  my $descr = pod_section($class,"description");
  chomp $descr;
  say "\n$descr" if $descr;
  
  # TODO: include examples?

  my $options = pod_section($class,"configuration");
  if ($options) {
    $options =~ s/^([a-z0-9_-]+)\s*\n?/--$1, /mgi;
    $options =~ s/^(--[a-z0-9_-]+(,\s*--[a-z0-9_-]+)*),\s*([^-])/" $1\n    $3"/emgi;
    print "\nOptions:\n$options";
  }
}

1;

__END__

=pod

=head1 NAME

Catmandu::Cmd::help - show help

=head1 EXAMPLES

  catmandu help convert
  catmandu help import JSON
  catmandu help help

=cut