[pve-devel] r6441 - in pve-common/trunk: . data data/PVE debian

svn-commits at proxmox.com svn-commits at proxmox.com
Wed Aug 10 10:19:40 CEST 2011


Author: dietmar
Date: 2011-08-10 10:19:39 +0200 (Wed, 10 Aug 2011)
New Revision: 6441

Modified:
   pve-common/trunk/Makefile
   pve-common/trunk/data/ChangeLog
   pve-common/trunk/data/PVE/CLIHandler.pm
   pve-common/trunk/debian/changelog
Log:
  * CLIHandler.pm: new command 'printmanpod' to generate manual pages.



Modified: pve-common/trunk/Makefile
===================================================================
--- pve-common/trunk/Makefile	2011-08-10 05:58:34 UTC (rev 6440)
+++ pve-common/trunk/Makefile	2011-08-10 08:19:39 UTC (rev 6441)
@@ -1,7 +1,7 @@
 RELEASE=2.0
 
 VERSION=1.0
-PKGREL=3
+PKGREL=4
 
 PACKAGE=libpve-common-perl
 

Modified: pve-common/trunk/data/ChangeLog
===================================================================
--- pve-common/trunk/data/ChangeLog	2011-08-10 05:58:34 UTC (rev 6440)
+++ pve-common/trunk/data/ChangeLog	2011-08-10 08:19:39 UTC (rev 6441)
@@ -1,3 +1,8 @@
+2011-08-10  Proxmox Support Team  <support at proxmox.com>
+
+	* PVE/CLIHandler.pm (print_pod_manpage): add method to generate
+	pod base manual pages (SYNOPSIS is auto generated).
+
 2011-08-05  Proxmox Support Team  <support at proxmox.com>
 
 	* PVE/CLIHandler.pm (help): avoid warning on undefined commands

Modified: pve-common/trunk/data/PVE/CLIHandler.pm
===================================================================
--- pve-common/trunk/data/PVE/CLIHandler.pm	2011-08-10 05:58:34 UTC (rev 6440)
+++ pve-common/trunk/data/PVE/CLIHandler.pm	2011-08-10 08:19:39 UTC (rev 6441)
@@ -1,3 +1,19 @@
+package PVE::PodParser;
+
+use Pod::Parser;
+
+ at ISA = qw(Pod::Parser);
+
+sub command { 
+    my ($self, $cmd, $text, $line_num, $pod_para)  = @_;
+
+    $self->textblock($pod_para->raw_text(), $line_num, $pod_para);
+
+    if ($cmd eq 'head1' && $text =~ m/^\s*SYNOPSIS\s/ && $self->{synopsis}) {
+	$self->textblock($self->{synopsis}, $line_num, $pod_para);
+    }
+}
+
 package PVE::CLIHandler;
 
 use strict;
@@ -11,6 +27,26 @@
 my $cmddef;
 my $exename;
 
+my $expand_command_name = sub {
+    my ($def, $cmd) = @_;
+
+    if (!$def->{$cmd}) {
+	my $expanded;
+	for my $k (keys(%$def)) {
+	    if ($k =~ m/^$cmd/) {
+		if ($expanded) {
+		    $expanded = undef; # more than one match
+		    last;
+		} else {
+		    $expanded = $k;
+		}
+	    }
+	}
+	$cmd = $expanded if $expanded;
+    }
+    return $cmd;
+};
+
 __PACKAGE__->register_method ({
     name => 'help', 
     path => 'help',
@@ -52,10 +88,13 @@
 	    return undef;
 	}
 
+	$cmd = &$expand_command_name($cmddef, $cmd);
+
 	my ($class, $name, $arg_param, $uri_param) = @{$cmddef->{$cmd} || []};
 
 	raise_param_exc({ cmd => "no such command '$cmd'"}) if !$class;
 
+
 	my $str = $class->usage_str($name, "$exename $cmd", $arg_param, $uri_param, $verbose ? 'full' : 'short');
 	if ($verbose) {
 	    print "$str\n";
@@ -67,6 +106,31 @@
 
     }});
 
+sub print_pod_manpage {
+    my ($podfn) = @_;
+
+    die "not initialized" if !($cmddef && $exename);
+    die "no pod filename" if !$podfn;
+
+    my $synopsis = "";
+    
+    $synopsis .= " $exename <COMMAND> [ARGS] [OPTIONS]\n\n";
+
+    my $oldclass;
+    foreach my $cmd (sorted_commands()) {
+	my ($class, $name, $arg_param, $uri_param) = @{$cmddef->{$cmd}};
+	my $str = $class->usage_str($name, "$exename $cmd", $arg_param, $uri_param, 'short');
+	$synopsis .= "\n" if $oldclass && $oldclass ne $class;
+	$synopsis .= " $str";
+	$oldclass = $class;
+    }
+
+    $synopsis .= "\n";
+
+    my $parser = PVE::PodParser->new(synopsis => $synopsis);
+    $parser->parse_from_file($podfn);
+}
+
 sub print_usage_verbose {
 
     die "not initialized" if !($cmddef && $exename);
@@ -103,7 +167,7 @@
 }
 
 sub handle_cmd {
-    my ($def, $cmdname, $cmd, $args, $pwcallback) = @_;
+    my ($def, $cmdname, $cmd, $args, $pwcallback, $podfn) = @_;
 
     $cmddef = $def;
     $exename = $cmdname;
@@ -113,24 +177,17 @@
     if (!$cmd) { 
 	print_usage_short (\*STDERR, "no command specified");
 	exit (-1);
+    } elsif ($cmd eq 'verifyapi') {
+	PVE::RESTHandler::validate_method_schemas();
+	return;
+    } elsif ($cmd eq 'printmanpod') {
+	print_pod_manpage($podfn);
+	return;
     }
 
-     if (!$cmddef->{$cmd}) {
-	my $expanded;
-	for my $k (keys(%$cmddef)) {
-	    if ($k =~ m/^$cmd/) {
-		if ($expanded) {
-		    $expanded = undef; # more than one match
-		    last;
-		} else {
-		    $expanded = $k;
-		}
-	    }
-	}
-	$cmd = $expanded if $expanded;
-     }
+    $cmd = &$expand_command_name($cmddef, $cmd);
 
-    my ($class, $name, $arg_param, $uri_param, $outsub) = @{$cmddef->{$cmd}} if $cmddef->{$cmd};
+    my ($class, $name, $arg_param, $uri_param, $outsub) = @{$cmddef->{$cmd} || []};
 
     if (!$class) {
 	print_usage_short (\*STDERR, "unknown command '$cmd'");

Modified: pve-common/trunk/debian/changelog
===================================================================
--- pve-common/trunk/debian/changelog	2011-08-10 05:58:34 UTC (rev 6440)
+++ pve-common/trunk/debian/changelog	2011-08-10 08:19:39 UTC (rev 6441)
@@ -1,3 +1,9 @@
+libpve-common-perl (1.0-4) unstable; urgency=low
+
+  * CLIHandler.pm: new command 'printmanpod' to generate manual pages.
+
+ -- Proxmox Support Team <support at proxmox.com>  Wed, 10 Aug 2011 10:17:55 +0200
+
 libpve-common-perl (1.0-3) unstable; urgency=low
 
   * fix CLIHandler.pm



More information about the pve-devel mailing list