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
 |