Files correlati : utilma verione di curl git-svn-id: svn://10.65.10.50/branches/R_10_00@24159 c028cbd2-c16b-5b4b-a496-9718f37d4682
		
			
				
	
	
		
			356 lines
		
	
	
		
			7.5 KiB
		
	
	
	
		
			Perl
		
	
	
	
	
	
			
		
		
	
	
			356 lines
		
	
	
		
			7.5 KiB
		
	
	
	
		
			Perl
		
	
	
	
	
	
| #!/usr/bin/perl
 | |
| #***************************************************************************
 | |
| #                                  _   _ ____  _
 | |
| #  Project                     ___| | | |  _ \| |
 | |
| #                             / __| | | | |_) | |
 | |
| #                            | (__| |_| |  _ <| |___
 | |
| #                             \___|\___/|_| \_\_____|
 | |
| #
 | |
| # Copyright (C) 1998 - 2017, Daniel Stenberg, <daniel@haxx.se>, et al.
 | |
| #
 | |
| # This software is licensed as described in the file COPYING, which
 | |
| # you should have received as part of this distribution. The terms
 | |
| # are also available at https://curl.haxx.se/docs/copyright.html.
 | |
| #
 | |
| # You may opt to use, copy, modify, merge, publish, distribute and/or sell
 | |
| # copies of the Software, and permit persons to whom the Software is
 | |
| # furnished to do so, under the terms of the COPYING file.
 | |
| #
 | |
| # This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
 | |
| # KIND, either express or implied.
 | |
| #
 | |
| ###########################################################################
 | |
| 
 | |
| # Update man pages.
 | |
| 
 | |
| use strict;
 | |
| use warnings;
 | |
| use Tie::File;
 | |
| 
 | |
| # Data from the command line.
 | |
| 
 | |
| my $curlver = $ARGV[0];
 | |
| my $curldate = $ARGV[1];
 | |
| 
 | |
| # Directories and extensions.
 | |
| 
 | |
| my @dirlist = ("docs/", "docs/libcurl/", "docs/libcurl/opts/", "tests/");
 | |
| my @extlist = (".1", ".3");
 | |
| my @excludelist = ("mk-ca-bundle.1", "template.3");
 | |
| 
 | |
| # Subroutines
 | |
| 
 | |
| sub printargs{
 | |
|   # Print arguments and exit.
 | |
| 
 | |
|   print "usage: updatemanpages.pl <version> <date>\n";
 | |
|   exit;
 | |
| }
 | |
| 
 | |
| sub getthline{
 | |
|   # Process file looking for .TH section.
 | |
| 
 | |
|   my $filename = shift;
 | |
|   my $file_handle;
 | |
|   my $file_line;
 | |
| 
 | |
|   # Open the file.
 | |
| 
 | |
|   open($file_handle, $filename);
 | |
| 
 | |
|   # Look for the .TH section, process it into an array,
 | |
|   # modify it and write to file.
 | |
| 
 | |
|   tie(my @file_data, 'Tie::File', $filename);
 | |
|   foreach my $file_data_line(@file_data) {
 | |
|     if($file_data_line =~ /^.TH/) {
 | |
|       $file_line = $file_data_line;
 | |
|       last;
 | |
|     }
 | |
|   }
 | |
| 
 | |
|   # Close the file.
 | |
| 
 | |
|   close($file_handle);
 | |
|   return $file_line;
 | |
| }
 | |
| 
 | |
| sub extractth{
 | |
|   # Extract .TH section as an array.
 | |
| 
 | |
|   my $input = shift;
 | |
| 
 | |
|   # Split the line into an array.
 | |
| 
 | |
|   my @tharray;
 | |
|   my $inputsize = length($input);
 | |
|   my $inputcurrent = "";
 | |
|   my $quotemode = 0;
 | |
| 
 | |
|   for(my $inputseek = 0; $inputseek < $inputsize; $inputseek++) {
 | |
| 
 | |
|     if(substr($input, $inputseek, 1) eq " " && $quotemode eq 0) {
 | |
|       push(@tharray, $inputcurrent);
 | |
|       $inputcurrent = "";
 | |
|       next;
 | |
|     }
 | |
| 
 | |
|     $inputcurrent = $inputcurrent . substr($input, $inputseek, 1);
 | |
| 
 | |
|     if(substr($input, $inputseek, 1) eq "\"") {
 | |
|       if($quotemode eq 0) {
 | |
|         $quotemode = 1;
 | |
|       }
 | |
|       else {
 | |
|         $quotemode = 0;
 | |
|       }
 | |
|     }
 | |
|   }
 | |
| 
 | |
|   if($inputcurrent ne "") {
 | |
|     push(@tharray, $inputcurrent);
 | |
|   }
 | |
| 
 | |
|   return @tharray;
 | |
| }
 | |
| 
 | |
| sub getdate{
 | |
|   # Get the date from the .TH section.
 | |
| 
 | |
|   my $filename = shift;
 | |
|   my $thline;
 | |
|   my @tharray;
 | |
|   my $date = "";
 | |
| 
 | |
|   $thline = getthline($filename);
 | |
| 
 | |
|   # Return nothing if there is no .TH section found.
 | |
| 
 | |
|   if(!$thline || $thline eq "") {
 | |
|     return "";
 | |
|   }
 | |
| 
 | |
|   @tharray = extractth($thline);
 | |
| 
 | |
|   # Remove the quotes at the start and end.
 | |
| 
 | |
|   $date = substr($tharray[3], 1, -1);
 | |
|   return $date;
 | |
| }
 | |
| 
 | |
| sub processth{
 | |
|   # Process .TH section.
 | |
| 
 | |
|   my $input = shift;
 | |
|   my $date = shift;
 | |
| 
 | |
|   # Split the line into an array.
 | |
| 
 | |
|   my @tharray = extractth($input);
 | |
| 
 | |
|   # Alter the date.
 | |
| 
 | |
|   my $itemdate = "\"";
 | |
|   $itemdate .= $date;
 | |
|   $itemdate .= "\"";
 | |
|   $tharray[3] = $itemdate;
 | |
| 
 | |
|   # Alter the item version.
 | |
| 
 | |
|   my $itemver = $tharray[4];
 | |
|   my $itemname = "";
 | |
| 
 | |
|   for(my $itemnameseek = 1;
 | |
|     $itemnameseek < length($itemver);
 | |
|     $itemnameseek++) {
 | |
|     if(substr($itemver, $itemnameseek, 1) eq " " ||
 | |
|       substr($itemver, $itemnameseek, 1) eq "\"") {
 | |
|       last;
 | |
|     }
 | |
|     $itemname .= substr($itemver, $itemnameseek, 1);
 | |
|   }
 | |
| 
 | |
|   $itemver = "\"";
 | |
|   $itemver .= $itemname;
 | |
|   $itemver .= " ";
 | |
|   $itemver .= $curlver;
 | |
|   $itemver .= "\"";
 | |
| 
 | |
|   $tharray[4] = $itemver;
 | |
| 
 | |
|   my $thoutput = "";
 | |
| 
 | |
|   foreach my $thvalue (@tharray) {
 | |
|     $thoutput .= $thvalue;
 | |
|     $thoutput .= " ";
 | |
|   }
 | |
|   $thoutput =~ s/\s+$//;
 | |
|   $thoutput .= "\n";
 | |
| 
 | |
|   # Return updated string.
 | |
| 
 | |
|   return $thoutput;
 | |
| }
 | |
| 
 | |
| sub processfile{
 | |
|   # Process file looking for .TH section.
 | |
| 
 | |
|   my $filename = shift;
 | |
|   my $date = shift;
 | |
|   my $file_handle;
 | |
|   my $file_dist_handle;
 | |
|   my $filename_dist;
 | |
| 
 | |
|   # Open a handle for the original file and a second file handle
 | |
|   # for the dist file.
 | |
| 
 | |
|   $filename_dist = $filename . ".dist";
 | |
| 
 | |
|   open($file_handle, $filename);
 | |
|   open($file_dist_handle, ">" . $filename_dist);
 | |
| 
 | |
|   # Look for the .TH section, process it into an array,
 | |
|   # modify it and write to file.
 | |
| 
 | |
|   tie(my @file_data, 'Tie::File', $filename);
 | |
|   foreach my $file_data_line (@file_data) {
 | |
|     if($file_data_line =~ /^.TH/) {
 | |
|       my $file_dist_line = processth($file_data_line, $date);
 | |
|       print $file_dist_handle $file_dist_line . "\n";
 | |
|     }
 | |
|     else {
 | |
|       print $file_dist_handle $file_data_line . "\n";
 | |
|     }
 | |
|   }
 | |
| 
 | |
|   # Close the file.
 | |
| 
 | |
|   close($file_handle);
 | |
|   close($file_dist_handle);
 | |
| }
 | |
| 
 | |
| # Check that $curlver is set, otherwise print arguments and exit.
 | |
| 
 | |
| if(!$curlver) {
 | |
|   printargs();
 | |
| }
 | |
| 
 | |
| # check to see that the git command works, it requires git 2.6 something
 | |
| my $gitcheck = `git log -1 --date="format:%B %d, %Y" $dirlist[0] 2>/dev/null`;
 | |
| if(length($gitcheck) < 1) {
 | |
|     print "git version too old or $dirlist[0] is a bad argument\n";
 | |
|     exit;
 | |
| }
 | |
| 
 | |
| # Look in each directory.
 | |
| 
 | |
| my $dir_handle;
 | |
| 
 | |
| foreach my $dirname (@dirlist) {
 | |
|   foreach my $extname (@extlist) {
 | |
|     # Go through the directory looking for files ending with
 | |
|     # the current extension.
 | |
| 
 | |
|     opendir($dir_handle, $dirname);
 | |
|     my @filelist = grep(/.$extname$/i, readdir($dir_handle));
 | |
| 
 | |
|     foreach my $file (@filelist) {
 | |
|       # Skip if file is in exclude list.
 | |
| 
 | |
|       if(grep(/^$file$/, @excludelist)) {
 | |
|         next;
 | |
|       }
 | |
| 
 | |
|       # Load the file and get the date.
 | |
| 
 | |
|       my $filedate;
 | |
| 
 | |
|       # Check if dist version exists and load date from that
 | |
|       # file if it does.
 | |
| 
 | |
|       if(-e ($dirname . $file . ".dist")) {
 | |
|         $filedate = getdate(($dirname . $file . ".dist"));
 | |
|       }
 | |
|       else {
 | |
|         $filedate = getdate(($dirname . $file));
 | |
|       }
 | |
| 
 | |
|       # Skip if value is empty.
 | |
| 
 | |
|       if(!$filedate || $filedate eq "") {
 | |
|         next;
 | |
|       }
 | |
| 
 | |
|       # Check the man page in the git repository.
 | |
| 
 | |
|       my $repodata = `LC_TIME=C git log -1 --date="format:%B %d, %Y" \\
 | |
|                        --since="$filedate" $dirname$file | grep ^Date:`;
 | |
| 
 | |
|       # If there is output then update the man page
 | |
|       # with the new date/version.
 | |
| 
 | |
|       # Process the file if there is output.
 | |
| 
 | |
|       if($repodata) {
 | |
|         my $thisdate;
 | |
|         if(!$curldate) {
 | |
|           if($repodata =~ /^Date: +(.*)/) {
 | |
|             $thisdate = $1;
 | |
|           }
 | |
|           else {
 | |
|             print STDERR "Warning: " . ($dirname . $file) . ": found no " .
 | |
|                            "date\n";
 | |
|           }
 | |
|         }
 | |
|         else {
 | |
|           $thisdate = $curldate;
 | |
|         }
 | |
|         processfile(($dirname . $file), $thisdate);
 | |
|         print $dirname . $file . " page updated to $thisdate\n";
 | |
|       }
 | |
|     }
 | |
|     closedir($dir_handle);
 | |
|   }
 | |
| }
 | |
| 
 | |
| __END__
 | |
| 
 | |
| =pod
 | |
| 
 | |
| =head1 updatemanpages.pl
 | |
| 
 | |
| Updates the man pages with the version number and optional date. If the date
 | |
| isn't provided, the last modified date from git is used.
 | |
| 
 | |
| =head2 USAGE
 | |
| 
 | |
| updatemanpages.pl version [date]
 | |
| 
 | |
| =head3 version
 | |
| 
 | |
| Specifies version (required)
 | |
| 
 | |
| =head3 date
 | |
| 
 | |
| Specifies date (optional)
 | |
| 
 | |
| =head2 SETTINGS
 | |
| 
 | |
| =head3 @dirlist
 | |
| 
 | |
| Specifies the list of directories to look for files in.
 | |
| 
 | |
| =head3 @extlist
 | |
| 
 | |
| Specifies the list of files with extensions to process.
 | |
| 
 | |
| =head3 @excludelist
 | |
| 
 | |
| Specifies the list of files to not process.
 | |
| 
 | |
| =head2 NOTES
 | |
| 
 | |
| This script is used during maketgz.
 | |
| 
 | |
| =cut
 |