~percona-toolkit-dev/percona-toolkit/pt-osc-asks-for-confirmation-when-alter-foreign-key-method-none-1329422

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
111
112
#!/usr/bin/env perl
use 5.010; # for \K
use strict;
use warnings;
use English qw(-no_match_vars);

use IO::File;

use File::Basename qw(basename);
use Pod::POM::View::Restructured;

my $input_file = shift @ARGV or die "Need an input file";

my $nofix = scalar @ARGV;

my $tool = basename($input_file);

open my $in_fh, q{<:encoding(UTF-8)}, $input_file
   or die "Cannot open $input_file: $!";

open my $out_fh, q{>}, \my $out;

my $conv   = Pod::POM::View::Restructured->new();
my $output = $conv->convert_file($in_fh, undef, $out_fh, { link => \&format_links });

close $in_fh;
close $out_fh;

if (!defined($output)) {
   die "Failed to convert!";
}

my $header =
      ".. program:: $tool\n\n" .
      ('=' x (length($tool) + 11)) . "\n" .
      ":program:`$tool`\n" .
      ('=' x (length($tool) + 11)) . "\n\n";

open my $in, q{<:encoding(UTF-8)}, \$out;

local $INPUT_RECORD_SEPARATOR = '';

my $in_code_block = 0;
my $section       = '';

my $fixed_output = '';

while (my $para = <$in>) {
   if ( $nofix ) {
      $fixed_output .= $para;
      next;
   }

   next if $para =~ m/^\.\. highlight:: perl/;

   $in_code_block = $para =~ m/^\s{2,}/ ? 1 : 0;

   if ($para =~ m/^\*{2,}\n([\w\s,-]+)\n\*{2,}$/m) {
      $fixed_output .= "$1\n" .
                       ('=' x length $1) .
                       "\n\n";
      $section = $1;
   }
   elsif ($para =~ m/^Usage: /) {
      $para =~ s/^Usage: //;
      $fixed_output .= "Usage\n"   .
                       "-----\n\n" .
                       "::\n\n"    .
                       "  $para";
   }
   elsif ($para =~ m/^Examples:/) {
      $fixed_output .= "Examples\n" .
                       "--------\n\n";
   }
   else {
      $para =~ s/\.\. code-block:: perl/.. code-block:: bash/mg;
      $para =~ s/`+$tool`+/$tool/g;
      $para =~ s/([^\/])$tool/$1:program:`$tool`/g unless $in_code_block;
      $para =~ s/^$tool/:program:`$tool`/gm;
      $para =~ s/^--(\S+)$/.. option:: --$1/mg;
      $para =~ s/"--(\S+)"/:option:`--$1`/g;
      $para =~ s/\\\*/*/g;
      $para =~ s/\\ //g;
      $para =~ s/^[ ]+$//mg;
      $para =~ s/^\n\n/\n/mg;
      $para =~ s/code-block:: bash(\s+)CREATE/code-block:: sql$1CREATE/sg;
      $para =~ s/\*\*:program/** :program/g;
      if ( ($section || '') eq 'OUTPUT' ) {
         $para =~ s/^([A-Z_]+)\n\n/$1\n/;
      }
      $fixed_output .= $para;
   }
}

close $in;
 
if ($nofix) {
   print $fixed_output;
}
else {
   print $header . $fixed_output;
}

sub format_links {
   if ( my ($label, $url) = split /\|/, $_[0] ) {
      return $url, $label;
   }
   else {
      local $conv->{callbacks}{link};
      return $conv->view_seq_link(@_)
   }
}