1
1
Ralph Castain c696e04c5e Since PMIx is moving to release v3.0, embed the new release candidate in opal/pmix framework. Move the pmix2x code over to the ext2x component. Create a new ext3x component
Remove some build product. Tell PMIx that we don't need a new nspace generated when OMPI calls connect
Add missing Makefile

Signed-off-by: Ralph Castain <rhc@open-mpi.org>
2017-10-09 13:51:08 -07:00

188 строки
6.0 KiB
Perl
Исполняемый файл

#!/usr/bin/env perl
# Script to pull down the latest markdown man pages from the PMIx
# git repo. Iterate over them, converting each to an nroff man page
# and also copying+committing them to the gh-pages branch. Finally,
# git push them back upstream (so that Github will render + serve them
# up as web pages).
use strict;
use warnings;
use POSIX;
use File::Basename;
use Getopt::Long;
use File::Temp;
my $repo_arg;
my $source_branch_arg = "master";
my $pages_branch_arg = "gh-pages";
my $logfile_dir_arg = "/tmp";
my $verbose_arg;
my $help_arg;
my $ok = Getopt::Long::GetOptions("repo=s" => \$repo_arg,
"source-branch=s" => \$source_branch_arg,
"pages-branch=s" => \$pages_branch_arg,
"logfile-dir=s" => \$logfile_dir_arg,
"help|h" => \$help_arg,
"verbose" => \$verbose_arg,
);
if (!$ok || $help_arg) {
print "Invalid command line argument.\n\n"
if (!$ok);
print "Options:
--help | -h Print this message
--repo Git repo to be updated
--source-branch Branch containing source files (default: master)
--pages-branch Branch where man pages are to be output (default: gh-pages)
--logfile-dir Directory where execution log is to be written (default: /tmp)
--verbose Print debug info during execution\n";
exit($ok ? 0 : 1);
}
# Sanity checks
die "Must specify a git repo"
if (!defined($repo_arg));
#####################################################################
my $logfile_dir = $logfile_dir_arg;
my $logfile_counter = 1;
sub doit {
my $allowed_to_fail = shift;
my $cmd = shift;
my $stdout_file = shift;
# Put a prefix on the logfiles so that we know that they belong to
# this script, and put a counter so that we know the sequence of
# logfiles
$stdout_file = "runall-md2nroff-$logfile_counter-$stdout_file";
++$logfile_counter;
# Redirect stdout if requested
if (defined $stdout_file) {
$stdout_file = "$logfile_dir/$stdout_file.log";
unlink($stdout_file);
$cmd .= " >$stdout_file";
} elsif (!$verbose_arg && $cmd !~ />/) {
$cmd .= " >/dev/null";
}
$cmd .= " 2>&1";
my $rc = system($cmd);
if (0 != $rc && !$allowed_to_fail) {
# If we die/fail, ensure to change out of the temp tree so
# that it can be removed upon exit.
chdir("/");
die "Command $cmd failed: exit status $rc";
}
system("cat $stdout_file")
if ($verbose_arg && defined($stdout_file) && -f $stdout_file);
}
sub verbose {
print @_
if ($verbose_arg);
}
#####################################################################
# Setup a logfile dir just for this run
my ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) =
localtime(time);
$logfile_dir =
sprintf("%s/cron-run-all-md2nroff-logs-%04d-%02d-%02d-%02d%02d",
$logfile_dir_arg, $year + 1900, $mon + 1, $mday,
$hour, $min);
my $rc = system("mkdir $logfile_dir");
if ($rc != 0 || ! -d $logfile_dir || ! -w $logfile_dir) {
chdir("/");
die "mkdir of $logfile_dir failed, or can't write to it";
}
# First, git clone the source branch of the repo
verbose("*** Cloning repo: $repo_arg / $source_branch_arg...\n");
my $tmpdir = File::Temp->newdir();
chdir($tmpdir);
doit(0, "git clone --single-branch --branch $source_branch_arg $repo_arg source", "git-clone");
# Next, git clone the pages branch of repo
if (defined($pages_branch_arg)) {
verbose("*** Cloning repo: $repo_arg / $pages_branch_arg...\n");
doit(0, "git clone --single-branch --branch $pages_branch_arg $repo_arg pages", "git-clone2");
}
#####################################################################
# Find all the *.\d.md files in the source repo
verbose("*** Finding markdown man pages...\n");
opendir(DIR, "source/man");
my @markdown_files = grep { /\.\d\.md$/ && -f "source/man/$_" } readdir(DIR);
closedir(DIR);
verbose("Found: @markdown_files\n");
#####################################################################
# Copy each of the markdown files to the pages branch checkout
if (defined($pages_branch_arg)) {
chdir("pages/master");
foreach my $file (@markdown_files) {
doit(0, "cp ../../source/man/$file man/$file", "loop-cp");
# Is there a new man page? If so, we need to "git add" it.
my $out = `git status --porcelain man/$file`;
doit(0, "git add man/$file", "loop-git-add")
if ($out =~ /^\?\?/);
}
# Git commit those files in the pages repo and push them to the
# upstream repo so that they go live. If nothing changed, the commit
# and push will be no-ops.
chdir("..");
doit(1, "git commit --no-verify -a -m \"Updated Markdown man pages from $source_branch_arg\"",
"git-commit-first");
doit(1, "git push", "git-push-first");
}
#####################################################################
# Now process each of the Markdown files in the source repo and
# generate new nroff man pages.
chdir("$tmpdir/source/man");
foreach my $file (@markdown_files) {
doit(0, "../contrib/md2nroff.pl --source $file", "loop2-md2nroff");
# Did we generate a new man page? If so, we need to "git add" it.
my $man_file = basename($file);
$man_file =~ m/\.(\d)\.md$/;
my $section = $1;
$man_file =~ s/\.md$//;
my $full_filename = "man$section/$man_file";
my $out = `git status --porcelain $full_filename`;
doit(0, "git add $full_filename", "loop2-git-add")
if ($out =~ /^\?\?/);
}
# Similar to above: commit the newly-generated nroff pages and push
# them back upstream. If nothing changed, these will be no-ops.
doit(1, "git commit --no-verify -a -m \"Updated nroff-generated man pages\"", "git-commit-final");
doit(1, "git push", "git-push-final");
# chdir out of the tmpdir so that it can be removed
chdir("/");
# If we get here, we finished successfully, so there's no need to keep
# the logfile dir around
system("rm -rf $logfile_dir");
exit(0);