mirror of
				https://github.com/containers/podman.git
				synced 2025-10-25 18:25:59 +08:00 
			
		
		
		
	 980b1e87d4
			
		
	
	980b1e87d4
	
	
	
		
			
			Want to have man pages match commands, since we have lots of printed man pages with using Options, we will change the command line to use Options in --help. Signed-off-by: Daniel J Walsh <dwalsh@redhat.com>
		
			
				
	
	
		
			155 lines
		
	
	
		
			4.2 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			155 lines
		
	
	
		
			4.2 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable File
		
	
	
	
	
| #!/usr/bin/env bash
 | |
| # Assemble remote man pages for darwin or windows from markdown files
 | |
| set -e
 | |
| 
 | |
| PLATFORM=$1                         ## linux, windows or darwin
 | |
| TARGET=${2}                         ## where to output files
 | |
| SOURCES=${@:3}                      ## directories to find markdown files
 | |
| 
 | |
| PODMAN=${PODMAN:-bin/podman-remote} ## location overridden for testing
 | |
| 
 | |
| function usage() {
 | |
|     echo >&2 "$0 PLATFORM TARGET SOURCES..."
 | |
|     echo >&2 "PLATFORM: Is either linux, darwin or windows."
 | |
|     echo >&2 "TARGET: Is the directory where files will be staged. eg, docs/build/remote/linux"
 | |
|     echo >&2 "SOURCES: Are the directories of source files. eg, docs/source/markdown"
 | |
| }
 | |
| 
 | |
| function fail() {
 | |
|     echo >&2 -e "$(dirname $0): $@\n"
 | |
|     exit 1
 | |
| }
 | |
| 
 | |
| case $PLATFORM in
 | |
| darwin|linux)
 | |
|     PUBLISHER=man_fn
 | |
|     ext=1
 | |
|     ;;
 | |
| windows)
 | |
|     PUBLISHER=html_fn
 | |
|     ext=1.md
 | |
|     ;;
 | |
| -help)
 | |
|     usage
 | |
|     exit 0
 | |
|     ;;
 | |
| *) fail '"linux", "darwin" and "windows" are the only supported platforms.' ;;
 | |
| esac
 | |
| 
 | |
| if [[ -z $TARGET ]]; then
 | |
|     fail 'TARGET directory is required'
 | |
| fi
 | |
| 
 | |
| if [[ -z $SOURCES ]]; then
 | |
|     fail 'At least one SOURCE directory is required'
 | |
| fi
 | |
| 
 | |
| if [[ ! -x $PODMAN ]]; then
 | |
|     fail "$PODMAN does not exist"
 | |
| fi
 | |
| 
 | |
| ## man_fn copies the man page or link to flattened directory
 | |
| function man_fn() {
 | |
|     local page=$1
 | |
|     local file=$(basename $page)
 | |
|     local dir=$(dirname $page)
 | |
| 
 | |
|     if [[ ! -f $page ]]; then
 | |
|         page=$dir/links/${file%.*}.$ext
 | |
|     fi
 | |
|     install $page $TARGET/${file%%.*}.1
 | |
| }
 | |
| 
 | |
| ## html_fn converts the markdown page or link to HTML
 | |
| function html_fn() {
 | |
|     local markdown=$1
 | |
|     local file=$(basename $markdown)
 | |
|     local dir=$(dirname $markdown)
 | |
| 
 | |
|     if [[ ! -f $markdown ]]; then
 | |
|         local link=$(sed -e 's?.so man1/\(.*\)?\1?' <$dir/links/${file%.md})
 | |
|         markdown=$dir/$link.md
 | |
|     fi
 | |
|     pandoc --ascii --lua-filter=docs/links-to-html.lua -o $TARGET/${file%%.*}.html $markdown
 | |
| }
 | |
| 
 | |
| # Run 'podman help' (possibly against a subcommand, e.g. 'podman help image')
 | |
| # and return a list of each first word under 'Available Commands', that is,
 | |
| # the command name but not its description.
 | |
| function podman_commands() {
 | |
|     $PODMAN help "$@" |\
 | |
|         awk '/^Available Commands:/{ok=1;next}/^Options:/{ok=0}ok { print $1 }' |\
 | |
|         grep .
 | |
| }
 | |
| 
 | |
| function podman_all_commands(){
 | |
|     for cmd in $(podman_commands "$@") ; do
 | |
| 		echo $@ $cmd
 | |
|         podman_all_commands $@ $cmd
 | |
| 	done
 | |
| }
 | |
| 
 | |
| ## pub_pages finds and publishes the remote manual pages
 | |
| function pub_pages() {
 | |
|     local source=$1
 | |
|     local publisher=$2
 | |
|     for f in $(ls $source/podman-remote*); do
 | |
|         $publisher $f
 | |
|     done
 | |
| 
 | |
| 
 | |
|     while IFS= read -r cmd; do
 | |
|         file="podman-${cmd// /-}"
 | |
| 
 | |
|         # Source dir may have man (.1) files (linux/darwin) or .1.md (windows)
 | |
|         # but the links subdir will always be .1 (man) files
 | |
|         if [ -f $source/$file.$ext -o -f $source/links/$file.1 ]; then
 | |
|             $publisher $(echo $source/$file.$ext)
 | |
|         else
 | |
|             # This is worth failing CI for
 | |
|             fail "no doc file nor link $source/$file.$ext for 'podman $cmd'"
 | |
|         fi
 | |
|     done <<< "$(podman_all_commands)"
 | |
| }
 | |
| 
 | |
| ## sed syntax is different on darwin and linux
 | |
| ## sed --help fails on mac, meaning we have to use mac syntax
 | |
| function sed_os(){
 | |
|     if sed --help > /dev/null 2>&1 ; then
 | |
|         $(sed -i "$@")
 | |
|     else
 | |
|         $(sed -i "" "$@")
 | |
|     fi
 | |
| }
 | |
| 
 | |
| ## rename renames podman-remote.ext to podman.ext, and fixes up contents to reflect change
 | |
| function rename (){
 | |
|     if [[ "$PLATFORM" != linux ]]; then
 | |
|         local remote=$(echo $TARGET/podman-remote.*)
 | |
|         local ext=${remote##*.}
 | |
|         mv $remote $TARGET/podman.$ext
 | |
| 
 | |
|         sed_os "s/podman\\\*-remote/podman/g" $TARGET/podman.$ext
 | |
|         sed_os "s/A\ remote\ CLI\ for\ Podman\:\ //g" $TARGET/podman.$ext
 | |
|         case $PLATFORM in
 | |
|         darwin|linux)
 | |
|             sed_os "s/Podman\\\*-remote/Podman\ for\ Mac/g" $TARGET/podman.$ext
 | |
|         ;;
 | |
|         windows)
 | |
|             sed_os "s/Podman\\\*-remote/Podman\ for\ Windows/g" $TARGET/podman.$ext
 | |
|         ;;
 | |
|         esac
 | |
|     fi
 | |
| }
 | |
| 
 | |
| ## walk the SOURCES for markdown sources
 | |
| mkdir -p $TARGET
 | |
| for s in $SOURCES; do
 | |
|     if [[ -d $s ]]; then
 | |
|         pub_pages $s $PUBLISHER
 | |
|     else
 | |
|         echo >&2 "Warning: $s does not exist"
 | |
|     fi
 | |
| done
 | |
| rename
 |