add helpers to verify API without starting the binary
authorDietmar Maurer <dietmar@proxmox.com>
Thu, 3 Sep 2015 13:12:03 +0000 (15:12 +0200)
committerDietmar Maurer <dietmar@proxmox.com>
Thu, 3 Sep 2015 13:12:03 +0000 (15:12 +0200)
In future, we want to have a separate PVE::CLI::$binname class
for each binary. We can then simply load that class to verify
the API:

 use PVE::CLI::pct;

 PVE::CLI::pct->verify_api();

or to generate the docs:

 PVE::CLI::pct->generate_pod_manpage();

src/PVE/CLIHandler.pm

index 6d3f69d..6ccfcd2 100644 (file)
@@ -261,6 +261,39 @@ my $print_bash_completion = sub {
     &$print_result(@option_list);
 };
 
+sub verify_api {
+    my ($class) = @_;
+
+    # simply verify all registered methods
+    PVE::RESTHandler::validate_method_schemas();
+}
+
+sub generate_pod_manpage {
+    my ($class, $podfn) = @_;
+
+    no strict 'refs'; 
+    $cmddef = ${"${class}::cmddef"};
+
+    $exename = $class;
+    $exename =~ s/^.*:://;
+
+    if (!defined($podfn)) {
+       my $cpath = "$class.pm";
+       $cpath =~ s/::/\//g;
+       foreach my $p (@INC) {
+           my $testfn = "$p/$cpath";
+           if (-f $testfn) {
+               $podfn = $testfn;
+               last;
+           }
+       }
+    }
+
+    die "unable to find source for class '$class'" if !$podfn;
+
+    print_pod_manpage($podfn);
+}
+
 sub handle_cmd {
     my ($def, $cmdname, $cmd, $args, $pwcallback, $podfn, $preparefunc) = @_;